master 767dcb338c0b cached
125 files
5.2 MB
1.4M tokens
833 symbols
1 requests
Download .txt
Showing preview only (5,445K chars total). Download the full file or copy to clipboard to get everything.
Repository: stuff-by-3-random-dudes/UWUVCI-AIO-WPF
Branch: master
Commit: 767dcb338c0b
Files: 125
Total size: 5.2 MB

Directory structure:
gitextract_nzcsa59w/

├── .gitattributes
├── .gitignore
├── AnalysisReport.sarif
├── LICENSE
├── README.md
├── UWUVCI AIO WPF/
│   ├── App.config
│   ├── App.xaml
│   ├── App.xaml.cs
│   ├── AssemblyInfo1.cs
│   ├── Classes/
│   │   ├── BootImage.cs
│   │   ├── DeflickerDitheringRemover.cs
│   │   ├── Dol.cs
│   │   ├── GameConfig.cs
│   │   ├── GameCubeISO.cs
│   │   ├── Injection.cs
│   │   ├── KeyFile.cs
│   │   ├── MenuIconImage - Kopieren.cs
│   │   ├── MenuIconImage.cs
│   │   └── ToolCheck.cs
│   ├── FodyWeavers.xml
│   ├── FodyWeavers.xsd
│   ├── Font/
│   │   └── font.otf
│   ├── Helpers/
│   │   ├── ConsoleLoggerWriter.cs
│   │   ├── FileUtils.cs
│   │   ├── JsonSettingsManager.cs
│   │   ├── Logger.cs
│   │   └── MacLinuxHelper.cs
│   ├── ILLink/
│   │   └── ILLink.Descriptors.LibraryBuild.xml
│   ├── Models/
│   │   ├── BaseModel.cs
│   │   ├── DolSection.cs
│   │   ├── GctCode.cs
│   │   ├── JsonAppSettings.cs
│   │   ├── MainViewModel.cs
│   │   ├── N64Conf.cs
│   │   ├── PNGTGA.cs
│   │   ├── TKeys.cs
│   │   └── ToolStep.cs
│   ├── Properties/
│   │   ├── AssemblyInfo.cs
│   │   ├── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   ├── Settings.Designer.cs
│   │   └── Settings.settings
│   ├── Settings.cs
│   ├── UI/
│   │   ├── Done.xaml
│   │   ├── Done.xaml.cs
│   │   ├── Frames/
│   │   │   ├── InjectFrame.xaml
│   │   │   ├── InjectFrame.xaml.cs
│   │   │   ├── InjectFrames/
│   │   │   │   ├── Bases/
│   │   │   │   │   ├── BaseContainerFrame.xaml
│   │   │   │   │   ├── BaseContainerFrame.xaml.cs
│   │   │   │   │   ├── CustomBaseFrame.xaml
│   │   │   │   │   ├── CustomBaseFrame.xaml.cs
│   │   │   │   │   ├── NonCustomBaseFrame.xaml
│   │   │   │   │   └── NonCustomBaseFrame.xaml.cs
│   │   │   │   └── Configurations/
│   │   │   │       ├── BrightnessValidationRule.cs
│   │   │   │       ├── GBA.xaml
│   │   │   │       ├── GBA.xaml.cs
│   │   │   │       ├── GCConfig.xaml
│   │   │   │       ├── GCConfig.xaml.cs
│   │   │   │       ├── InverseBootConverter.cs
│   │   │   │       ├── N64Config.xaml
│   │   │   │       ├── N64Config.xaml.cs
│   │   │   │       ├── OtherConfigs.xaml
│   │   │   │       ├── OtherConfigs.xaml.cs
│   │   │   │       ├── PixelArtScalerValidationRule.cs
│   │   │   │       ├── TurboGrafX.xaml
│   │   │   │       ├── TurboGrafX.xaml.cs
│   │   │   │       ├── WiiConfig.xaml
│   │   │   │       └── WiiConfig.xaml.cs
│   │   │   ├── KeyFrame/
│   │   │   │   ├── TKFrame.xaml
│   │   │   │   └── TKFrame.xaml.cs
│   │   │   ├── Path/
│   │   │   │   ├── Paths.xaml
│   │   │   │   └── Paths.xaml.cs
│   │   │   ├── SettingsFrame.xaml
│   │   │   ├── SettingsFrame.xaml.cs
│   │   │   ├── StartFrame.xaml
│   │   │   └── StartFrame.xaml.cs
│   │   └── Windows/
│   │       ├── BaseGameWindow.xaml
│   │       ├── BaseGameWindow.xaml.cs
│   │       ├── CloseWindow.xaml
│   │       ├── CloseWindow.xaml.cs
│   │       ├── Custom Message - Kopieren.xaml
│   │       ├── Custom Message - Kopieren.xaml.cs
│   │       ├── Custom Message.xaml
│   │       ├── Custom Message.xaml.cs
│   │       ├── DownloadWait - Kopieren.xaml
│   │       ├── DownloadWait - Kopieren.xaml.cs
│   │       ├── DownloadWait.xaml
│   │       ├── DownloadWait.xaml.cs
│   │       ├── EnterKey.xaml
│   │       ├── EnterKey.xaml.cs
│   │       ├── GuideWindow.xaml
│   │       ├── GuideWindow.xaml.cs
│   │       ├── IMG_Message - Kopieren - Kopieren - Kopieren.xaml
│   │       ├── IMG_Message - Kopieren - Kopieren - Kopieren.xaml.cs
│   │       ├── IMG_Message - Kopieren - Kopieren.xaml
│   │       ├── IMG_Message - Kopieren - Kopieren.xaml.cs
│   │       ├── IMG_Message - Kopieren.xaml
│   │       ├── IMG_Message - Kopieren.xaml.cs
│   │       ├── IMG_Message.xaml
│   │       ├── IMG_Message.xaml.cs
│   │       ├── ImageCreator - Kopieren - Kopieren (2).xaml
│   │       ├── ImageCreator - Kopieren - Kopieren (2).xaml.cs
│   │       ├── ImageCreator - Kopieren - Kopieren.xaml
│   │       ├── ImageCreator - Kopieren - Kopieren.xaml.cs
│   │       ├── ImageCreator - Kopieren.xaml
│   │       ├── ImageCreator - Kopieren.xaml.cs
│   │       ├── ImageCreator.xaml
│   │       ├── ImageCreator.xaml.cs
│   │       ├── IntroductionWindow.xaml
│   │       ├── IntroductionWindow.xaml.cs
│   │       ├── MacLinuxWindow.xaml
│   │       ├── MacLinuxWindow.xaml.cs
│   │       ├── MenuWindow.xaml
│   │       ├── MenuWindow.xaml.cs
│   │       ├── TitleKeys - Kopieren.xaml
│   │       ├── TitleKeys - Kopieren.xaml.cs
│   │       ├── TitleKeys.xaml
│   │       └── TitleKeys.xaml.cs
│   ├── UWUVCI AIO WPF.csproj
│   ├── app.manifest
│   ├── packages.config
│   └── uwuvci_installer_creator/
│       ├── app/
│       │   └── Readme.txt
│       └── install_script.iss
├── UWUVCI AIO WPF.sln
└── upgrade-assistant.clef

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb

================================================
FILE: AnalysisReport.sarif
================================================
{
  "$schema": "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json",
  "version": "2.1.0",
  "runs": [
    {
      "tool": {
        "driver": {
          "name": "Dependency Analysis",
          "semanticVersion": "0.4.336902",
          "informationUri": "https://docs.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview",
          "rules": [
            {
              "id": "UA106",
              "name": "PackageToBeAdded",
              "fullDescription": {
                "text": "Packages that need to be added in order to upgrade the project to chosen TFM"
              },
              "helpUri": "https://docs.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview"
            }
          ]
        }
      },
      "results": [
        {
          "ruleId": "UA106",
          "message": {
            "text": "Package Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, Version=0.4.336902 needs to be added."
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file:///C:/Users/zesty.fernandez/Documents/GitHub/UWUVCI-AIO-WPF/UWUVCI%20AIO%20WPF/UWUVCI%20AIO%20WPF.csproj"
                },
                "region": {}
              }
            }
          ]
        },
        {
          "ruleId": "UA106",
          "message": {
            "text": "Package Microsoft.Windows.Compatibility, Version=6.0.0 needs to be added."
          },
          "locations": [
            {
              "physicalLocation": {
                "artifactLocation": {
                  "uri": "file:///C:/Users/zesty.fernandez/Documents/GitHub/UWUVCI-AIO-WPF/UWUVCI%20AIO%20WPF/UWUVCI%20AIO%20WPF.csproj"
                },
                "region": {}
              }
            }
          ]
        }
      ],
      "columnKind": "utf16CodeUnits"
    },
    {
      "tool": {
        "driver": {
          "name": "API Upgradability",
          "semanticVersion": "0.4.336902",
          "informationUri": "https://docs.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview"
        }
      },
      "results": [],
      "columnKind": "utf16CodeUnits"
    }
  ]
}

================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# UWUVCI-AIO-WPF
 
 Wii U All-in-One Injector.
 
 ## Systems Supported
 
 * DS
 * GBA
 * N64
 * Snes
 * Nes
 * Turbo Grafx
 * MSX
 * Wii
 * GCN
 
 ## Questions and Concerns
 
 Check out our discord:
 * https://discord.gg/mPZpqJJVmZ
 
 Check out the official video guide:
 * https://www.youtube.com/watch?v=1vzD_R-xPx4&list=PLbQMtrmXFIxQ1hpvu9m1th41vsaqnZ2Id
 
 ## This repo is no longer in active development
 
 * The latest version of this writing is 3.N
 * Any future updates will be community-driven
 * Repo is still being managed, so feel free to fork/PR


================================================
FILE: UWUVCI AIO WPF/App.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <section name="UWUVCI_AIO_WPF.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.1.0" newVersion="6.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Http" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.2" newVersion="9.0.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.2" newVersion="9.0.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.4.2.13" newVersion="1.4.2.13" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Web.WebView2.WinForms" publicKeyToken="2a8ab48044d2601e" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.3065.39" newVersion="1.0.3065.39" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Web.WebView2.Core" publicKeyToken="2a8ab48044d2601e" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.3065.39" newVersion="1.0.3065.39" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>


================================================
FILE: UWUVCI AIO WPF/App.xaml
================================================
<Application x:Class="UWUVCI_AIO_WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:UWUVCI_AIO_WPF"
             Startup="Application_Startup"
             >
    <Application.Resources>
        
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Indigo.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <local:MainViewModel x:Key="mvm"/>
            <FontFamily x:Key="NFont">pack://application:,,,/Font/#FOT-RodinNTLG Pro B</FontFamily>
        </ResourceDictionary>
    </Application.Resources>
</Application>


================================================
FILE: UWUVCI AIO WPF/App.xaml.cs
================================================
using System;
using System.Diagnostics;
using System.IO;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using UWUVCI_AIO_WPF.UI.Windows;
using UWUVCI_AIO_WPF.Helpers;
using GameBaseClassLibrary;

namespace UWUVCI_AIO_WPF
{
    public partial class App : Application
    {
        Timer t = new Timer(5000);
        private StartupEventArgs _startupArgs;
        private static string AppDataPath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
            "UWUVCI-V3");

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // Ensure the settings directory exists before attempting to load settings
            if (!Directory.Exists(AppDataPath))
                Directory.CreateDirectory(AppDataPath);

            // Redirect Console.WriteLine to the logger at the very beginning
            Console.SetOut(new ConsoleLoggerWriter());

            // Check if running from OneDrive
            if (IsRunningFromOneDrive())
            {
                MessageBox.Show("UWUVCI AIO cannot be run from a OneDrive folder due to compatibility issues. \n\n" +
                    "Please move it to another location (e.g., C:\\Programs or C:\\Users\\YourName\\UWUVCI_AIO) before launching.",
                    "Error: OneDrive Detected", MessageBoxButton.OK, MessageBoxImage.Error);
                Environment.Exit(1); // Terminate the application
            }

            // Add global event handlers for drag-and-drop
            EventManager.RegisterClassHandler(typeof(TextBox), UIElement.PreviewDragOverEvent, new DragEventHandler(GlobalTextBox_PreviewDragOver));
            EventManager.RegisterClassHandler(typeof(TextBox), UIElement.PreviewDropEvent, new DragEventHandler(GlobalTextBox_PreviewDrop));

            if (File.Exists("tools.json"))
                File.Delete("tools.json");

            _startupArgs = e;
            JsonSettingsManager.LoadSettings();

            if (!JsonSettingsManager.Settings.IsFirstLaunch)
            {
                LaunchMainApplication(e);
            }
            else
            {
                if (MacLinuxHelper.IsRunningUnderWineOrSimilar())
                {
                    MessageBox.Show("UWUVCI cannot tell if you went through the tutorial or not. We will assume you did, but if you didn't, in the main application click the gear icon, and then click the button that says 'Show Tutorial Screens'.",
                        "UWUVCI Tutorial..?", MessageBoxButton.OK, MessageBoxImage.Question);
                    JsonSettingsManager.Settings.IsFirstLaunch = false;
                    JsonSettingsManager.SaveSettings();
                    LaunchMainApplication(e);
                }
                else
                {
                    new IntroductionWindow().ShowDialog();
                }
            }

            if (JsonSettingsManager.Settings.ShowZestyFork)
            {
                var result = MessageBox.Show("There is a more updated fork that is recommended to use going forward. Press 'Yes' to check it out now. If not, you can always find it under the Settings (gear icon).", "ZestyTS's UWUVCI V3", MessageBoxButton.YesNo,MessageBoxImage.Exclamation);
                
                if (result == MessageBoxResult.Yes)
                {
                    Process.Start("https://zestyts.itch.io/uwuvci-v3");
                }
                JsonSettingsManager.Settings.ShowZestyFork = false;
                JsonSettingsManager.SaveSettings();
            }
        }

        private static void GlobalTextBox_PreviewDragOver(object sender, DragEventArgs e)
        {
            e.Effects = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
            e.Handled = true;
        }
        private bool IsRunningFromOneDrive()
        {
            string exePath = Process.GetCurrentProcess().MainModule.FileName;
            return exePath.ToLower().Contains("onedrive");
        }

        private static void GlobalTextBox_PreviewDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                if (files != null && files.Length > 0)
                {
                    TextBox txtBox = sender as TextBox;
                    if (txtBox != null)
                    {
                        // Assign to ViewModel properties dynamically
                        if (Current.MainWindow is MainWindow mainWindow &&
                            mainWindow.Content is Grid grid &&
                            grid.DataContext is MainViewModel mvm)
                        {
                            if (mvm.GameConfiguration.Console == GameConsoles.WII || mvm.GameConfiguration.Console == GameConsoles.GCN)
                                return;

                            string filePath = files[0];

                            // Temporarily make writable to allow drop
                            txtBox.IsReadOnly = false;
                            txtBox.Text = filePath;
                            txtBox.IsReadOnly = true;

                            switch (txtBox.Name)
                            {
                                case "rp":  // Special handling for ROM Path
                                    mvm.RomSet = true;
                                    mvm.RomPath = filePath;
                                    if (mvm.BaseDownloaded)
                                    {
                                        mvm.CanInject = true;
                                    }

                                    // Call the correct `getBootIMG*()` method dynamically
                                    switch (mvm.GameConfiguration.Console)
                                    {
                                        case GameConsoles.NDS:
                                            mvm.getBootIMGNDS(mvm.RomPath);
                                            break;
                                        case GameConsoles.NES:
                                            mvm.getBootIMGNES(mvm.RomPath);
                                            break;
                                        case GameConsoles.SNES:
                                            mvm.getBootIMGSNES(mvm.RomPath);
                                            break;
                                        case GameConsoles.MSX:
                                            mvm.getBootIMGMSX(mvm.RomPath);
                                            break;
                                        case GameConsoles.N64:
                                            mvm.getBootIMGN64(mvm.RomPath);
                                            break;
                                        case GameConsoles.GBA:
                                            var fileExtension = Path.GetExtension(filePath).ToLower();
                                            if (fileExtension != ".gb" && fileExtension != ".gbc")
                                                mvm.getBootIMGGBA(mvm.RomPath);
                                            break;
                                        case GameConsoles.TG16:
                                            mvm.getBootIMGTG(mvm.RomPath);
                                            break;
                                        default:
                                            Console.WriteLine("Unsupported console type: " + mvm.GameConfiguration.Console);
                                            break;
                                    }
                                    break;

                                case "ic":
                                    mvm.GameConfiguration.TGAIco.ImgPath = filePath;
                                    break;
                                case "tv":
                                    mvm.GameConfiguration.TGATv.ImgPath = filePath;
                                    break;
                                case "drc":
                                    mvm.GameConfiguration.TGADrc.ImgPath = filePath;
                                    break;
                                case "log":
                                    mvm.GameConfiguration.TGALog.ImgPath = filePath;
                                    break;
                                case "ini":
                                    mvm.GameConfiguration.N64Stuff.INIPath = filePath;
                                    break;
                                case "sound":
                                    mvm.BootSound = filePath;
                                    break;
                            }
                        }
                    }
                }
            }
        }


        public void LaunchMainApplication()
        {
            LaunchMainApplication(_startupArgs);
        }

        private void LaunchMainApplication(StartupEventArgs e)
        {
            if (Directory.Exists(@"custom") && File.Exists(@"custom\main.dol"))
            {
                if (!Directory.Exists(@"bin\Tools"))
                    Directory.CreateDirectory(@"bin\Tools");

                File.Copy(@"custom\main.dol", @"bin\Tools\nintendont.dol", true);
                File.Copy(@"custom\main.dol", @"bin\Tools\nintendont_force.dol", true);
            }

            bool check = true;
            bool bypass = false;
            if (e.Args.Length >= 1)
                foreach (var s in e.Args)
                {
                    if (s == "--skip") check = false;
                    if (s == "--spacebypass") bypass = true;
                }

            Process[] pname = Process.GetProcessesByName("UWUVCI AIO");
            if (pname.Length > 1 && check)
            {
                t.Elapsed += KillProg;
                t.Start();
                Custom_Message cm = new Custom_Message("Another Instance Running",
                    " You already got another instance of UWUVCI AIO running. \n This instance will terminate in 5 seconds. ");
                cm.ShowDialog();
                KillProg(null, null);
            }
            else
            {
                MainWindow wnd = new MainWindow();
                double height = SystemParameters.PrimaryScreenHeight;
                double width = SystemParameters.PrimaryScreenWidth;
                if (width < 1150 || height < 700)
                {
                    t.Elapsed += KillProg;
                    t.Start();
                    Custom_Message cm = new Custom_Message("Resolution not supported",
                        "Your screen resolution is not supported, please use a resolution of at least 1152x864\nIf your resolution is higher than this, then it's because of your zoom level, either way, please change your display settings.\nThis instance will terminate in 5 seconds.");
                    cm.ShowDialog();
                    KillProg(null, null);
                }

                if (bypass)
                    wnd.allowBypass();

                if (e.Args.Length >= 1 && e.Args[0] == "--debug")
                    wnd.setDebug(bypass);

                wnd.Show();
            }
        }

        private void KillProg(object sender, ElapsedEventArgs e)
        {
            t.Stop();
            Environment.Exit(1);
        }
    }
}


================================================
FILE: UWUVCI AIO WPF/AssemblyInfo1.cs
================================================


================================================
FILE: UWUVCI AIO WPF/Classes/BootImage.cs
================================================
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Globalization;
using System.Reflection;

namespace UWUVCI_AIO_WPF.Classes
{
    public class BootImage : IDisposable
    {
        private bool disposed = false;
        private Bitmap _frame;
        private Bitmap _titleScreen;
        private Font font;

        public string _imageVar;
        public Rectangle _rectangleGBA = new Rectangle(132, 260, 399, 266);
        public Rectangle _rectangleGBC = new Rectangle(183, 260, 296, 266);
        public Rectangle _rectangleH4V3 = new Rectangle(131, 249, 400, 300);
        public Rectangle _rectangleWII = new Rectangle(224, 200, 832, 333);

        public Bitmap Frame
        {
            set { _frame?.Dispose(); _frame = value; }
            get { return _frame; }
        }

        public Bitmap TitleScreen
        {
            set { _titleScreen?.Dispose(); _titleScreen = value; }
            get { return _titleScreen; }
        }

        public string NameLine1;
        public string NameLine2;
        public int Released;
        public int Players;
        public bool Longname;

        public BootImage()
        {
            NameLine1 = null;
            NameLine2 = null;
            Released = 0;
            Players = 0;
            Longname = false;
        }

        ~BootImage()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    _frame?.Dispose();
                    _titleScreen?.Dispose();
                }
                disposed = true;
            }
        }

        private bool ContainsJapanese(string text)
        {
            if (string.IsNullOrEmpty(text))
                return false;

            foreach (char c in text)
            {
                if (char.GetUnicodeCategory(c) == UnicodeCategory.OtherLetter) // this covers Hiragana, Katakana, and Kanji
                    return true;
            }
            return false;
        }

        private Font GetFont()
        {
            try
            {
                var privateFonts = new PrivateFontCollection();
                privateFonts.AddFontFile(@"bin\Tools\font.otf");
                return new Font(privateFonts.Families[0], 10.0F, FontStyle.Regular, GraphicsUnit.Point);
            }
            catch
            {
                return new Font("Trebuchet MS", 10.0F, FontStyle.Bold, GraphicsUnit.Point);
            }
        }

        private Rectangle GetRectangleForConsole(string console)
        {
            _imageVar = "_rectangle" + console;
            try
            {
                var fieldInfo = GetType().GetField(_imageVar, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                return fieldInfo != null ? (Rectangle)fieldInfo.GetValue(this) : _rectangleH4V3;
            }
            catch
            {
                return _rectangleH4V3;
            }
        }

        private void DrawText(Graphics g, string text, Font font, Rectangle rectangle, Pen shadow, Pen outline, Brush brush)
        {
            using (var path = new GraphicsPath())
            {
                path.AddString(text, font.FontFamily, (int)FontStyle.Regular, g.DpiY * 25.0F / 72.0F, rectangle, new StringFormat());
                g.DrawPath(shadow, path);
                g.DrawPath(outline, path);
                g.FillPath(brush, path);
            }
        }

        public Bitmap Create(string console)
        {
            Bitmap img = new Bitmap(1280, 720);
            Graphics g = Graphics.FromImage(img);
            g.PixelOffsetMode = PixelOffsetMode.Half;
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.CompositingMode = CompositingMode.SourceOver;
            g.CompositingQuality = CompositingQuality.HighQuality;
            g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
            g.Clear(Color.White);
            try
            {
                PrivateFontCollection privateFonts = new PrivateFontCollection();
                privateFonts.AddFontFile(@"bin\Tools\font.otf");
                font = new Font(privateFonts.Families[0], 10.0F, FontStyle.Regular, GraphicsUnit.Point);
            }
            catch (Exception)
            {
                font = new Font("Trebuchet MS", 10.0F, FontStyle.Bold, GraphicsUnit.Point);
            }

            SolidBrush brush = new SolidBrush(Color.FromArgb(32, 32, 32));
            Pen outline = new Pen(Color.FromArgb(222, 222, 222), 4.0F);
            Pen shadow = new Pen(Color.FromArgb(190, 190, 190), 6.0F);
            StringFormat format = new StringFormat();

            _imageVar = "_rectangle" + console;
            Rectangle rectangle;
            try
            {
                FieldInfo fieldInfo = GetType().GetField(_imageVar, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

                rectangle = fieldInfo != null
                    ? (Rectangle)fieldInfo.GetValue(this)
                    : _rectangleH4V3;

            }
            catch
            {
                //if rectangle isn't able to get set then H4V3 should be used.
                rectangle = _rectangleH4V3;
            }

            if (TitleScreen != null)
                g.DrawImage(TitleScreen, rectangle);
            else
                g.FillRectangle(new SolidBrush(Color.Black), rectangle);

            if (Frame != null)
                g.DrawImage(Frame, new Rectangle(0, 0, 1280, 720));

            var isNotEnglish = false;

            if (!string.IsNullOrEmpty(NameLine1) || !string.IsNullOrEmpty(NameLine2))
            {
                if (ContainsJapanese(NameLine1) || ContainsJapanese(NameLine2))
                    isNotEnglish = true;

                Pen outlineBold = new Pen(Color.FromArgb(222, 222, 222), 5.0F);
                Pen shadowBold = new Pen(Color.FromArgb(190, 190, 190), 7.0F);
                Rectangle rectangleNL1 = Longname ? new Rectangle(578, 313, 640, 50) : new Rectangle(578, 340, 640, 50);
                Rectangle rectangleNL2 = new Rectangle(578, 368, 640, 50);
                GraphicsPath nl1 = new GraphicsPath();
                GraphicsPath nl2 = new GraphicsPath();

                if (Longname)
                {
                    nl1.AddString(NameLine1, font.FontFamily,
                        (int)(FontStyle.Bold),
                        g.DpiY * 37.0F / 72.0F, rectangleNL1, format);
                    g.DrawPath(shadowBold, nl1);
                    g.DrawPath(outlineBold, nl1);
                    g.FillPath(brush, nl1);
                    nl2.AddString(NameLine2, font.FontFamily,
                        (int)(FontStyle.Bold),
                        g.DpiY * 37.0F / 72.0F, rectangleNL2, format);
                    g.DrawPath(shadowBold, nl2);
                    g.DrawPath(outlineBold, nl2);
                    g.FillPath(brush, nl2);
                }
                else
                {
                    nl1.AddString(NameLine1, font.FontFamily,
                        (int)(FontStyle.Bold),
                        g.DpiY * 37.0F / 72.0F, rectangleNL1, format);
                    g.DrawPath(shadowBold, nl1);
                    g.DrawPath(outlineBold, nl1);
                    g.FillPath(brush, nl1);
                }
            }


            if (Released > 0)
            {
                GraphicsPath r = new GraphicsPath();

                var releasedString = "Released: " + Released.ToString();
                if (isNotEnglish)
                    releasedString = Released.ToString() + "年発売";

                r.AddString(releasedString, font.FontFamily,
                    (int)(FontStyle.Regular),
                    g.DpiY * 25.0F / 72.0F, new Rectangle(586, 450, 600, 40), format);
                g.DrawPath(shadow, r);
                g.DrawPath(outline, r);
                g.FillPath(brush, r);
            }

            if (Players > 0)
            {
                string pStr = Players >= 4 ? "1-4" : (Players == 1 ? "1" : "1-" + Players.ToString());

                if (isNotEnglish)
                    pStr = "プレイ人数 " + pStr + "人";
                else
                    pStr = "Players: " + pStr;

                GraphicsPath p = new GraphicsPath();

                p.AddString(pStr, font.FontFamily,
                (int)(FontStyle.Regular),
                g.DpiY * 25.0F / 72.0F, new Rectangle(586, 496, 600, 40), format);

                g.DrawPath(shadow, p);
                g.DrawPath(outline, p);
                g.FillPath(brush, p);
            }

            return img;
        }
    }
}


================================================
FILE: UWUVCI AIO WPF/Classes/DeflickerDitheringRemover.cs
================================================
using System;
using System.IO;
using System.Windows;
using UWUVCI_AIO_WPF.Helpers;

public static class DeflickerDitheringRemover
{
    private static readonly byte[] DeflickerPattern = {
        0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0xF8,
        0x89, 0x04, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
        0x89, 0x44, 0x00, 0x01, 0x38, 0x60, 0x00, 0x00,
        0x51, 0x00, 0x07, 0x3E, 0x88, 0xE4, 0x00, 0x06,
        0x51, 0x40, 0x26, 0x36, 0x89, 0x04, 0x00, 0x0C,
        0x50, 0xE3, 0x07, 0x3E, 0x38, 0xE0, 0x00, 0x00,
        0x51, 0x07, 0x07, 0x3E, 0x89, 0x44, 0x00, 0x0D,
        0x89, 0x64, 0x00, 0x07, 0x39, 0x00, 0x00, 0x00,
        0x51, 0x47, 0x26, 0x36, 0x89, 0x44, 0x00, 0x02,
        0x89, 0x24, 0x00, 0x12, 0x51, 0x63, 0x26, 0x36,
        0x51, 0x40, 0x45, 0x2E, 0x89, 0x44, 0x00, 0x0E,
        0x51, 0x28, 0x07, 0x3E, 0x89, 0x24, 0x00, 0x13,
        0x51, 0x47, 0x45, 0x2E, 0x89, 0x44, 0x00, 0x03,
        0x51, 0x28, 0x26, 0x36, 0x89, 0x24, 0x00, 0x14,
        0x51, 0x40, 0x64, 0x26, 0x89, 0x44, 0x00, 0x0F,
        0x51, 0x28, 0x45, 0x2E, 0x89, 0x24, 0x00, 0x15,
        0x51, 0x47, 0x64, 0x26, 0x89, 0x44, 0x00, 0x04,
        0x89, 0x64, 0x00, 0x08, 0x51, 0x28, 0x64, 0x26,
        0x51, 0x40, 0x83, 0x1E, 0x89, 0x44, 0x00, 0x10,
        0x89, 0x24, 0x00, 0x16, 0x51, 0x63, 0x45, 0x2E,
        0x89, 0x64, 0x00, 0x09, 0x51, 0x47, 0x83, 0x1E,
        0x89, 0x44, 0x00, 0x05, 0x51, 0x28, 0x83, 0x1E,
        0x89, 0x24, 0x00, 0x11, 0x51, 0x63, 0x64, 0x26,
        0x89, 0x64, 0x00, 0x0A, 0x51, 0x40, 0xA2, 0x16,
        0x89, 0x44, 0x00, 0x0B, 0x51, 0x27, 0xA2, 0x16,
        0x88, 0x84, 0x00, 0x17, 0x39, 0x20, 0x00, 0x01,
        0x51, 0x63, 0x83, 0x1E, 0x51, 0x43, 0xA2, 0x16,
        0x50, 0x88, 0xA2, 0x16, 0x51, 0x20, 0xC0, 0x0E,
        0x39, 0x40, 0x00, 0x02, 0x39, 0x20, 0x00, 0x03,
        0x38, 0x80, 0x00, 0x04, 0x51, 0x43, 0xC0, 0x0E,
        0x51, 0x27, 0xC0, 0x0E, 0x50, 0x88, 0xC0, 0x0E,
        0x48, 0x00, 0x00, 0x24, 0x3D, 0x00, 0x01, 0x66,
        0x3C, 0x60, 0x02, 0x66, 0x3C, 0xE0, 0x03, 0x66,
        0x3C, 0x80, 0x04, 0x66, 0x38, 0x08, 0x66, 0x66,
        0x38, 0x63, 0x66, 0x66, 0x38, 0xE7, 0x66, 0x66,
        0x39, 0x04, 0x66, 0x66, 0x3D, 0x20, 0xCC, 0x01,
        0x39, 0x40, 0x00, 0x61, 0x99, 0x49, 0x80, 0x00,
        0x2C, 0x05, 0x00, 0x00, 0x38, 0x80, 0x00, 0x53,
        0x39, 0x60, 0x00, 0x00, 0x90, 0x09, 0x80, 0x00,
        0x38, 0x00, 0x00, 0x54, 0x39, 0x80, 0x00, 0x00,
        0x50, 0x8B, 0xC0, 0x0E, 0x99, 0x49, 0x80, 0x00,
        0x50, 0x0C, 0xC0, 0x0E, 0x90, 0x69, 0x80, 0x00,
        0x99, 0x49, 0x80, 0x00, 0x90, 0xE9, 0x80, 0x00,
        0x99, 0x49, 0x80, 0x00, 0x91, 0x09, 0x80, 0x00,
        0x41, 0x82, 0x00, 0x40
    };

    private static readonly byte[] DeflickerReplacement = { 0x48, 0x00, 0x00, 0x40 };

    private static readonly byte[] DitheringPattern = {
        0x3C, 0x80, 0xCC, 0x01, 0x38, 0xA0, 0x00, 0x61,
        0x38, 0x00, 0x00, 0x00, 0x80, 0xC7, 0x02, 0x20,
        0x50, 0x66, 0x17, 0x7A, 0x98, 0xA4, 0x80, 0x00,
        0x90, 0xC4, 0x80, 0x00, 0x90, 0xC7, 0x02, 0x20,
        0xB0, 0x07, 0x00, 0x02, 0x4E, 0x80, 0x00, 0x20 };

    private static readonly byte[] DitheringReplacement = { 0x48, 0x00, 0x00, 0x28 };

    private static readonly byte[] VFilterPattern = { 0x08, 0x08, 0x0A, 0x0C, 0x0A, 0x08, 0x08 };
    private static readonly byte[] VFilterReplacement = { 0x04, 0x04, 0x10, 0x10, 0x10, 0x04, 0x04 };

    public static void ProcessFile(string inputFilePath, string outputFilePath, bool applyDeflicker, bool applyDithering, bool applyVFilter)
    {
        if (string.IsNullOrEmpty(inputFilePath))
        {
            Logger.Log($"Invalid input file path: {nameof(inputFilePath)}");
            throw new ArgumentException("Invalid input file path", nameof(inputFilePath));
        }

        if (string.IsNullOrEmpty(outputFilePath))
        {
            Logger.Log($"Invalid input file path: {nameof(outputFilePath)}");
            throw new ArgumentException("Invalid output file path", nameof(outputFilePath));
        }

        byte[] fileBuffer = File.ReadAllBytes(inputFilePath);

        if (applyDeflicker)
            ApplyDeflickerPatch(fileBuffer);

        if (applyDithering)
            ApplyDitheringPatch(fileBuffer);

        if (applyVFilter)
            ApplyVFilterPatch(fileBuffer);

        File.WriteAllBytes(outputFilePath, fileBuffer);
    }

    private static void ApplyDeflickerPatch(byte[] buffer)
    {
        int deflickerPatternLength = DeflickerPattern.Length;  // This is 252 bytes
        int replacementLength = DeflickerReplacement.Length;   // This is 4 bytes

        for (int i = 0; i <= buffer.Length - deflickerPatternLength; i++)
            if (IsMatch(buffer, i, DeflickerPattern))
            {
                int replacePosition = i + deflickerPatternLength - replacementLength;

                // Replace the last 4 bytes of the matched pattern
                Array.Copy(DeflickerReplacement, 0, buffer, replacePosition, replacementLength);

                break; // Stop after the first match
            }
    }

    private static void ApplyDitheringPatch(byte[] buffer)
    {
        for (int i = 8; i <= buffer.Length - DitheringPattern.Length; i++)
            if (IsMatch(buffer, i, DitheringPattern))
            {
                // Replace the 4 bytes preceding the pattern
                Array.Copy(DitheringReplacement, 0, buffer, i - 4, DitheringReplacement.Length);

                break;
            }
    }

    private static void ApplyVFilterPatch(byte[] buffer)
    {
        for (int i = 0; i <= buffer.Length - VFilterPattern.Length; i++)
            if (IsMatch(buffer, i, VFilterPattern))
            {
                // Replace the pattern directly
                Array.Copy(VFilterReplacement, 0, buffer, i, VFilterReplacement.Length);
            }
    }

    private static bool IsMatch(byte[] buffer, int position, byte[] pattern)
    {
        for (int i = 0; i < pattern.Length; i++)
            if (buffer[position + i] != pattern[i])
                return false;
        return true;
    }
    // This is dev code to quickly check to see how the applying went.
    public static bool AreFilesDifferent(string filePath1, string filePath2)
    {
        byte[] file1 = File.ReadAllBytes(filePath1);
        byte[] file2 = File.ReadAllBytes(filePath2);

        if (file1.Length != file2.Length)
            return true;

        for (int i = 0; i < file1.Length; i++)
            if (file1[i] != file2[i])
            {
                MessageBox.Show($"Files are different starting at byte position: {i}");
                MessageBox.Show($"Original Byte: {file1[i]:X2}");
                MessageBox.Show($"Modified Byte: {file2[i]:X2}");
                return true;
            }

        return false;
    }
}


================================================
FILE: UWUVCI AIO WPF/Classes/Dol.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UWUVCI_AIO_WPF.Models;
using UWUVCI_AIO_WPF.Helpers;

namespace UWUVCI_AIO_WPF.Classes
{
    public class Dol
    {
        public void ApplyMultipleFilesToDol(IEnumerable<string> filePaths, string dolFilePath)
        {
            try
            {
                Logger.Log($"Starting to process {filePaths.Count()} files for DOL patching.");

                var allCodes = new List<GctCode>();

                // Load codes from all provided files
                foreach (var filePath in filePaths)
                {
                    Logger.Log($"Processing file: {filePath}");
                    var codes = GctCode.LoadFromFile(filePath);
                    Logger.Log($"Parsed {codes.Count} codes from {filePath}.");
                    allCodes.AddRange(codes);
                }

                // Validate combined codes
                if (!ValidateCodes(allCodes, dolFilePath))
                {
                    Logger.Log("Validation failed for the provided codes. Aborting patching.");
                    return;
                }

                Logger.Log($"Combined total of {allCodes.Count} codes from all files.");

                // Patch the DOL file
                PatchDolFile(dolFilePath, allCodes);

                // Inject the codehandler
                InjectCodehandler(dolFilePath, "path/to/codehandler.bin"); // Adjust the path if needed

                Logger.Log("All files applied and patched successfully.");
            }
            catch (Exception ex)
            {
                Logger.Log($"Error applying files to DOL: {ex.Message}");
            }
        }

        public void PatchDolFile(string dolFilePath, List<GctCode> gctCodes)
        {
            try
            {
                Logger.Log($"Patching DOL file {dolFilePath} with GCT codes.");

                if (!File.Exists(dolFilePath))
                {
                    Logger.Log($"DOL file '{dolFilePath}' not found.");
                    throw new FileNotFoundException($"DOL file '{dolFilePath}' not found.");
                }

                var sections = DolSection.ReadDolHeader(dolFilePath);
                byte[] dolData = File.ReadAllBytes(dolFilePath);

                foreach (var code in gctCodes)
                {
                    int offset = MemoryToDolOffset(code.Address, sections);

                    if (offset >= 0 && offset < dolData.Length - 4) // Ensure offset is within bounds
                    {
                        byte[] valueBytes = BitConverter.GetBytes(code.Value);
                        if (BitConverter.IsLittleEndian)
                            Array.Reverse(valueBytes); // Convert to big-endian

                        Array.Copy(valueBytes, 0, dolData, offset, 4);
                    }
                    else
                    {
                        Logger.Log($"Address {code.Address:X8} is out of bounds for the DOL file.");
                    }
                }

                string outputPath = Path.Combine(Path.GetDirectoryName(dolFilePath), "patched_dol.dol");
                File.WriteAllBytes(outputPath, dolData);

                Logger.Log($"Patched DOL saved to: {outputPath}");
            }
            catch (Exception ex)
            {
                Logger.Log($"Error patching DOL file: {ex.Message}");
                throw;
            }
        }

        private bool ValidateCodes(List<GctCode> codes, string dolFilePath)
        {
            Logger.Log("Validating codes before patching...");

            var sections = DolSection.ReadDolHeader(dolFilePath);

            foreach (var code in codes)
            {
                bool valid = sections.Any(section =>
                    code.Address >= section.MemoryAddress &&
                    code.Address < section.MemoryAddress + section.Size);

                if (!valid)
                {
                    Logger.Log($"Invalid code: Address {code.Address:X8} is not within any DOL section.");
                    return false;
                }
            }

            Logger.Log("All codes are valid.");
            return true;
        }

        public int MemoryToDolOffset(uint memoryAddress, List<DolSection> sections)
        {
            if (sections == null || sections.Count == 0)
            {
                Logger.Log("Sections list is null or empty.");
                throw new ArgumentException("Sections list cannot be null or empty.");
            }

            foreach (var section in sections)
            {
                if (memoryAddress >= section.MemoryAddress && memoryAddress < section.MemoryAddress + section.Size)
                {
                    return (int)(section.FileOffset + (memoryAddress - section.MemoryAddress));
                }
            }

            Logger.Log($"Memory address {memoryAddress:X} not found in any section.");
            return -1; // Address not found
        }

        public void InjectCodehandler(string dolFilePath, string codehandlerPath)
        {
            try
            {
                Logger.Log($"Starting codehandler injection for {dolFilePath}.");

                if (!File.Exists(dolFilePath) || !File.Exists(codehandlerPath))
                {
                    Logger.Log("DOL file or codehandler file not found.");
                    throw new FileNotFoundException("DOL file or codehandler file not found.");
                }

                byte[] dolData = File.ReadAllBytes(dolFilePath);
                byte[] codehandlerData = File.ReadAllBytes(codehandlerPath);

                int injectionOffset = FindFreeSpace(dolData, codehandlerData.Length);

                if (injectionOffset < 0)
                {
                    Logger.Log("No free space available for codehandler injection.");
                    throw new Exception("No free space available for codehandler injection.");
                }

                Array.Copy(codehandlerData, 0, dolData, injectionOffset, codehandlerData.Length);

                // Update entry point in DOL
                PatchDolEntryPoint(dolData, injectionOffset);

                string outputPath = Path.Combine(Path.GetDirectoryName(dolFilePath), "patched_dol.dol");
                File.WriteAllBytes(outputPath, dolData);

                Logger.Log($"Codehandler injected successfully. Patched DOL saved to: {outputPath}");
            }
            catch (Exception ex)
            {
                Logger.Log($"Error during codehandler injection: {ex.Message}");
                throw;
            }
        }

        private void PatchDolEntryPoint(byte[] dolData, int injectionOffset)
        {
            uint newEntryPoint = (uint)(0x80000000 + injectionOffset); // Convert offset to memory address
            Array.Copy(BitConverter.GetBytes(newEntryPoint), 0, dolData, 0xE0, 4); // Replace entry point
            Logger.Log($"Updated DOL entry point to: {newEntryPoint:X}");
        }

        private int FindFreeSpace(byte[] fileData, int requiredSize)
        {
            Logger.Log($"Searching for {requiredSize} bytes of free space in the file.");

            for (int i = 0; i < fileData.Length - requiredSize; i++)
            {
                bool isFree = true;
                for (int j = 0; j < requiredSize; j++)
                {
                    if (fileData[i + j] != 0x00)
                    {
                        isFree = false;
                        break;
                    }
                }
                if (isFree)
                {
                    Logger.Log($"Found free space at offset {i}.");
                    return i;
                }
            }

            Logger.Log("No free space found in the file.");
            return -1; // No free space found
        }
    }
}


================================================
FILE: UWUVCI AIO WPF/Classes/GameConfig.cs
================================================
using GameBaseClassLibrary;
using System;
using UWUVCI_AIO_WPF.Models;

namespace UWUVCI_AIO_WPF
{
    [Serializable]
    public class GameConfig
    {
        public GameConfig Clone()
        {
            return MemberwiseClone() as GameConfig;
        }
        public GameConsoles Console { get; set; }
        public GameBases BaseRom { get; set; }

        private string cBasePath;

        public string CBasePath
        {
            get { return cBasePath; }
            set { cBasePath = value;

            }
        }

        public byte[] bootsound;
        public string extension = "";
        public bool fourbythree = false;
        public bool disgamepad = false;
        public bool donttrim = false;
        public bool lr = false;
        public bool motepass = false;
        public bool jppatch = false;
        public bool pokepatch = false;

        public bool tgcd = false;

        public int Index;

        public bool pixelperfect = false;
        public string GameName { get; set; }

        public bool vm = false;
        public bool vmtopal = false;


        public bool rf = false;
        public bool rfus = false;
        public bool rfjp = false;



        public PNGTGA TGAIco { get; set; } = new PNGTGA();



        public PNGTGA TGADrc { get; set; } = new PNGTGA();
        public PNGTGA TGATv { get; set; } = new PNGTGA();
        public PNGTGA TGALog { get; set; } = new PNGTGA();
        public N64Conf N64Stuff { get; set; } = new N64Conf();
        public N64Conf GBAStuff { get; set; } = new N64Conf();

    }
}


================================================
FILE: UWUVCI AIO WPF/Classes/GameCubeISO.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;

namespace UWUVCI_AIO_WPF.Classes
{
    public class GameCubeISO
    {
        private TOCManager TOCManager { get; set; } = new TOCManager();
        public string IsoPath { get; private set; }
        public string ExtractedPath { get; private set; }

        public GameCubeISO(string isoPath)
        {
            if (string.IsNullOrWhiteSpace(isoPath) || !File.Exists(isoPath))
                throw new FileNotFoundException("ISO file not found.");
            IsoPath = isoPath;
        }

        /// <summary>
        /// Extracts the ISO into a directory.
        /// </summary>
        public void Extract(string outputPath)
        {
            if (string.IsNullOrWhiteSpace(outputPath))
                throw new ArgumentException("Output path cannot be empty.");

            ExtractedPath = outputPath;
            Directory.CreateDirectory(ExtractedPath);

            // Path to the TOC file
            string tocPath = Path.Combine(ExtractedPath, "&&systemdata", "Game.toc");
            if (!File.Exists(tocPath))
                throw new FileNotFoundException("Game.toc not found in the extracted directory.");

            Console.WriteLine("Parsing TOC...");
            ParseTOCFromFile(tocPath);

            if (TOCManager.TOCEntries.Count == 0)
                throw new InvalidOperationException("No valid entries found in the TOC.");

            Console.WriteLine($"Found {TOCManager.TOCEntries.Count} entries in the TOC.");

            using var fs = new FileStream(IsoPath, FileMode.Open, FileAccess.Read);
            using var reader = new BinaryReader(fs);

            Console.WriteLine("Extracting files...");
            TOCManager.ExtractFiles(reader, ExtractedPath);

            Console.WriteLine($"Extraction complete: {ExtractedPath}");
        }

        /// <summary>
        /// Rebuilds the ISO from the extracted directory.
        /// </summary>
        public void Rebuild(string extractedPath, string outputIsoPath)
        {
            if (!Directory.Exists(extractedPath))
                throw new DirectoryNotFoundException($"Extracted directory not found: {extractedPath}");

            // Paths for essential system files
            string systemDataPath = Path.Combine(extractedPath, "&&systemdata");
            if (!Directory.Exists(systemDataPath))
                throw new DirectoryNotFoundException($"System data directory not found: {systemDataPath}");

            string hdrFilePath = Path.Combine(systemDataPath, "ISO.hdr");
            string dolFilePath = Path.Combine(systemDataPath, "Start.dol");
            string apploaderFilePath = Path.Combine(systemDataPath, "AppLoader.ldr");
            string tocFilePath = Path.Combine(systemDataPath, "Game.toc");

            if (!File.Exists(hdrFilePath) || !File.Exists(dolFilePath) || !File.Exists(apploaderFilePath) || !File.Exists(tocFilePath))
                throw new FileNotFoundException("One or more essential system files are missing.");

            Console.WriteLine("Rebuilding ISO...");

            using var writer = new BinaryWriter(File.Create(outputIsoPath));

            // Write the ISO header
            Console.WriteLine("Writing ISO header...");
            WriteSystemFile(writer, hdrFilePath);

            // Write the DOL file
            Console.WriteLine("Writing Start.dol...");
            WriteSystemFile(writer, dolFilePath);

            // Write the Apploader
            Console.WriteLine("Writing AppLoader.ldr...");
            WriteSystemFile(writer, apploaderFilePath);

            // Parse the TOC
            Console.WriteLine("Parsing TOC...");
            List<TOCItem> tocEntries = ParseTOCFromFile(tocFilePath);

            // Write game files
            Console.WriteLine("Writing game files...");
            foreach (var entry in tocEntries)
            {
                // Directories are skipped
                if (entry.IsDirectory) continue;

                string filePath = Path.Combine(extractedPath, entry.Name.Replace('/', Path.DirectorySeparatorChar));
                if (!File.Exists(filePath))
                    throw new FileNotFoundException($"File not found: {filePath}");

                WriteGameFile(writer, filePath, entry.Position);
            }

            Console.WriteLine($"Rebuild complete. ISO saved to: {outputIsoPath}");
        }

        /// <summary>
        /// Parses the TOC file to determine the list of files and directories in the ISO.
        /// </summary>
        private List<TOCItem> ParseTOCFromFile(string tocPath)
        {
            var tocEntries = new List<TOCItem>();

            using var reader = new BinaryReader(File.OpenRead(tocPath));
            while (reader.BaseStream.Position < reader.BaseStream.Length)
            {
                uint fileOffset = reader.ReadUInt32(); // File position in ISO
                uint fileSize = reader.ReadUInt32();   // File size
                byte flags = reader.ReadByte();        // Flags (e.g., directory or file)
                reader.BaseStream.Seek(3, SeekOrigin.Current); // Skip padding
                uint nameOffset = reader.ReadUInt32(); // Offset to the name in the string table

                // Resolve file name
                long currentPos = reader.BaseStream.Position;
                reader.BaseStream.Seek(nameOffset, SeekOrigin.Begin);
                string name = ReadNullTerminatedString(reader);
                reader.BaseStream.Seek(currentPos, SeekOrigin.Begin);

                tocEntries.Add(new TOCItem
                {
                    Position = (int)fileOffset,
                    Length = (int)fileSize,
                    IsDirectory = (flags & 0x02) != 0,
                    Name = name
                });
            }

            return tocEntries;
        }

        /// <summary>
        /// Writes system files (e.g., ISO.hdr, Start.dol) to the ISO.
        /// </summary>
        private void WriteSystemFile(BinaryWriter writer, string filePath)
        {
            byte[] data = File.ReadAllBytes(filePath);
            writer.Write(data);

            // Align to 0x8000-byte boundaries
            long padding = AlignToBlock(data.Length, 0x8000) - data.Length;
            writer.Write(new byte[padding]);
        }

        /// <summary>
        /// Writes game files based on their TOC entries.
        /// </summary>
        private void WriteGameFile(BinaryWriter writer, string filePath, long position)
        {
            byte[] data = File.ReadAllBytes(filePath);

            // Seek to the correct position in the ISO
            writer.Seek((int)position, SeekOrigin.Begin);
            writer.Write(data);

            // Add padding to align to the next block if needed
            long padding = AlignToBlock(data.Length, 0x8000) - data.Length;
            writer.Write(new byte[padding]);
        }

        /// <summary>
        /// Aligns a value to the next 0x8000-byte boundary.
        /// </summary>
        private long AlignToBlock(long value, int blockSize)
        {
            return (value + blockSize - 1) / blockSize * blockSize;
        }

        /// <summary>
        /// Reads a null-terminated string from the binary stream.
        /// </summary>
        private string ReadNullTerminatedString(BinaryReader reader)
        {
            var bytes = new List<byte>();
            byte b;
            while ((b = reader.ReadByte()) != 0)
                bytes.Add(b);
            return System.Text.Encoding.ASCII.GetString(bytes.ToArray());
        }
    }

    public class TOCManager
    {
        public List<TOCItem> TOCEntries { get; private set; } = new List<TOCItem>();

        public void ExtractFiles(BinaryReader reader, string outputDirectory)
        {
            foreach (var entry in TOCEntries)
            {
                var outputPath = Path.Combine(outputDirectory, entry.Name);

                // Create directories for output
                if (entry.IsDirectory)
                {
                    Directory.CreateDirectory(outputPath);
                    continue;
                }

                // Ensure the parent directory exists
                Directory.CreateDirectory(Path.GetDirectoryName(outputPath) ?? string.Empty);

                // Seek to the file's position in the ISO
                reader.BaseStream.Seek(entry.Position, SeekOrigin.Begin);

                // Extract file in chunks
                using var outputFile = new FileStream(outputPath, FileMode.Create, FileAccess.Write);
                long remaining = entry.Length;
                const int bufferSize = 0x8000; // 32KB chunks
                byte[] buffer = new byte[bufferSize];

                while (remaining > 0)
                {
                    int bytesToRead = (int)Math.Min(bufferSize, remaining);
                    int bytesRead = reader.Read(buffer, 0, bytesToRead);
                    outputFile.Write(buffer, 0, bytesRead);
                    remaining -= bytesRead;
                }
            }
        }
    }

    public class TOCItem
    {
        public int Position { get; set; }
        public int Length { get; set; }
        public bool IsDirectory { get; set; }
        public string Name { get; set; }
    }
}


================================================
FILE: UWUVCI AIO WPF/Classes/Injection.cs
================================================
using GameBaseClassLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
using System.Xml;
using UWUVCI_AIO_WPF.Classes;
using UWUVCI_AIO_WPF.UI.Windows;
using Newtonsoft.Json;
using MessageBox = System.Windows.MessageBox;
using UWUVCI_AIO_WPF.Models;
using WiiUDownloaderLibrary.Models;
using WiiUDownloaderLibrary;
using Newtonsoft.Json.Linq;
using UWUVCI_AIO_WPF.Helpers;
using System.Diagnostics.Eventing.Reader;

namespace UWUVCI_AIO_WPF
{
    public static class StringExtensions
    {
        public static string ToHex(this string input)
        {
            StringBuilder sb = new StringBuilder();
            foreach (char c in input)
                sb.AppendFormat("{0:X2}", (int)c);
            return sb.ToString().Trim();
        }
    }
    internal static class Injection
    {
        [DllImport("User32.dll")]
        static extern int SetForegroundWindow(IntPtr point);
        [DllImport("user32.dll")]
        public static extern int SendMessage(
            int hWnd,     // handle to destination window
            uint Msg,      // message
            long wParam,   // first message parameter
            long lParam    // second message parameter
        );
        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", SetLastError = true)]
        static extern bool PostMessage(IntPtr hWnd, int Msg, System.Windows.Forms.Keys wParam, int lParam);
        private static int WM_KEYUP = 0x101;
        private static readonly string tempPath = Path.Combine(Directory.GetCurrentDirectory(), "bin", "temp");
        private static readonly string baseRomPath = Path.Combine(tempPath, "baserom");
        private static readonly string imgPath = Path.Combine(tempPath, "img");
        private static readonly string toolsPath = Path.Combine(Directory.GetCurrentDirectory(), "bin", "Tools");
        static string code = null;
        static MainViewModel mvvm;
        private static bool IsNativeWindows = !MacLinuxHelper.IsRunningUnderWineOrSimilar();

        /*
         * GameConsole: Can either be NDS, N64, GBA, NES, SNES or TG16
         * baseRom = Name of the BaseRom, which is the folder name too (example: Super Metroid EU will be saved at the BaseRom path under the folder SMetroidEU, so the BaseRom is in this case SMetroidEU).
         * customBasePath = Path to the custom Base. Is null if no custom base is used.
         * injectRomPath = Path to the Rom to be injected into the Base Game.
         * bootImages = String array containing the paths for
         *              bootTvTex: PNG or TGA (PNG gets converted to TGA using UPNG). Needs to be in the dimensions 1280x720 and have a bit depth of 24. If null, the original BootImage will be used.
         *              bootDrcTex: PNG or TGA (PNG gets converted to TGA using UPNG). Needs to be in the dimensions 854x480 and have a bit depth of 24. If null, the original BootImage will be used.
         *              iconTex: PNG or TGA (PNG gets converted to TGA using UPNG). Needs to be in the dimensions 128x128 and have a bit depth of 32. If null, the original BootImage will be used.
         *              bootLogoTex: PNG or TGA (PNG gets converted to TGA using UPNG). Needs to be in the dimensions 170x42 and have a bit depth of 32. If null, the original BootImage will be used.
         * gameName = The name of the final game to be entered into the .xml files.
         * iniPath = Only used for N64. Path to the INI configuration. If "blank", a blank ini will be used.
         * darkRemoval = Only used for N64. Indicates whether the dark filter should be removed.
         */
        static List<int> fiind(this byte[] buffer, byte[] pattern, int startIndex)
        {
            List<int> positions = new List<int>();
            int i = Array.IndexOf(buffer, pattern[0], startIndex);
            while (i >= 0 && i <= buffer.Length - pattern.Length)
            {
                byte[] segment = new byte[pattern.Length];
                Buffer.BlockCopy(buffer, i, segment, 0, pattern.Length);
                if (segment.SequenceEqual(pattern))
                    positions.Add(i);
                i = Array.IndexOf(buffer, pattern[0], i + 1);
            }
            return positions;
        }
        static void PokePatch(string rom)
        {
            byte[] search = { 0xD0, 0x88, 0x8D, 0x83, 0x42 };
            byte[] test;
            test = new byte[new FileInfo(rom).Length];
            using (var fs = new FileStream(rom,
                                 FileMode.Open,
                                 FileAccess.ReadWrite))
            {
                try
                {
                    fs.Read(test, 0, test.Length - 1);

                    var l = fiind(test, search, 0);
                    byte[] check = new byte[4];
                    fs.Seek(l[0] + 5, SeekOrigin.Begin);
                    fs.Read(check, 0, 4);

                    fs.Seek(0, SeekOrigin.Begin);
                    if (check[3] != 0x24)
                    {
                        fs.Seek(l[0] + 5, SeekOrigin.Begin);
                        fs.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4);

                    }
                    else
                    {
                        fs.Seek(l[0] + 5, SeekOrigin.Begin);
                        fs.Write(new byte[] { 0x00, 0x00, 0x00 }, 0, 3);

                    }
                    check = new byte[4];
                    fs.Seek(l[1] + 5, SeekOrigin.Begin);
                    fs.Read(check, 0, 4);
                    fs.Seek(0, SeekOrigin.Begin);
                    if (check[3] != 0x24)
                    {
                        fs.Seek(l[1] + 5, SeekOrigin.Begin);
                        fs.Write(new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0, 4);

                    }
                    else
                    {
                        fs.Seek(l[1] + 5, SeekOrigin.Begin);
                        fs.Write(new byte[] { 0x00, 0x00, 0x00 }, 0, 3);

                    }
                }
                catch (Exception)
                {

                }


                fs.Close();
            }
        }
        private static string FormatBytes(long bytes)
        {
            string[] Suffix = { "B", "KB", "MB", "GB", "TB" };
            int i;
            double dblSByte = bytes;
            for (i = 0; i < Suffix.Length && bytes >= 1024; i++, bytes /= 1024)
            {
                dblSByte = bytes / 1024.0;
            }

            return string.Format("{0:0.##} {1}", dblSByte, Suffix[i]);
        }
        [STAThread]
        public static bool Inject(GameConfig Configuration, string RomPath, MainViewModel mvm, bool force)
        {

            mvm.failed = false;

            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += tick;

            Clean();

            long freeSpaceInBytes = 0;
            if (!mvm.saveworkaround)
            {
                try
                {
                    long gamesize = new FileInfo(RomPath).Length;

                    var drive = new DriveInfo(tempPath);

                    done = true;
                    freeSpaceInBytes = drive.AvailableFreeSpace;
                }
                catch (Exception)
                {
                    mvm.saveworkaround = true;
                }

            }
            mvvm = mvm;

            Directory.CreateDirectory(tempPath);

            mvm.msg = "Checking Tools...";
            mvm.InjcttoolCheck();

            mvm.Progress = 5;

            mvm.msg = "Copying Base...";
            try
            {
                if (!mvm.saveworkaround && (Configuration.Console == GameConsoles.WII || Configuration.Console == GameConsoles.GCN))
                {
                    long neededspace = mvm.GC ? 10000000000 : 15000000000;

                    if (freeSpaceInBytes < neededspace)
                        throw new Exception("12G");
                }

                if (Configuration.BaseRom == null || Configuration.BaseRom.Name == null)
                {
                    throw new Exception("BASE");
                }
                if (Configuration.BaseRom.Name != "Custom")
                {
                    //Normal Base functionality here
                    CopyBase($"{Configuration.BaseRom.Name.Replace(":", "")} [{Configuration.BaseRom.Region}]", null);
                }
                else
                {
                    //Custom Base Functionality here
                    CopyBase($"Custom", Configuration.CBasePath);
                }
                if (!Directory.Exists(Path.Combine(baseRomPath, "code")) || !Directory.Exists(Path.Combine(baseRomPath, "content")) || !Directory.Exists(Path.Combine(baseRomPath, "meta")))
                {
                    throw new Exception("MISSINGF");
                }
                mvm.Progress = 10;
                mvm.msg = "Injecting ROM...";

                RunSpecificInjection(Configuration, (mvm.GC ? GameConsoles.GCN : Configuration.Console), RomPath, force, mvm);

                mvm.msg = "Editing XML...";
                EditXML(Configuration.GameName, mvm.Index, code);
                mvm.Progress = 90;
                mvm.msg = "Changing Images...";
                Images(Configuration);
                if (File.Exists(mvm.BootSound))
                {
                    mvm.Progress = 95;
                    mvm.msg = "Adding BootSound...";
                    bootsound(mvm.BootSound);
                }


                mvm.Progress = 100;


                code = null;
                return true;
            } catch (Exception e)
            {
                mvm.Progress = 100;

                code = null;
                if (e.Message == "Failed this shit")
                {
                    Clean();
                    return false;
                }

                var errorMessage = "Injection Failed due to unknown circumstances. Accent marks in the install path for UWUVCI or in the rom path is known to cause issues. Please contact us on the UWUVCI discord if you need any assistance.";

                if (e.Message == "MISSINGF")
                    errorMessage = "Injection Failed because there are base files missing. \nPlease redownload the base, or redump if you used a custom base!";
                else if (e.Message.Contains("Images"))
                    errorMessage = "Injection Failed due to wrong BitDepth, please check if your Files are in a different bitdepth than 32bit or 24bit\n\nIf the image/s that's being used is automatically grabbed for you, then don't use them." +
                        "\nFAQ: #28";
                else if (e.Message.Contains("Size"))
                    errorMessage = "Injection Failed due to Image Issues.Please check if your Images are made using following Information:\n\niconTex: \nDimensions: 128x128\nBitDepth: 32\n\nbootDrcTex: \nDimensions: 854x480\nBitDepth: 24\n\nbootTvTex: \nDimensions: 1280x720\nBitDepth: 24\n\nbootLogoTex: \nDimensions: 170x42\nBitDepth: 32";
                else if (e.Message.Contains("retro"))
                    errorMessage = "The ROM you want to Inject is to big for selected Base!\nPlease try again with different Base";
                else if (e.Message.Contains("BASE"))
                    errorMessage = "If you import a config you NEED to reselect a base";
                else if (e.Message.Contains("WII"))
                    errorMessage = $"{e.Message.Replace("Wii", "")}\nPlease make sure that your ROM isn't flawed and that you have atleast 12 GB of free Storage left.";
                else if (e.Message.Contains("12G"))
                    errorMessage = $"Please make sure to have atleast {FormatBytes(15000000000)} of storage left on the drive where you stored the Injector.";
                else if (e.Message.Contains("nkit"))
                    errorMessage = $"There is an issue with your NKIT.\nPlease try the original ISO, or redump your game and try again with that dump.";
                else if (e.Message.Contains("meta.xml"))
                    errorMessage = "Looks to be your meta.xml file isn't missing from your directory. If you downloaded your base, redownload it, if it's a custom base then the folder selected might be wrong or the layout is messed up.";
                else if (e.Message.Contains("pre.iso"))
                    errorMessage = "Looks to be that there is something about your game that UWUVCI doesn't like, you are most likely injecting with a wbfs or nkit.iso file, this file has data trimmed." +
                        "\nFAQ: #17, #27, #29";
                else if (e.Message.Contains("temp\\temp") || e.Message.Contains("temp/temp"))
                    errorMessage = "The images are most likely the culprit, try changing them around." +
                        "\nFAQ: #28";

                if (MacLinuxHelper.IsRunningInVirtualMachine() || MacLinuxHelper.IsRunningUnderWineOrSimilar())
                    errorMessage += "\n\nYou look to be running this under some form of emulation instead of a native Windows OS. There are external tools that UWUVCI uses which are not managed by the UWUVCI team. These external tools may be causing you issues and we will not be able to resolve your issues.";

                MessageBox.Show(errorMessage + "\n\nDon't forget that there's an FAQ in the ReadMe.txt file and on the UWUVCI Discord\n\nError Message:\n" + e.Message, "Injection Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                Logger.Log(e.Message);
                Clean();
                return false;
            }
            finally
            {

                mvm.Index = -1;
                mvm.LR = false;
                mvm.msg = "";

            }

        }

        private static bool done = false;
        private static void tick(object sender, EventArgs e)
        {
            if (!done)
                mvvm.failed = true;

            throw new Exception("Failed this shit");
        }

        public static void SendKey(IntPtr hWnd, System.Windows.Forms.Keys key)
        {
            PostMessage(hWnd, WM_KEYUP, key, 0);
        }
        static void bootsound(string sound)
        {
            string btsndPath = Path.Combine(baseRomPath, "meta", "bootSound.btsnd");
            FileInfo soundFile = new FileInfo(sound);
            if (soundFile.Extension.Contains("mp3") || soundFile.Extension.Contains("wav"))
            {
                // Convert input file to 6 second .wav
                using (Process sox = new Process())
                {
                    sox.StartInfo.UseShellExecute = false;
                    sox.StartInfo.CreateNoWindow = true;
                    sox.StartInfo.FileName = Path.Combine(toolsPath, "sox.exe");
                    sox.StartInfo.Arguments = $"\"{sound}\" -b 16 \"{Path.Combine(tempPath, "bootSound.wav")}\" channels 2 rate 48k trim 0 6";
                    sox.Start();
                    sox.WaitForExit();
                }
                //convert to btsnd
                wav2btsnd(Path.Combine(tempPath, "bootSound.wav"), btsndPath);
                File.Delete(Path.Combine(tempPath, "bootSound.wav"));
            }
            else
            {
                //Copy BootSound to location
                File.Delete(btsndPath);
                File.Copy(sound, btsndPath);
            }
        }

        private static void wav2btsnd(string inputWav, string outputBtsnd)
        {
            // credits to the original creator of wav2btsnd for the general logic
            byte[] buffer = File.ReadAllBytes(inputWav);
            using FileStream output = new FileStream(outputBtsnd, FileMode.OpenOrCreate);
            using BinaryWriter writer = new BinaryWriter(output);

            writer.Write(new byte[] { 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0 });
            for (int i = 0x2C; i < buffer.Length; i += 2)
                writer.Write(new[] { buffer[i + 1], buffer[i] });
        }

        static void timer_Tick(object sender, EventArgs e)
        {
            if (mvvm.Progress < 50)
                mvvm.Progress += 1;

        }
        private static void RunSpecificInjection(GameConfig cfg, GameConsoles console, string RomPath, bool force, MainViewModel mvm)
        {
            switch (console)
            {
                case GameConsoles.NDS:
                    NDS(RomPath);
                    break;

                case GameConsoles.N64:
                    N64(RomPath, cfg.N64Stuff);
                    break;

                case GameConsoles.GBA:
                    GBA(RomPath, cfg.GBAStuff);
                    break;

                case GameConsoles.NES:
                    NESSNES(RomPath);
                    break;
                case GameConsoles.SNES:
                    NESSNES(RemoveHeader(RomPath));
                    break;
                case GameConsoles.TG16:
                    TG16(RomPath);
                    break;
                case GameConsoles.MSX:
                    MSX(RomPath);
                    break;
                case GameConsoles.WII:
                    if (RomPath.ToLower().EndsWith(".dol"))
                        WiiHomebrew(RomPath, mvm);
                    else if (RomPath.ToLower().EndsWith(".wad"))
                        WiiForwarder(RomPath, mvm);
                    else
                        WII(RomPath, mvm);
                    break;
                case GameConsoles.GCN:
                    GC(RomPath, mvm, force);
                    break;
            }
        }
        private static string ByteArrayToString(byte[] arr)
        {
            ASCIIEncoding enc = new ASCIIEncoding();
            return enc.GetString(arr);
        }
        private static void WiiForwarder(string romPath, MainViewModel mvm)
        {
            string savedir = Directory.GetCurrentDirectory();
            mvvm.msg = "Extracting Forwarder Base...";
            if (Directory.Exists(Path.Combine(tempPath, "TempBase")))
                Directory.Delete(Path.Combine(tempPath, "TempBase"), true);

            Directory.CreateDirectory(Path.Combine(tempPath, "TempBase"));

            var zipLocation = Path.Combine(toolsPath, "BASE.zip");
            ZipFile.ExtractToDirectory(zipLocation, Path.Combine(tempPath));

            DirectoryCopy(Path.Combine(tempPath, "BASE"), Path.Combine(tempPath, "TempBase"), true);
            mvvm.Progress = 20;
            mvvm.msg = "Setting up Forwarder...";
            byte[] test = new byte[4];
            using (FileStream fs = new FileStream(romPath, FileMode.Open))
            {
                fs.Seek(0xC20, SeekOrigin.Begin);
                fs.Read(test, 0, 4);
                fs.Close();
            }

            string[] id = { ByteArrayToString(test) };
            File.WriteAllLines(Path.Combine(tempPath, "TempBase", "files", "title.txt"), id);
            mvm.Progress = 30;
            mvm.msg = "Copying Forwarder...";
            File.Copy(Path.Combine(toolsPath, "forwarder.dol"), Path.Combine(tempPath, "TempBase", "sys", "main.dol"));
            mvm.Progress = 40;
            mvvm.msg = "Creating Injectable file...";
            SharedWitAndNFS2ISO2NFS(savedir, mvm, "WiiForwarder");
        }

        private static void SharedWitAndNFS2ISO2NFS(string savedir, MainViewModel mvm, string functionName)
        {
            if (IsNativeWindows)
            {
                using (Process wit = new Process())
                {
                    if (!mvm.debug)
                        wit.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                    wit.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                    wit.StartInfo.Arguments = $"copy \"{Path.Combine(tempPath, "TempBase")}\" --DEST \"{Path.Combine(tempPath, "game.iso")}\" -ovv --links --iso";
                    wit.Start();
                    wit.WaitForExit();
                }

                //Thread.Sleep(6000);
                if (!File.Exists(Path.Combine(tempPath, "game.iso")))
                {
                    Console.Clear();

                    throw new Exception("Wii: An error occured while Creating the ISO");
                }

                mvvm.Progress = 50;

                mvm.msg = "Replacing TIK and TMD...";
                using Process extract = new Process();
                if (!mvm.debug)
                    extract.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                extract.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                extract.StartInfo.Arguments = $"extract \"{Path.Combine(tempPath, "game.iso")}\" --psel data --files +tmd.bin --files +ticket.bin --DEST \"{Path.Combine(tempPath, "TIKTMD")}\" -vv1";
                extract.Start();
                extract.WaitForExit();
            }
            else
            {
                string[] args = {
                    $"copy \"{Path.Combine(tempPath, "TempBase")}\" --DEST \"{Path.Combine(tempPath, "game.iso")}\" -ovv --links --iso",
                    $"extract \"{Path.Combine(tempPath, "game.iso")}\" --psel data --files +tmd.bin --files +ticket.bin --DEST \"{Path.Combine(tempPath, "TIKTMD")}\" -vv1"
                };

                foreach (var arg in args)
                    MacLinuxHelper.WriteFailedStepToJson(functionName, "wit", arg, string.Empty);

                MacLinuxHelper.DisplayMessageBoxAboutTheHelper();

            }

            if (functionName == "GCN")
            {
                //GET ROMCODE and change it
                mvm.msg = "Trying to save rom code...";
                //READ FIRST 4 BYTES
                byte[] chars = new byte[4];
                FileStream fstrm = new FileStream(Path.Combine(tempPath, "game.iso"), FileMode.Open);
                fstrm.Read(chars, 0, 4);
                fstrm.Close();
                string procod = ByteArrayToString(chars);
                string metaXml = Path.Combine(baseRomPath, "meta", "meta.xml");
                XmlDocument doc = new XmlDocument();
                doc.Load(metaXml);
                doc.SelectSingleNode("menu/reserved_flag2").InnerText = procod.ToHex();
                doc.Save(metaXml);
                mvvm.Progress = 55;
            }

            Directory.Delete(Path.Combine(tempPath, "TempBase"), true);

            foreach (string sFile in Directory.GetFiles(Path.Combine(baseRomPath, "code"), "rvlt.*"))
                File.Delete(sFile);

            File.Copy(Path.Combine(tempPath, "TIKTMD", "tmd.bin"), Path.Combine(baseRomPath, "code", "rvlt.tmd"));
            File.Copy(Path.Combine(tempPath, "TIKTMD", "ticket.bin"), Path.Combine(baseRomPath, "code", "rvlt.tik"));
            Directory.Delete(Path.Combine(tempPath, "TIKTMD"), true);

            mvm.Progress = 60;
            mvm.msg = "Injecting ROM...";
            foreach (string sFile in Directory.GetFiles(Path.Combine(baseRomPath, "content"), "*.nfs"))
                File.Delete(sFile);

            File.Move(Path.Combine(tempPath, "game.iso"), Path.Combine(baseRomPath, "content", "game.iso"));
            File.Copy(Path.Combine(toolsPath, "nfs2iso2nfs.exe"), Path.Combine(baseRomPath, "content", "nfs2iso2nfs.exe"));
            Directory.SetCurrentDirectory(Path.Combine(baseRomPath, "content"));
            using (Process iso2nfs = new Process())
            {
                if (!mvm.debug)
                    iso2nfs.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                iso2nfs.StartInfo.FileName = "nfs2iso2nfs.exe";

                if (functionName != "GCN")
                {
                    string pass = "-passthrough ";
                    string extra = "";
                    if (mvm.passtrough != true)
                        pass = "";
                    if (mvm.Index == 2)
                        extra = "-horizontal ";
                    if (mvm.Index == 3) 
                        extra = "-wiimote ";
                    if (mvm.Index == 4)
                        extra = "-instantcc ";
                    if (mvm.Index == 5)
                        extra = "-nocc ";
                    if (mvm.LR)
                        extra += "-lrpatch ";

                    iso2nfs.StartInfo.Arguments = $"-enc -homebrew {extra}{pass}-iso game.iso";
                }
                else
                    iso2nfs.StartInfo.Arguments = $"-enc -homebrew -passthrough -iso game.iso";

                iso2nfs.Start();
                iso2nfs.WaitForExit();
                File.Delete("nfs2iso2nfs.exe");
                File.Delete("game.iso");
            }
            Directory.SetCurrentDirectory(savedir);
            mvm.Progress = 80;
        }

        private static void WiiHomebrew(string romPath, MainViewModel mvm)
        {
            string savedir = Directory.GetCurrentDirectory();
            mvvm.msg = "Extracting Homebrew Base...";

            if (Directory.Exists(Path.Combine(tempPath, "TempBase")))
                Directory.Delete(Path.Combine(tempPath, "TempBase"), true);

            Directory.CreateDirectory(Path.Combine(tempPath, "TempBase"));

            ZipFile.ExtractToDirectory(Path.Combine(toolsPath, "BASE.zip"), Path.Combine(tempPath));

            DirectoryCopy(Path.Combine(tempPath, "BASE"), Path.Combine(tempPath, "TempBase"), true);
            mvvm.Progress = 20;
            mvvm.msg = "Injecting DOL...";

            File.Copy(romPath, Path.Combine(tempPath, "TempBase", "sys", "main.dol"));
            mvm.Progress = 30;
            mvvm.msg = "Creating Injectable file...";
            SharedWitAndNFS2ISO2NFS(savedir, mvm, "WiiHomebrew");
        }
        private static void PatchDol(string consoleName, string mainDolPath, MainViewModel mvm)
        {
            var filePaths = mvm.gctPath.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            var convertedGctFiles = new List<string>();

            foreach (var path in filePaths)
            {
                string convertedPath = path;

                if (Path.GetExtension(path).Equals(".txt", StringComparison.OrdinalIgnoreCase))
                {
                    try
                    {
                        var (codes, gameId) = GctCode.ParseOcarinaOrDolphinTxtFile(path);
                        convertedPath = Path.ChangeExtension(path, ".gct");
                        GctCode.WriteGctFile(convertedPath, codes, gameId);
                        Logger.Log($"Converted {path} → {convertedPath} (Game ID: {gameId ?? "None"})");
                    }
                    catch (Exception ex)
                    {
                        Logger.Log($"ERROR: Failed to convert {path} - {ex.Message}");
                        continue;
                    }
                }

                convertedGctFiles.Add(convertedPath);
            }

            if (convertedGctFiles.Count == 0)
            {
                Logger.Log("ERROR: No valid GCT files available for patching.");
                return;
            }

            if (consoleName == "Wii")
            {
                var stringBuilder = new StringBuilder();

                foreach (var gctFile in convertedGctFiles)
                    stringBuilder.Append($" --add-section \"{gctFile}\"");

                var witArgs = $"patch \"{mainDolPath}\"" + stringBuilder.ToString();

                if (IsNativeWindows)
                {
                    using var unpack = new Process();
                    unpack.StartInfo.FileName = Path.Combine(toolsPath, "wstrt.exe");
                    unpack.StartInfo.Arguments = witArgs;
                    unpack.Start();
                    unpack.WaitForExit();
                }
                else
                {
                    MacLinuxHelper.PrepareAndInformUserOnUWUVCIHelper(consoleName, "wstrt", witArgs, toolsPath);
                }
            }
            else
            {
                var dol = new Dol();
                var allCodes = new List<GctCode>();

                foreach (var filePath in convertedGctFiles)
                    allCodes.AddRange(GctCode.LoadFromFile(filePath));

                dol.PatchDolFile(mainDolPath, allCodes);
            }
        }



        private static void GctPatch(MainViewModel mvm, string consoleName, string isoPath)
        {
            if (string.IsNullOrEmpty(mvm.GctPath))
                return;
;
            var extraction = Path.Combine(tempPath, "temp");

            mvm.msg = "Patching main.dol with gct file";
            mvm.Progress = 27;

            File.Delete(isoPath);
;
            var mainDolPath = Directory.GetFiles(extraction, "main.dol", SearchOption.AllDirectories).FirstOrDefault();

            PatchDol(consoleName, mainDolPath, mvm);
        }

        private static void WII(string romPath, MainViewModel mvm)
        {
            var witArgs = "";
            var dolPatch = mvm.RemoveDeflicker || mvm.RemoveDithering || mvm.HalfVFilter;
            string savedir = Directory.GetCurrentDirectory();
            if (new FileInfo(romPath).Extension.Contains("iso"))
            {
                mvm.msg = "Copying ROM...";
                File.Copy(romPath, Path.Combine(tempPath, "pre.iso"));
                mvm.Progress = 15;
            }
            else if (mvm.NKITFLAG || romPath.Contains("nkit") || new FileInfo(romPath).Extension.Contains("wbfs"))
            {
                witArgs = $"copy --source \"{romPath}\" --dest \"{Path.Combine(tempPath, "pre.iso")}\" -I";
                if (IsNativeWindows)
                {
                    if (mvm.NKITFLAG || romPath.Contains("nkit"))
                        mvm.msg = "Converting NKIT to ISO";
                    else
                        mvm.msg = "Converting WBFS to ISO...";

                    using Process toiso = new Process();

                    if (!mvm.debug)
                        toiso.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                    toiso.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                    toiso.StartInfo.Arguments = witArgs;

                    toiso.Start();
                    toiso.WaitForExit();
                }
                else
                    MacLinuxHelper.PrepareAndInformUserOnUWUVCIHelper("Wii", "wit", witArgs, toolsPath);

                if (!new FileInfo(romPath).Extension.Contains("wbfs"))
                    if (!File.Exists(Path.Combine(toolsPath, "pre.iso")))
                        throw new Exception("nkit");

                mvm.Progress = 15;
            }

            //GET ROMCODE and change it
            mvm.msg = "Trying to change the Manual...";
            //READ FIRST 4 BYTES
            byte[] chars = new byte[4];
            FileStream fstrm = new FileStream(Path.Combine(tempPath, "pre.iso"), FileMode.Open);
            fstrm.Read(chars, 0, 4);
            fstrm.Close();
            string procod = ByteArrayToString(chars);
            string neededformanual = procod.ToHex();
            string metaXml = Path.Combine(baseRomPath, "meta", "meta.xml");
            XmlDocument doc = new XmlDocument();
            doc.Load(metaXml);
            doc.SelectSingleNode("menu/reserved_flag2").InnerText = neededformanual;
            doc.Save(metaXml);
            //edit emta.xml
            mvm.Progress = 25;

            if (mvm.regionfrii)
            {
                using FileStream fs = new FileStream(Path.Combine(tempPath, "pre.iso"), FileMode.Open);
                fs.Seek(0x4E003, SeekOrigin.Begin);
                if (mvm.regionfriius)
                {
                    fs.Write(new byte[] { 0x01 }, 0, 1);
                    fs.Seek(0x4E010, SeekOrigin.Begin);
                    fs.Write(new byte[] { 0x80, 0x06, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, 0, 16);
                }
                else if (mvm.regionfriijp)
                {
                    fs.Write(new byte[] { 0x00 }, 0, 1);
                    fs.Seek(0x4E010, SeekOrigin.Begin);
                    fs.Write(new byte[] { 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, 0, 16);
                }
                else
                {
                    fs.Write(new byte[] { 0x02 }, 0, 1);
                    fs.Seek(0x4E010, SeekOrigin.Begin);
                    fs.Write(new byte[] { 0x80, 0x80, 0x80, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, 0, 16);
                }
                fs.Close();
            }

            var preIso = Path.Combine(tempPath, "pre.iso");

            if (mvm.donttrim)
            {
                witArgs = $"extract \"{preIso}\" --DEST \"{Path.Combine(tempPath, "TEMP")}\" --psel data -vv1";
                mvm.msg = "Prepping ROM...";
            }
            else
            {
                witArgs = $"extract \"{preIso}\" --DEST \"{Path.Combine(tempPath, "TEMP")}\" --psel WHOLE -vv1";
                mvm.msg = "Trimming ROM...";
            }

            if (IsNativeWindows)
            {
                using Process trimm = new Process();
                if (!mvm.debug)
                    trimm.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                trimm.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                trimm.StartInfo.Arguments = witArgs;
                trimm.Start();
                trimm.WaitForExit();
                mvm.Progress = 30;
            }
            else
                MacLinuxHelper.PrepareAndInformUserOnUWUVCIHelper("Wii", "wit", witArgs, toolsPath);

            GctPatch(mvm, "Wii", Path.Combine(tempPath, "pre.iso"));

            if (dolPatch)
            {
                mvm.msg = "Patching main.dol file";
                mvm.Progress = 33;

                var extractionFolder = Path.Combine(tempPath, "TEMP");
                var mainDolPath = Directory.GetFiles(extractionFolder, "main.dol", SearchOption.AllDirectories).FirstOrDefault();
                var output = Path.Combine(Path.GetDirectoryName(mainDolPath), "patched.dol");

                DeflickerDitheringRemover.ProcessFile(mainDolPath, output, mvm.RemoveDeflicker, mvm.RemoveDithering, mvm.HalfVFilter);

                File.Delete(mainDolPath);
                File.Move(output, mainDolPath);
            }

            if (mvm.Index == 4)
            {
                mvvm.msg = "Patching ROM (Force CC)...";
                Console.WriteLine("Patching the ROM to force Classic Controller input");
                using Process tik = new Process();
                tik.StartInfo.FileName = Path.Combine(toolsPath, "GetExtTypePatcher.exe");
                tik.StartInfo.Arguments = $"\"{Path.Combine(tempPath, "TEMP", "DATA", "sys", "main.dol")}\" -nc";
                tik.StartInfo.UseShellExecute = false;
                tik.StartInfo.CreateNoWindow = true;
                tik.StartInfo.RedirectStandardOutput = true;
                tik.StartInfo.RedirectStandardInput = true;
                tik.Start();
                Thread.Sleep(2000);
                tik.StandardInput.WriteLine();
                tik.WaitForExit();
                mvm.Progress = 35;
            }

            if (mvm.Patch)
            {
                mvm.msg = "Video Patching ROM...";
                using Process vmc = new Process();

                File.Copy(Path.Combine(toolsPath, "wii-vmc.exe"), Path.Combine(tempPath, "TEMP", "DATA", "sys", "wii-vmc.exe"));
                Directory.SetCurrentDirectory(Path.Combine(tempPath, "TEMP", "DATA", "sys"));

                vmc.StartInfo.FileName = "wii-vmc.exe";
                vmc.StartInfo.Arguments = "main.dol";
                vmc.StartInfo.UseShellExecute = false;
                vmc.StartInfo.CreateNoWindow = true;
                vmc.StartInfo.RedirectStandardOutput = true;
                vmc.StartInfo.RedirectStandardInput = true;

                vmc.Start();
                Thread.Sleep(1000);
                vmc.StandardInput.WriteLine("a");
                Thread.Sleep(2000);

                if (mvm.toPal)
                    vmc.StandardInput.WriteLine("1");
                else
                    vmc.StandardInput.WriteLine("2");

                Thread.Sleep(2000);
                vmc.StandardInput.WriteLine();
                vmc.WaitForExit();
                File.Delete("wii-vmc.exe");

                Directory.SetCurrentDirectory(savedir);
                mvm.Progress = 40;
            }

            var tempFolder = Path.Combine(tempPath, "TEMP");

            if (mvm.donttrim)
            {
                mvm.msg = "Creating ISO from patched ROM...";
                witArgs = $"copy \"{tempFolder}\" --DEST \"{Path.Combine(tempPath, "game.iso")}\" -ovv --psel WHOLE --iso";
            }
            else
            {
                mvm.msg = "Creating ISO from trimmed ROM...";
                witArgs = $"copy \"{tempFolder}\" --DEST \"{Path.Combine(tempPath, "game.iso")}\" -ovv --links --iso";
            }

            if (IsNativeWindows)
            {
                using Process repack = new Process();
                if (!mvm.debug)
                    repack.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                repack.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                repack.StartInfo.Arguments = witArgs;
                repack.Start();
                repack.WaitForExit();
            }
            else
                MacLinuxHelper.PrepareAndInformUserOnUWUVCIHelper("Wii", "wit", witArgs, toolsPath);


            Directory.Delete(Path.Combine(tempPath, "TEMP"), true);
            File.Delete(Path.Combine(tempPath, "pre.iso"));


            mvm.Progress = 50;
            mvm.msg = "Replacing TIK and TMD...";
            var gameIso = Path.Combine(tempPath, "game.iso");
            witArgs = $"extract \"{gameIso}\" --psel data --files +tmd.bin --files +ticket.bin --DEST \"{Path.Combine(tempPath, "TIKTMD")}\" -vv1";

            if (IsNativeWindows)
            {
                using Process extract = new Process();
                if (!mvm.debug)
                    extract.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                extract.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                extract.StartInfo.Arguments = witArgs;
                extract.Start();
                extract.WaitForExit();
            }
            else
                MacLinuxHelper.PrepareAndInformUserOnUWUVCIHelper("Wii", "wit", witArgs, toolsPath);

            foreach (string sFile in Directory.GetFiles(Path.Combine(baseRomPath, "code"), "rvlt.*"))
                File.Delete(sFile);

            File.Copy(Path.Combine(tempPath, "TIKTMD", "tmd.bin"), Path.Combine(baseRomPath, "code", "rvlt.tmd"));
            File.Copy(Path.Combine(tempPath, "TIKTMD", "ticket.bin"), Path.Combine(baseRomPath, "code", "rvlt.tik"));
            Directory.Delete(Path.Combine(tempPath, "TIKTMD"), true);

            mvm.Progress = 60;
            mvm.msg = "Injecting ROM...";

            foreach (string sFile in Directory.GetFiles(Path.Combine(baseRomPath, "content"), "*.nfs"))
                File.Delete(sFile);

            File.Move(Path.Combine(tempPath, "game.iso"), Path.Combine(baseRomPath, "content", "game.iso"));
            File.Copy(Path.Combine(toolsPath, "nfs2iso2nfs.exe"), Path.Combine(baseRomPath, "content", "nfs2iso2nfs.exe"));
            Directory.SetCurrentDirectory(Path.Combine(baseRomPath, "content"));
            using (Process iso2nfs = new Process())
            {
                if (!mvm.debug)
                    iso2nfs.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                iso2nfs.StartInfo.FileName = "nfs2iso2nfs.exe";
                string extra = "";
                if (mvm.Index == 2) { extra = "-horizontal "; }
                if (mvm.Index == 3) { extra = "-wiimote "; }
                if (mvm.Index == 4) { extra = "-instantcc "; }
                if (mvm.Index == 5) { extra = "-nocc "; }
                if (mvm.LR) { extra += "-lrpatch "; }
                iso2nfs.StartInfo.Arguments = $"-enc {extra}-iso game.iso";
                iso2nfs.Start();
                iso2nfs.WaitForExit();
                File.Delete("nfs2iso2nfs.exe");
                File.Delete("game.iso");
            }
            Directory.SetCurrentDirectory(savedir);
            mvm.Progress = 80;
        }
        private static void ConvertToIso(string sourcePath, string outputFileName, bool debugMode)
        {
            using Process process = new Process();
            if (!debugMode)
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

            process.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToIso.exe");
            process.StartInfo.Arguments = $"\"{sourcePath}\"";
            process.Start();
            process.WaitForExit();

            string isoPath = Path.Combine(toolsPath, outputFileName);
            if (!File.Exists(isoPath))
                throw new Exception("ISO conversion failed.");

            File.Move(isoPath, Path.Combine(tempPath, "TempBase", "files", "game.iso"));
        }

        // Function to handle NKit conversion
        private static void ConvertToNKit(string sourcePath, string outputFileName, bool debugMode)
        {
            using Process process = new Process();
            if (!debugMode)
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

            process.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToNKit.exe");
            process.StartInfo.Arguments = $"\"{sourcePath}\"";
            process.Start();
            process.WaitForExit();

            string nkitIsoPath = Path.Combine(toolsPath, outputFileName);
            if (!File.Exists(nkitIsoPath))
                throw new Exception("NKit conversion failed.");

            File.Move(nkitIsoPath, Path.Combine(tempPath, "TempBase", "files", outputFileName));
        }

        private static void GC(string romPath, MainViewModel mvm, bool force)
        {
            string savedir = Directory.GetCurrentDirectory();
            mvvm.msg = "Extracting Nintendont Base...";

            if (Directory.Exists(Path.Combine(tempPath, "TempBase"))) 
                Directory.Delete(Path.Combine(tempPath, "TempBase"), true);

            Directory.CreateDirectory(Path.Combine(tempPath, "TempBase"));
            ZipFile.ExtractToDirectory(Path.Combine(toolsPath, "BASE.zip"), Path.Combine(tempPath));

            DirectoryCopy(Path.Combine(tempPath, "BASE"), Path.Combine(tempPath, "TempBase"), true);
            mvvm.Progress = 20;
            mvvm.msg = "Applying Nintendont";
            if (force)
            {
                mvvm.msg += " force 4:3...";
                File.Copy(Path.Combine(toolsPath, "nintendont_force.dol"), Path.Combine(tempPath, "TempBase", "sys", "main.dol"));
            }
            else
            {
                mvvm.msg += "...";
                File.Copy(Path.Combine(toolsPath, "nintendont.dol"), Path.Combine(tempPath, "TempBase", "sys", "main.dol"));
            }
            mvm.Progress = 40;
            mvvm.msg = "Injecting GameCube Game into NintendontBase...";
            if (mvm.donttrim)
            {
                if (romPath.ToLower().Contains("nkit.iso"))
                {
                    using (Process wit = new Process())
                    {
                        if (!mvm.debug)
                        {

                            wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                        }
                        wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToIso.exe");
                        wit.StartInfo.Arguments = $"\"{romPath}\"";
                        wit.Start();
                        wit.WaitForExit();
                        if (!File.Exists(Path.Combine(toolsPath, "out.iso")))
                        {
                            throw new Exception("nkit");
                        }
                        File.Move(Path.Combine(toolsPath, "out.iso"), Path.Combine(tempPath, "TempBase", "files", "game.iso"));

                    }
                }
                else
                {
                    if (romPath.ToLower().Contains("gcz"))
                    {
                        //Convert to nkit.iso
                        using (Process wit = new Process())
                        {
                            if (!mvm.debug)
                            {

                                wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                            }
                            wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToIso.exe");
                            wit.StartInfo.Arguments = $"\"{romPath}\"";
                            wit.Start();
                            wit.WaitForExit();
                            if (!File.Exists(Path.Combine(toolsPath, "out.iso")))
                            {
                                throw new Exception("nkit");
                            }
                            File.Move(Path.Combine(toolsPath, "out.iso"), Path.Combine(tempPath, "TempBase", "files", "game.iso"));

                        }
                    }
                    else
                    {
                        File.Copy(romPath, Path.Combine(tempPath, "TempBase", "files", "game.iso"));
                    }
                   
                }
            }
            else
            {
                if (romPath.ToLower().Contains("iso") || romPath.ToLower().Contains("gcm"))
                {
                    //convert to nkit
                    using (Process wit = new Process())
                    {
                        if (!mvm.debug)
                        {

                            wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                        }
                        wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToNKit.exe");
                        wit.StartInfo.Arguments = $"\"{romPath}\"";
                        wit.Start();
                        wit.WaitForExit();
                        if (!File.Exists(Path.Combine(toolsPath, "out.nkit.iso")))
                        {
                            throw new Exception("nkit");
                        }
                        File.Move(Path.Combine(toolsPath, "out.nkit.iso"), Path.Combine(tempPath, "TempBase", "files", "game.iso"));

                    }
                    
                }
                else
                {
                    if (romPath.ToLower().Contains("gcz"))
                    {
                        //Convert to nkit.iso
                        using (Process wit = new Process())
                        {
                            if (!mvm.debug)
                            {

                                wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                            }
                            wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToNKit.exe");
                            wit.StartInfo.Arguments = $"\"{romPath}\"";
                            wit.Start();
                            wit.WaitForExit();
                            if (!File.Exists(Path.Combine(toolsPath, "out.nkit.iso")))
                            {
                                throw new Exception("nkit");
                            }
                            File.Move(Path.Combine(toolsPath, "out.nkit.iso"), Path.Combine(tempPath, "TempBase", "files", "game.iso"));

                        }
                    }
                    else
                    {
                        File.Copy(romPath, Path.Combine(tempPath, "TempBase", "files", "game.iso"));
                    }
                    
                }

            }

            if (mvm.gc2rom != "" && File.Exists(mvm.gc2rom))
            {
                if (mvm.donttrim)
                {
                    if (mvm.gc2rom.Contains("nkit"))
                     {
                         using (Process wit = new Process())
                         {
                             if (!mvm.debug)
                             {

                                 wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                             }
                             wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToIso.exe");
                             wit.StartInfo.Arguments = $"\"{mvm.gc2rom}\"";
                             wit.Start();
                             wit.WaitForExit();
                             if (!File.Exists(Path.Combine(toolsPath, "out(Disc 1).iso")))
                             {
                                 throw new Exception("nkit");
                             }
                             File.Move(Path.Combine(toolsPath, "out(Disc 1).iso"), Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));

                         }
                     }
                     else
                     {
                        
                        
                            File.Copy(mvm.gc2rom, Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));
                        
                        
                    }
                }
                else{
                    if (mvm.gc2rom.ToLower().Contains("iso") || mvm.gc2rom.ToLower().Contains("gcm"))
                    {
                        //convert to nkit
                        using (Process wit = new Process())
                        {
                            if (!mvm.debug)
                            {

                                wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                            }
                            wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToNKit.exe");
                            wit.StartInfo.Arguments = $"\"{mvm.gc2rom}\"";
                            wit.Start();
                            wit.WaitForExit();
                            if (!File.Exists(Path.Combine(toolsPath, "out(Disc 1).nkit.iso")))
                            {
                                throw new Exception("nkit");
                            }
                            File.Move(Path.Combine(toolsPath, "out(Disc 1).nkit.iso"), Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));

                        }
                    }
                    else
                    {
                        if (romPath.ToLower().Contains("gcz"))
                        {
                            //Convert to nkit.iso
                            using (Process wit = new Process())
                            {
                                if (!mvm.debug)
                                {

                                    wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                                }
                                wit.StartInfo.FileName = Path.Combine(toolsPath, "ConvertToNKit.exe");
                                wit.StartInfo.Arguments = $"\"{romPath}\"";
                                wit.Start();
                                wit.WaitForExit();
                                if (!File.Exists(Path.Combine(toolsPath, "out(Disc 1).nkit.iso")))
                                {
                                    throw new Exception("nkit");
                                }
                                File.Move(Path.Combine(toolsPath, "out(Disc 1).nkit.iso"), Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));

                            }
                        }
                        else
                        {
                            File.Copy(romPath, Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));
                        }
                    }
                    
                }
            }
            var args = $"copy \"{Path.Combine(tempPath, "TempBase")}\" --DEST \"{Path.Combine(tempPath, "game.iso")}\" -ovv --links --iso";
            if (IsNativeWindows)
            {
                using (Process wit = new Process())
                {
                    if (!mvm.debug)
                    {

                        wit.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    }
                    wit.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                    wit.StartInfo.Arguments = args;
                    wit.Start();
                    wit.WaitForExit();
                }
            }
            else
            {
                MacLinuxHelper.WriteFailedStepToJson("GCN","wit", args, string.Empty);
                MacLinuxHelper.DisplayMessageBoxAboutTheHelper();
            }

            //Thread.Sleep(6000);
            if (!File.Exists(Path.Combine(tempPath, "game.iso")))
            {
                Console.Clear();

                throw new Exception("WII: An error occured while Creating the ISO");
            }
            //Directory.Delete(Path.Combine(tempPath, "TempBase"), true);
            romPath = Path.Combine(tempPath, "game.iso");
            mvvm.Progress = 50;

            //GET ROMCODE and change it
            mvm.msg = "Trying to save rom code...";
            //READ FIRST 4 BYTES
            byte[] chars = new byte[4];
            FileStream fstrm = new FileStream(Path.Combine(tempPath, "TempBase", "files", "game.iso"), FileMode.Open);
            fstrm.Read(chars, 0, 4);
            fstrm.Close();
            string procod = ByteArrayToString(chars);
            string metaXml = Path.Combine(baseRomPath, "meta", "meta.xml");
            XmlDocument doc = new XmlDocument();
            doc.Load(metaXml);
            doc.SelectSingleNode("menu/reserved_flag2").InnerText = procod.ToHex();
            doc.Save(metaXml);
            //edit emta.xml
            Directory.Delete(Path.Combine(tempPath, "TempBase"), true);
            mvvm.Progress = 55;

            mvm.msg = "Replacing TIK and TMD...";

            args = $"extract \"{Path.Combine(tempPath, "game.iso")}\" --psel data --files +tmd.bin --files +ticket.bin --DEST \"{Path.Combine(tempPath, "TIKTMD")}\" -vv1";
            if (IsNativeWindows)
            {
                using (Process extract = new Process())
                {
                    if (!mvm.debug)
                    {
                        extract.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    }
                    extract.StartInfo.FileName = Path.Combine(toolsPath, "wit.exe");
                    extract.StartInfo.Arguments = args;
                    extract.Start();
                    extract.WaitForExit();
                }
            }
            else
            {
                MacLinuxHelper.WriteFailedStepToJson("GCN", "wit", args, string.Empty);
                MacLinuxHelper.DisplayMessageBoxAboutTheHelper();
            }
            foreach (string sFile in Directory.GetFiles(Path.Combine(baseRomPath, "code"), "rvlt.*"))
            {
                File.Delete(sFile);
            }
            File.Copy(Path.Combine(tempPath, "TIKTMD", "tmd.bin"), Path.Combine(baseRomPath, "code", "rvlt.tmd"));
            File.Copy(Path.Combine(tempPath, "TIKTMD", "ticket.bin"), Path.Combine(baseRomPath, "code", "rvlt.tik"));
            Directory.Delete(Path.Combine(tempPath, "TIKTMD"), true);
            mvm.Progress = 60;
            mvm.msg = "Injecting ROM...";
            foreach (string sFile in Directory.GetFiles(Path.Combine(baseRomPath, "content"), "*.nfs"))
            {
                File.Delete(sFile);
            }
            File.Move(Path.Combine(tempPath, "game.iso"), Path.Combine(baseRomPath, "content", "game.iso"));
            File.Copy(Path.Combine(toolsPath, "nfs2iso2nfs.exe"), Path.Combine(baseRomPath, "content", "nfs2iso2nfs.exe"));
            Directory.SetCurrentDirectory(Path.Combine(baseRomPath, "content"));
            using (Process iso2nfs = new Process())
            {
                if (!mvm.debug)
                {
                   
                    iso2nfs.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                }
                iso2nfs.StartInfo.FileName = "nfs2iso2nfs.exe";
                iso2nfs.StartInfo.Arguments = $"-enc -homebrew -passthrough -iso game.iso";
                iso2nfs.Start();
                iso2nfs.WaitForExit();
                File.Delete("nfs2iso2nfs.exe");
                File.Delete("game.iso");
            }
            Directory.SetCurrentDirectory(savedir);
            mvm.Progress = 80;
            
        }

        private static void Zesty_GC(string romPath, MainViewModel mvm, bool force)
        {
            string savedir = Directory.GetCurrentDirectory();
            mvvm.msg = "Extracting Nintendont Base...";

            if (Directory.Exists(Path.Combine(tempPath, "TempBase"))) 
                Directory.Delete(Path.Combine(tempPath, "TempBase"), true);

            Directory.CreateDirectory(Path.Combine(tempPath, "TempBase"));
            ZipFile.ExtractToDirectory(Path.Combine(toolsPath, "BASE.zip"), Path.Combine(tempPath));

            DirectoryCopy(Path.Combine(tempPath, "BASE"), Path.Combine(tempPath, "TempBase"), true);
            mvvm.Progress = 20;
            mvvm.msg = "Applying Nintendont";
            if (force)
            {
                mvvm.msg += " force 4:3...";
                File.Copy(Path.Combine(toolsPath, "nintendont_force.dol"), Path.Combine(tempPath, "TempBase", "sys", "main.dol"));
            }
            else
            {
                mvvm.msg += "...";
                File.Copy(Path.Combine(toolsPath, "nintendont.dol"), Path.Combine(tempPath, "TempBase", "sys", "main.dol"));
            }
            mvm.Progress = 25;
            mvvm.msg = "Injecting GameCube Game into NintendontBase...";

            var isoPath = Path.Combine(tempPath, "TempBase", "files");
            if (mvm.donttrim)
            {
                if (romPath.ToLower().Contains("nkit.iso") || romPath.ToLower().Contains("gcz"))
                    ConvertToIso(romPath, "out.iso", mvm.debug);
                else
                    File.Copy(romPath, Path.Combine(tempPath, "TempBase", "files", "game.iso"));
            }
            else
            {
                if (romPath.ToLower().Contains("iso") || romPath.ToLower().Contains("gcm") || romPath.ToLower().Contains("gcz"))
                    ConvertToNKit(romPath, "out.nkit.iso", mvm.debug);
                else
                    File.Copy(romPath, Path.Combine(tempPath, "TempBase", "files", "game.iso"));
            }

            // Handle the second game (disc2.iso)
            if (!string.IsNullOrEmpty(mvm.gc2rom) && File.Exists(mvm.gc2rom))
            {
                if (mvm.donttrim)
                {
                    if (mvm.gc2rom.Contains("nkit"))
                        ConvertToIso(mvm.gc2rom, "out(Disc 1).iso", mvm.debug);
                    else
                        File.Copy(mvm.gc2rom, Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));
                }
                else
                {
                    if (mvm.gc2rom.ToLower().Contains("iso") || mvm.gc2rom.ToLower().Contains("gcm") || romPath.ToLower().Contains("gcz"))
                        ConvertToNKit(mvm.gc2rom, "out(Disc 1).nkit.iso", mvm.debug);
                    else
                        File.Copy(romPath, Path.Combine(tempPath, "TempBase", "files", "disc2.iso"));
                }
            }
            SharedWitAndNFS2ISO2NFS(savedir, mvm, "GCN");
        }
       
        public static void MSX(string injectRomPath)
        {
            mvvm.msg = "Reading Header from Base...";
            byte[] test = new byte[0x580B3];
            using (var fs = new FileStream(Path.Combine(baseRomPath, "content" , "msx", "msx.pkg"),
                                 FileMode.Open,
                                 FileAccess.ReadWrite))
            {


                fs.Read(test, 0, 0x580B3);
                fs.Close();
                File.Delete(Path.Combine(baseRomPath, "content", "msx", "msx.pkg"));
            }
            mvvm.Progress = 20;
            mvvm.msg = "Creating new PKG with read Header...";
            using (var fs = new FileStream(Path.Combine(baseRomPath, "content", "msx", "msx.pkg"),
                                 FileMode.OpenOrCreate,
                                 FileAccess.ReadWrite))
            {


                fs.Write(test, 0, 0x580B3);
                fs.Close();

            }
            mvvm.Progress = 30;
            mvvm.msg = "Reading ROM content...";
            using (var fs = new FileStream(injectRomPath,
                                 FileMode.OpenOrCreate,
                                 FileAccess.ReadWrite))
            {


                test = new byte[fs.Length];
                fs.Read(test, 0, test.Length - 1);

            }
            mvvm.Progress = 50;
            mvvm.msg = "Injecting ROM into new PKG...";
            using (var fs = new FileStream(Path.Combine(baseRomPath, "content", "msx", "msx.pkg"),
                                FileMode.Append))
            {

                fs.Write(test, 0, test.Length);

            }
            mvvm.Progress = 80;
        }
        public static void DeleteDirectory(string path)
        {
            foreach (string directory in Directory.GetDirectories(path))
                DeleteDirectory(directory);

            try
            {
                Thread.Sleep(0);
                Directory.Delete(path, true);
            }
            catch (IOException)
            {
                Directory.Delete(path, true);
            }
            catch (UnauthorizedAccessException)
            {
                Directory.Delete(path, true);
            }
        }
        public static void Clean()
        {
            if (Directory.Exists(tempPath))
                DeleteDirectory(tempPath);
        }
        [STAThread]
        public static void Loadiine(string gameName, string gameConsole)
        {
            if (gameName == null || gameName == string.Empty) gameName = "NoName";
            gameName = gameName.Replace("|", " ");
            Regex reg = new Regex("[^a-zA-Z0-9 é -]");
            //string outputPath = Path.Combine(JsonSettingsManager.Settings.InjectionPath, gameName);
            string outputPath = Path.Combine(JsonSettingsManager.Settings.OutPath, $"[LOADIINE][{gameConsole}] {reg.Replace(gameName,"")} [{mvvm.prodcode}]");
            mvvm.foldername = $"[LOADIINE][{gameConsole}] {reg.Replace(gameName, "")} [{mvvm.prodcode}]";
            int i = 0;
            while (Directory.Exists(outputPath))
            {
                outputPath = Path.Combine(JsonSettingsManager.Settings.OutPath, $"[LOADIINE][{gameConsole}] {reg.Replace(gameName, "")} [{mvvm.prodcode}]_{i}");
                mvvm.foldername = $"[LOADIINE][{gameConsole}] {reg.Replace(gameName, "")} [{mvvm.prodcode}]_{i}";
                i++;
            }
            
            DirectoryCopy(baseRomPath,outputPath, true);

            Custom_Message cm = new Custom_Message("Injection Complete", $"To Open the Location of the Inject press Open Folder.\nIf you want the inject to be put on your SD now, press Copy to SD.", JsonSettingsManager.Settings.OutPath);
            try
            {
                cm.Owner = mvvm.mw;
            }catch(Exception )
            {

            }
            cm.ShowDialog();
            Clean();
        }
        [STAThread]
        public static void Packing(string gameName, string gameConsole, MainViewModel mvm)
        {
            mvm.msg = "Checking Tools...";
            mvm.InjcttoolCheck();
            mvm.Progress = 20;
            mvm.msg = "Creating Outputfolder...";
            Regex reg = new Regex("[^a-zA-Z0-9 -]");
            if (gameName == null || gameName == string.Empty) gameName = "NoName";
           
            //string outputPath = Path.Combine(JsonSettingsManager.Settings.InjectionPath, gameName);
            string outputPath = Path.Combine(JsonSettingsManager.Settings.OutPath, $"[WUP][{gameConsole}] {reg.Replace(gameName,"").Replace("|", " ")}");
            outputPath = outputPath.Replace("|", " ");
            mvvm.foldername = $"[WUP][{gameConsole}] {reg.Replace(gameName, "").Replace("|"," ")}";
            int i = 0;
            while (Directory.Exists(outputPath))
            {
                outputPath = Path.Combine(JsonSettingsManager.Settings.OutPath, $"[WUP][{gameConsole}] {reg.Replace(gameName,"").Replace("|", " ")}_{i}");
                mvvm.foldername = $"[WUP][{gameConsole}] {reg.Replace(gameName, "").Replace("|", " ")}_{i}";
                i++;
            }
            var oldpath = Directory.GetCurrentDirectory();
            mvm.Progress = 40;
            mvm.msg = "Packing...";
            try
            {
                Directory.Delete(Environment.GetEnvironmentVariable("LocalAppData") + @"\temp\.net\CNUSPACKER", true);
            }
            catch { }
            try
            {
                var cmdLine = $"-in \"{baseRomPath}\" -out \"{outputPath}\" -encryptKeyWith {JsonSettingsManager.Settings.Ckey}";
                var regex = new Regex(@"(\"".+?\"")|(\S+)", RegexOptions.Compiled);
                var args = new List<string>();

                foreach (Match match in regex.Matches(cmdLine))
                    args.Add(match.Value.Trim('\"'));

                CNUSPACKER.Program.Main(args.ToArray());

                Directory.SetCurrentDirectory(oldpath);
            } catch(Exception ex )
            {
                Logger.Log(ex.Message);
                throw ex;
            }
            mvm.Progress = 90;
            mvm.msg = "Cleaning...";
            Clean();
            mvm.Progress = 100;
            
            mvm.msg = "";
        }
        
        public static void Download(MainViewModel mvm)
        {
            var curdir = Directory.GetCurrentDirectory();
            mvm.InjcttoolCheck();
            GameBases b = mvm.getBasefromName(mvm.SelectedBaseAsString);

            //GetKeyOfBase
            TKeys key = mvm.getTkey(b);
            if (mvm.GameConfiguration.Console == GameConsoles.WII || mvm.GameConfiguration.Console == GameConsoles.GCN)
            {
                if (Directory.Exists(tempPath)) 
                    Directory.Delete(tempPath, true);

                Directory.CreateDirectory(tempPath);

                // Call the download method with progress reporting
                var downloader = new Downloader(null, null);
                downloader.DownloadAsync(new TitleData(b.Tid, key.Tkey), Path.Combine(tempPath, "download")).GetAwaiter().GetResult();

                CSharpDecrypt.CSharpDecrypt.Decrypt(new string[] { JsonSettingsManager.Settings.Ckey, Path.Combine(tempPath, "download", b.Tid), Path.Combine(JsonSettingsManager.Settings.BasePath, $"{b.Name.Replace(":", "")} [{b.Region}]") });
                mvm.Progress = 99;
                foreach (string sFile in Directory.GetFiles(Path.Combine(JsonSettingsManager.Settings.BasePath, $"{b.Name.Replace(":", "")} [{b.Region}]", "content"), "*.nfs"))
                    File.Delete(sFile);

                mvm.Progress = 100;
            }
            else
            {
                if (Directory.Exists(tempPath))
                    Directory.Delete(tempPath, true);

                Directory.CreateDirectory(tempPath);

                // Call the download method with progress reporting
                var downloader = new Downloader(null, null);
                downloader.DownloadAsync(new TitleData(b.Tid, key.Tkey), Path.Combine(tempPath, "download")).GetAwaiter().GetResult();

                mvm.Progress = 75;
                CSharpDecrypt.CSharpDecrypt.Decrypt(new string[] { JsonSettingsManager.Settings.Ckey, Path.Combine(tempPath, "download", b.Tid), Path.Combine(JsonSettingsManager.Settings.BasePath, $"{b.Name.Replace(":", "")} [{b.Region}]") });
                mvm.Progress = 100;
            }
            Directory.SetCurrentDirectory(curdir);
        }

        public static string ExtractBase(string path, GameConsoles console)
        {
            if(!Directory.Exists(Path.Combine(JsonSettingsManager.Settings.BasePath, "CustomBases")))
                Directory.CreateDirectory(Path.Combine(JsonSettingsManager.Settings.BasePath, "CustomBases"));

            string outputPath = Path.Combine(JsonSettingsManager.Settings.BasePath, "CustomBases", $"[{console}] Custom");
            int i = 0;
            while (Directory.Exists(outputPath))
            {
                outputPath = Path.Combine(JsonSettingsManager.Settings.BasePath, $"[{console}] Custom_{i}");
                i++;
            }
            CSharpDecrypt.CSharpDecrypt.Decrypt(new string[] { JsonSettingsManager.Settings.Ckey, path, outputPath });
            return outputPath;
        }
        // This function changes TitleID, ProductCode and GameName in app.xml (ID) and meta.xml (ID, ProductCode, Name)
        private static void EditXML(string gameNameOr, int index, string code)
        {
            string gameName = string.Empty;
            if(gameNameOr != null || !string.IsNullOrWhiteSpace(gameNameOr))
            {
                gameName = gameNameOr;
                if (gameName.Contains('|'))
                {
                    var split = gameName.Split('|');
                    gameName = split[0] + "," + split[1];
                }
            }

            string metaXml = Path.Combine(baseRomPath, "meta", "meta.xml");
            string appXml = Path.Combine(baseRomPath, "code", "app.xml");
            Random random = new Random();
            string ID = $"{random.Next(0x3000, 0x10000):X4}{random.Next(0x3000, 0x10000):X4}";

            string ID2 = $"{random.Next(0x3000, 0x10000):X4}";
            mvvm.prodcode = ID2;
            XmlDocument doc = new XmlDocument();
            try
            {
                doc.Load(metaXml);
                if (gameName != null && gameName != string.Empty)
                {
                    doc.SelectSingleNode("menu/longname_ja").InnerText = gameName.Replace(",", "\n" );
                    doc.SelectSingleNode("menu/longname_en").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_fr").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_de").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_it").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_es").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_zhs").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_ko").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_nl").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_pt").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_ru").InnerText = gameName.Replace(",", "\n");
                    doc.SelectSingleNode("menu/longname_zht").InnerText = gameName.Replace(",", "\n");
                }

                /* if(code != null)
                {
                    doc.SelectSingleNode("menu/product_code").InnerText = $"WUP-N-{code}";
                }
                else
                {*/
                    doc.SelectSingleNode("menu/product_code").InnerText = $"WUP-N-{ID2}";
                //}
                if (index > 0)
                {
                    doc.SelectSingleNode("menu/drc_use").InnerText = "65537";
                }
                doc.SelectSingleNode("menu/title_id").InnerText = $"00050002{ID}";
                doc.SelectSingleNode("menu/group_id").InnerText = $"0000{ID2}";
                if (gameName != null && gameName != string.Empty)
                {
                    doc.SelectSingleNode("menu/shortname_ja").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_fr").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_de").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_en").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_it").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_es").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_zhs").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_ko").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_nl").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_pt").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_ru").InnerText = gameName.Split(',')[0];
                    doc.SelectSingleNode("menu/shortname_zht").InnerText = gameName.Split(',')[0];
                }

                doc.Save(metaXml);
            }
            catch (NullReferenceException)
            {
                   
            }

            try
            {
                doc.Load(appXml);
                doc.SelectSingleNode("app/title_id").InnerText = $"00050002{ID}";
            //doc.SelectSingleNode("app/title_id").InnerText = $"0005000247414645";
                
                doc.SelectSingleNode("app/group_id").InnerText = $"0000{ID2}";
                doc.Save(appXml);
            }
            catch (NullReferenceException)
            {
                  
            }
        }

        //This function copies the custom or normal Base to the working directory
        private static void CopyBase(string baserom, string customPath)
        {
            if (Directory.Exists(baseRomPath)) // sanity check
                Directory.Delete(baseRomPath, true);

            if (baserom == "Custom")
                DirectoryCopy(customPath, baseRomPath, true);
            else
                DirectoryCopy(Path.Combine(JsonSettingsManager.Settings.BasePath, baserom), baseRomPath, true);
        }

        private static void TG16(string injectRomPath)
        {
            //checking if folder
            if (Directory.Exists(injectRomPath))
            {
                DirectoryCopy(injectRomPath, "test", true);
                //TurboGrafCD
                using (Process TurboInject = new Process())
                {
                    mvvm.msg = "Creating TurboCD Pkg...";
                    TurboInject.StartInfo.UseShellExecute = false;
                    TurboInject.StartInfo.CreateNoWindow = true;
                    TurboInject.StartInfo.FileName = Path.Combine(toolsPath, "BuildTurboCDPcePkg.exe");
                    TurboInject.StartInfo.Arguments = $"test";
                    TurboInject.Start();
                    TurboInject.WaitForExit();
                    mvvm.Progress = 70;
                }
                Directory.Delete("test", true);
            }
            else
            {
                //creating pkg file including the TG16 rom
                using Process TurboInject = new Process();
                mvvm.msg = "Creating Turbo16 Pkg...";
                TurboInject.StartInfo.UseShellExecute = false;
                TurboInject.StartInfo.CreateNoWindow = true;
                TurboInject.StartInfo.FileName = Path.Combine(toolsPath, "BuildPcePkg.exe");
                TurboInject.StartInfo.Arguments = $"\"{injectRomPath}\"";
                TurboInject.Start();
                TurboInject.WaitForExit();
                mvvm.Progress = 70;
            }
            mvvm.msg = "Injecting ROM...";
            //replacing tg16 rom
            File.Delete(Path.Combine(baseRomPath, "content", "pceemu", "pce.pkg"));
            File.Copy("pce.pkg", Path.Combine(baseRomPath, "content", "pceemu", "pce.pkg"));
            File.Delete("pce.pkg");
            mvvm.Progress = 80;
        }

        private static void NESSNES(string injectRomPath)
        {
            string rpxFile = Directory.GetFiles(Path.Combine(baseRomPath, "code"), "*.rpx")[0]; //To get the RPX path where the NES/SNES rom needs to be Injected in
            mvvm.msg = "Decompressing RPX...";
            RPXCompOrDecomp(rpxFile, false); //Decompresses the RPX to be able to write the game into it
            mvvm.Progress = 20;
            if (mvvm.pixelperfect)
            {
                using Process retroinject = new Process();
                mvvm.msg = "Applying Pixel Perfect Patches...";
                retroinject.StartInfo.UseShellExecute = false;
                retroinject.StartInfo.CreateNoWindow = true;
                retroinject.StartInfo.RedirectStandardOutput = true;
                retroinject.StartInfo.RedirectStandardError = true;
                retroinject.StartInfo.FileName = Path.Combine(toolsPath, "ChangeAspectRatio.exe");
                retroinject.StartInfo.Arguments = $"\"{rpxFile}\"";

                retroinject.Start();
                retroinject.WaitForExit();
                mvvm.Progress = 30;
            }
            using (Process retroinject = new Process())
            {
                mvvm.msg = "Injecting ROM...";
                retroinject.StartInfo.UseShellExecute = false;
                retroinject.StartInfo.CreateNoWindow = true;
                retroinject.StartInfo.RedirectStandardOutput = true;
                retroinject.StartInfo.RedirectStandardError = true;
                retroinject.StartInfo.FileName = Path.Combine(toolsPath, "retroinject.exe");
                retroinject.StartInfo.Arguments = $"\"{rpxFile}\" \"{injectRomPath}\" \"{rpxFile}\"";

                retroinject.Start();
                retroinject.WaitForExit();
                mvvm.Progress = 70;
                var s = retroinject.StandardOutput.ReadToEnd();
                var e = retroinject.StandardError.ReadToEnd();
                if (e.Contains("is too large") || s.Contains("is too large"))
                {
                    mvvm.Progress = 100;
                    throw new Exception("retro");
                }

            }
            mvvm.msg = "Compressing RPX...";
            RPXCompOrDecomp(rpxFile, true); //Compresses the RPX
            mvvm.Progress = 80;
        }

        private static void GBA(string injectRomPath, N64Conf config)
        {
            bool delete = false;
            if (!new FileInfo(injectRomPath).Extension.Contains("gba"))
            {
                mvvm.msg = "Injecting GB/GBC ROM into goomba...";

                // Concatenate goomba.gba and the ROM into goombamenu.gba
                string goombaGbaPath = Path.Combine(toolsPath, "goomba.gba");
                string goombaMenuPath = Path.Combine(toolsPath, "goombamenu.gba");

                // Read both files and concatenate them
                using (FileStream output = new FileStream(goombaMenuPath, FileMode.Create))
                {
                    // Copy goomba.gba into goombamenu.gba
                    using (FileStream goombaGbaStream = new FileStream(goombaGbaPath, FileMode.Open))
                        goombaGbaStream.CopyTo(output);

                    // Append the injectRomPath (GB/GBC ROM) to goombamenu.gba
                    using FileStream injectRomStream = new FileStream(injectRomPath, FileMode.Open);
                    injectRomStream.CopyTo(output);
                }

                mvvm.Progress = 20;

                mvvm.msg = "Padding goomba ROM...";

                // Padding to 32MB (33554432 bytes)
                byte[] rom = new byte[33554432];
                FileStream fs = new FileStream(goombaMenuPath, FileMode.Open);
                fs.Read(rom, 0, (int)fs.Length);
                fs.Close();

                // Write the padded ROM to goombaPadded.gba
                string goombaPaddedPath = Path.Combine(toolsPath, "goombaPadded.gba");
                File.WriteAllBytes(goombaPaddedPath, rom);

                injectRomPath = goombaPaddedPath; // Set the injectRomPath to the padded ROM
                delete = true;
                mvvm.Progress = 40;
            }

            if (mvvm.PokePatch)
            {
                mvvm.msg = "Applying PokePatch";
                File.Copy(injectRomPath, Path.Combine(tempPath, "rom.gba"));
                injectRomPath = Path.Combine(tempPath, "rom.gba");
                PokePatch(injectRomPath);
                delete = true;
                mvvm.PokePatch = false;
                mvvm.Progress = 50;
            }

            using (Process psb = new Process())
            {
                mvvm.msg = "Injecting ROM...";
                psb.StartInfo.UseShellExecute = false;
                psb.StartInfo.CreateNoWindow = true;
                psb.StartInfo.FileName = Path.Combine(toolsPath, "psb.exe");
                psb.StartInfo.Arguments = $"\"{Path.Combine(baseRomPath, "content", "alldata.psb.m")}\" \"{injectRomPath}\" \"{Path.Combine(baseRomPath, "content", "alldata.psb.m")}\"";
                //psb.StartInfo.RedirectStandardError = true;
                //psb.StartInfo.RedirectStandardOutput = true;
                psb.Start();

                //var error = psb.StandardError.ReadToEndAsync();
                //var output = psb.StandardOutput.ReadToEndAsync();

                psb.WaitForExit();

                //if (!string.IsNullOrEmpty(error.Result))
                //throw new Exception(error.Result + "\nFile:" + new StackFrame(0, true).GetFileName() + "\nLine: " + new StackFrame(0, true).GetFileLineNumber());

                mvvm.Progress = 50;
            }

            if (config.DarkFilter == false)
            {
                var mArchiveExePath = Path.Combine(toolsPath, "MArchiveBatchTool.exe");
                var allDataPath = Path.Combine(baseRomPath, "content", "alldata.psb.m");

                // Step 1: Extract all data (longer wait time)
                RunProcess(mArchiveExePath, $"archive extract \"{allDataPath}\" --codec zlib --seed MX8wgGEJ2+M47 --keyLength 80", true);
                mvvm.Progress += 5;

                var lastModDirect = new DirectoryInfo(Path.Combine(baseRomPath, "content", "alldata.psb.m_extracted"))
                    .GetDirectories()
                    .OrderByDescending(d => d.LastWriteTimeUtc)
                    .LastOrDefault();

                var titleprofPsbM = Path.Combine(lastModDirect.FullName, "config", "title_prof.psb.m");

                // Step 2: Unpack title_prof.psb.m
                RunProcess(mArchiveExePath, $"m unpack \"{titleprofPsbM}\" zlib MX8wgGEJ2+M47 80", true);
                mvvm.Progress += 5;

                var titleprofPsb = Path.Combine(lastModDirect.FullName, "config", "title_prof.psb");

                // Step 3: Deserialize title_prof.psb
                RunProcess(mArchiveExePath, $"psb deserialize \"{titleprofPsb}\"", true);
                mvvm.Progress += 5;

                var titleprofPsbJson = Path.Combine(lastModDirect.FullName, "config", "title_prof.psb.json");
                var titleprofPsbJson_Modified = Path.Combine(lastModDirect.FullName, "config", "modified_title_prof.psb.json");

                // Step 4: Modify the JSON
                using (StreamReader sr = File.OpenText(titleprofPsbJson))
                {
                    var json = sr.ReadToEnd();
                    dynamic jsonObj = JsonConvert.DeserializeObject(json);
                    jsonObj["root"]["m2epi"]["brightness"] = 1;

                    json = JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
                    File.WriteAllText(titleprofPsbJson_Modified, json);
                    sr.Close();
                }
                File.Delete(titleprofPsbJson);
                File.Move(titleprofPsbJson_Modified, titleprofPsbJson);

                // Step 5: Serialize the JSON back to PSB
                RunProcess(mArchiveExePath, $"psb serialize \"{titleprofPsbJson}\"", true);
                mvvm.Progress += 5;

                // Step 6: Pack the modified PSB back to a file
                RunProcess(mArchiveExePath, $"m pack \"{titleprofPsb}\" zlib MX8wgGEJ2+M47 80", true);
                mvvm.Progress += 5;

                File.Delete(titleprofPsbJson);

                // Step 7: Rebuild the archive (longer wait time)
                RunProcess(mArchiveExePath, $"archive build --codec zlib --seed MX8wgGEJ2+M47 --keyLength 80 \"{Path.Combine(baseRomPath, "content", "alldata.psb.m_extracted")}\" \"{Path.Combine(baseRomPath, "content", "alldata")}\"", true);
                mvvm.Progress += 15;

                // Clean up extracted data
                Directory.Delete(Path.Combine(baseRomPath, "content", "alldata.psb.m_extracted"), true);
                File.Delete(Path.Combine(baseRomPath, "content", "alldata.psb"));
            }

            if (delete)
            {
                File.Delete(injectRomPath);
                if (File.Exists(Path.Combine(toolsPath, "goombamenu.gba"))) File.Delete(Path.Combine(toolsPath, "goombamenu.gba"));
            }
        }

        // Stupid me complaining, function to create and run the process
        private static void RunProcess(string fileName, string arguments, bool indefiniteWait = false, int waitTime = 3000)
        {
            using var process = new Process();
            var startInfo = new ProcessStartInfo
            {
                UseShellExecute = false,
                CreateNoWindow = true,
                Arguments = arguments,
                FileName = fileName
            };

            process.StartInfo = startInfo;
            process.Start();

            if (indefiniteWait)
                process.WaitForExit();
            else
                process.WaitForExit(waitTime);
        }

        private static void NDS(string injectRomPath)
        {
            try
            {
                string romName = GetRomNameFromZip();
                mvvm.msg = "Removing BaseRom...";
                ReplaceRomWithInjected(romName, injectRomPath);

                if (mvvm.DSLayout) 
                {
                    mvvm.msg = "Adding additional DS layout screens...";

                    using (var zip = ZipFile.Open(Path.Combine(toolsPath, "DSLayoutScreens.zip"), ZipArchiveMode.Read))
                        zip.ExtractToDirectory(Path.Combine(tempPath, "DSLayoutScreens"));

                    // Yes this is a typo but it's becuase I fucked up when I uploaded the original file.
                    DirectoryCopy(Path.Combine(tempPath, "DSLayoutScreens", (mvvm.STLayout ? "Phatnom Hourglass" : "All")), baseRomPath, true);
                }
                if (mvvm.RendererScale || mvvm.Brightness != 80 || mvvm.PixelArtUpscaler != 0)
                {
                    mvvm.msg = "Updating configuration_cafe.json...";
                    UpdateConfigurationCafeJson();
                }

                RecompressRom(romName);
                mvvm.Progress = 80;
            }
            catch (Exception ex)
            {
                // Log the error
                Console.WriteLine($"An error occurred in NDS method: {ex.Message}");
                throw;
            }
        }

        private static void UpdateConfigurationCafeJson()
        {
            var configurationCafe = Path.Combine(baseRomPath, "content", "0010", "configuration_cafe.json");

            // Load the JSON file
            string jsonContent = File.ReadAllText(configurationCafe);

            // Parse the JSON content
            var jsonObject = JObject.Parse(jsonContent);

            // Update the values
            jsonObject["configuration"]["3DRendering"]["RenderScale"] = (mvvm.RendererScale ? 0 : 1);
            jsonObject["configuration"]["Display"]["Brightness"] = mvvm.Brightness;
            jsonObject["configuration"]["Display"]["PixelArtUpscaler"] = mvvm.PixelArtUpscaler;

            // Write the updated JSON back to the file
            File.WriteAllText(configurationCafe, jsonObject.ToString());
        }

        private static string GetRomNameFromZip()
        {
            mvvm.msg = "Getting BaseRom Name...";
            string zipLocation = Path.Combine(baseRomPath, "content", "0010", "rom.zip");
            string romName = string.Empty;

            using (var zip = ZipFile.Open(zipLocation, ZipArchiveMode.Read))
            {
                var entry = zip.Entries.FirstOrDefault(file => file.Name.Contains("WUP"));
                if (entry != null)
                    romName = entry.Name;
            }
            mvvm.Progress = 15;

            if (string.IsNullOrEmpty(romName))
                throw new InvalidOperationException("ROM name not found in the zip archive.");

            return romName;
        }

        private static void ReplaceRomWithInjected(string romName, string injectRomPath)
        {
            string romPath = Path.Combine(Directory.GetCurrentDirectory(), romName);

            if (File.Exists(romPath))
                File.Delete(romPath);

            string zipLocation = Path.Combine(baseRomPath, "content", "0010", "rom.zip");

            if (File.Exists(zipLocation))
                File.Delete(zipLocation);

            File.Copy(injectRomPath, romPath);
        }

        private static void RecompressRom(string romName)
        {
            string zipLocation = Path.Combine(baseRomPath, "content", "0010", "rom.zip");
            string romPath = Path.Combine(Directory.GetCurrentDirectory(), romName);

            using (var stream = new FileStream(zipLocation, FileMode.Create))
                using (var archive = new ZipArchive(stream, ZipArchiveMode.Create))
                    archive.CreateEntryFromFile(romPath, Path.GetFileName(romPath));

            File.Delete(romPath);
        }


        private static void N64(string injectRomPath, N64Conf config)
        {
            try
            {
                InjectRom(injectRomPath);
                if (config.WideScreen || config.DarkFilter)
                    ApplyCustomSettings(config);

                ApplyIniSettings(config);
                mvvm.Progress = 80;
            }
            catch (Exception ex)
            {
                // Log the error
                Console.WriteLine($"An error occurred in N64 method: {ex.Message}");
                throw;
            }
        }

        private static void InjectRom(string injectRomPath)
        {
            string mainRomPath = Directory.GetFiles(Path.Combine(baseRomPath, "content", "rom"))[0];

            using Process n64convert = new Process();
            mvvm.msg = "Injecting ROM...";
            n64convert.StartInfo.UseShellExecute = false;
            n64convert.StartInfo.CreateNoWindow = true;
            n64convert.StartInfo.FileName = Path.Combine(toolsPath, "N64Converter.exe");
            n64convert.StartInfo.Arguments = $"\"{injectRomPath}\" \"{mainRomPath}\"";
            n64convert.Start();
            n64convert.WaitForExit();
            mvvm.Progress = 60;
        }

        private static void ApplyCustomSettings(N64Conf config)
        {
            string frameLayoutPath = Path.Combine(baseRomPath, "content", "FrameLayout.arc");

            using (var fileStream = File.Open(frameLayoutPath, FileMode.Open))
            {
                // I would love to modularize this code, but idfk how it works exactly
                uint offset = 0;
                uint size = 0;
                byte[] offsetB = new byte[4];
                byte[] sizeB = new byte[4];
                byte[] nameB = new byte[0x18];
                var header = new byte[4];

                byte[] oneOut = BitConverter.GetBytes((float)1);
                byte[] zeroOut = BitConverter.GetBytes((float)0);

                byte darkFilter = (byte)(config.DarkFilter ? 0 : 1);
                byte[] wideScreen = config.WideScreen ? new byte[] { 0x44, 0xF0, 0, 0 } : new byte[] { 0x44, 0xB4, 0, 0 };

                fileStream.Read(header, 0, 4);

                if (header.SequenceEqual(new byte[] { (byte)'S', (byte)'A', (byte)'R', (byte)'C' }))
                {
                    fileStream.Position = 0x0C;
                    fileStream.Read(offsetB, 0, 4);
                    offset = BitConverter.ToUInt32(offsetB.Reverse().ToArray(), 0);

                    fileStream.Position = 0x38;
                    fileStream.Read(offsetB, 0, 4);
                    offset += BitConverter.ToUInt32(offsetB.Reverse().ToArray(), 0);

                    fileStream.Position = offset;
                    fileStream.Read(header, 0, 4);

                    if (header.SequenceEqual(new byte[] { (byte)'F', (byte)'L', (byte)'Y', (byte)'T' }))
                    {
                        fileStream.Position = offset + 0x04;
                        fileStream.Read(offsetB, 0, 4);

                        offset += BitConverter.ToUInt32(offsetB.Skip(2).Reverse().ToArray(), 0);

                        fileStream.Position = offset;

                        while (offset < fileStream.Length)
                        {
                            fileStream.Read(header, 0, 4);
                            fileStream.Read(sizeB, 0, 4);
                            size = BitConverter.ToUInt32(sizeB.Reverse().ToArray(), 0);

                            fileStream.Read(nameB, 0, 0x18);
                            string name = Encoding.ASCII.GetString(nameB.TakeWhile(b => b != 0).ToArray());

                            if (name == "frame")
                                WriteFrameData(fileStream, offset, zeroOut, oneOut, wideScreen);
                            else if (name == "frame_mask")
                                WriteDarkFilterData(fileStream, offset, darkFilter);
                            else if (name == "power_save_bg")
                                break; // End the loop as the required modifications are done

                            offset += size;
                            fileStream.Position = offset;
                        }
                    }
                }
            }
            mvvm.Progress = 70;
        }

        private static void WriteFrameData(FileStream fileStream, uint offset, byte[] zeroOut, byte[] oneOut, byte[] wideScreen)
        {
            fileStream.Position = offset + 0x2C;
            fileStream.Write(zeroOut, 0, zeroOut.Length);

            fileStream.Position = offset + 0x30; // TranslationX
            fileStream.Write(zeroOut, 0, zeroOut.Length);

            fileStream.Position = offset + 0x44; // ScaleX
            fileStream.Write(oneOut, 0, oneOut.Length);

            fileStream.Position = offset + 0x48; // ScaleY
            fileStream.Write(oneOut, 0, oneOut.Length);

            fileStream.Position = offset + 0x4C; // Widescreen
            fileStream.Write(wideScreen, 0, wideScreen.Length);
        }

        private static void WriteDarkFilterData(FileStream fileStream, uint offset, byte darkFilter)
        {
            fileStream.Position = offset + 0x08; // Dark filter
            fileStream.WriteByte(darkFilter);
        }

        private static void ApplyIniSettings(N64Conf config)
        {
            mvvm.msg = "Copying INI...";
            string mainRomPath = Directory.GetFiles(Path.Combine(baseRomPath, "content", "rom"))[0];
            string mainIni = Path.Combine(baseRomPath, "content", "config", $"{Path.GetFileName(mainRomPath)}.ini");

            if (config.INIBin == null)
            {
                if (config.INIPath == null)
                {
                    File.Delete(mainIni);
                    File.Copy(Path.Combine(toolsPath, "blank.ini"), mainIni);
                }
                else
                {
                    File.Delete(mainIni);
                    File.Copy(config.INIPath, mainIni);
                }
            }
            else
            {
                ReadFileFromBin(config.INIBin, "custom.ini");
                File.Delete(mainIni);
                File.Move("custom.ini", mainIni);
            }
        }

        private static void RPXCompOrDecomp(string rpxpath, bool comp)
        {
            var prefix = comp ? "-c" : "-d";
            using Process rpxtool = new Process();
            rpxtool.StartInfo.UseShellExecute = false;
            rpxtool.StartInfo.CreateNoWindow = true;
            rpxtool.StartInfo.FileName = Path.Combine(toolsPath, "wiiurpxtool.exe");
            rpxtool.StartInfo.Arguments = $"{prefix} \"{rpxpath}\"";

            rpxtool.Start();
            rpxtool.WaitForExit();
        }

        private static void ReadFileFromBin(byte[] bin, string output)
        {
            File.WriteAllBytes(output, bin);
        }
        private static void Images(GameConfig config)
        {
            bool usetemp = false;
            bool readbin = false;
            try
            {
                //is an image embedded? yes => export them and check for issues
                //no => using path
                if (Directory.Exists(imgPath)) // sanity check
                    Directory.Delete(imgPath, true);

                Directory.CreateDirectory(imgPath);
                //ICON
                List<bool> Images = new List<bool>();
                if (config.TGAIco.ImgBin == null)
                {
                    //use path
                    if (config.TGAIco.ImgPath != null)
                    {
                        Images.Add(true);
                        CopyAndConvertImage(config.TGAIco.ImgPath, Path.Combine(imgPath), false, 128, 128, 32, "iconTex.tga");
                    }
                    else
                    {
                        if (File.Exists(Path.Combine(toolsPath, "iconTex.tga")))
                        {
                            CopyAndConvertImage(Path.Combine(toolsPath, "iconTex.tga"), Path.Combine(imgPath), false, 128, 128, 32, "iconTex.tga");
                            Images.Add(true);
                        }
                        else
                            Images.Add(false);

                    }
                }
                else
                {
                    ReadFileFromBin(config.TGAIco.ImgBin, $"iconTex.{config.TGAIco.extension}");
                    CopyAndConvertImage($"iconTex.{config.TGAIco.extension}", Path.Combine(imgPath), true, 128, 128, 32, "iconTex.tga");
                    Images.Add(true);
                }
                if (config.TGATv.ImgBin == null)
                {
                    //use path
                    if (config.TGATv.ImgPath != null)
                    {
                        Images.Add(true);
                        CopyAndConvertImage(config.TGATv.ImgPath, Path.Combine(imgPath), false, 1280, 720, 24, "bootTvTex.tga");
                        config.TGATv.ImgPath = Path.Combine(imgPath, "bootTvTex.tga");
                    }
                    else
                    {
                        if (File.Exists(Path.Combine(toolsPath, "bootTvTex.png")))
                        {
                            CopyAndConvertImage(Path.Combine(toolsPath, "bootTvTex.png"), Path.Combine(imgPath), false, 1280, 720, 24, "bootTvTex.tga");
                            usetemp = true;
                            Images.Add(true);

                        }
                        else
                        {
                            Images.Add(false);
                        }
                    }
                }
                else
                {
                    ReadFileFromBin(config.TGATv.ImgBin, $"bootTvTex.{config.TGATv.extension}");
          
Download .txt
gitextract_nzcsa59w/

├── .gitattributes
├── .gitignore
├── AnalysisReport.sarif
├── LICENSE
├── README.md
├── UWUVCI AIO WPF/
│   ├── App.config
│   ├── App.xaml
│   ├── App.xaml.cs
│   ├── AssemblyInfo1.cs
│   ├── Classes/
│   │   ├── BootImage.cs
│   │   ├── DeflickerDitheringRemover.cs
│   │   ├── Dol.cs
│   │   ├── GameConfig.cs
│   │   ├── GameCubeISO.cs
│   │   ├── Injection.cs
│   │   ├── KeyFile.cs
│   │   ├── MenuIconImage - Kopieren.cs
│   │   ├── MenuIconImage.cs
│   │   └── ToolCheck.cs
│   ├── FodyWeavers.xml
│   ├── FodyWeavers.xsd
│   ├── Font/
│   │   └── font.otf
│   ├── Helpers/
│   │   ├── ConsoleLoggerWriter.cs
│   │   ├── FileUtils.cs
│   │   ├── JsonSettingsManager.cs
│   │   ├── Logger.cs
│   │   └── MacLinuxHelper.cs
│   ├── ILLink/
│   │   └── ILLink.Descriptors.LibraryBuild.xml
│   ├── Models/
│   │   ├── BaseModel.cs
│   │   ├── DolSection.cs
│   │   ├── GctCode.cs
│   │   ├── JsonAppSettings.cs
│   │   ├── MainViewModel.cs
│   │   ├── N64Conf.cs
│   │   ├── PNGTGA.cs
│   │   ├── TKeys.cs
│   │   └── ToolStep.cs
│   ├── Properties/
│   │   ├── AssemblyInfo.cs
│   │   ├── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   ├── Settings.Designer.cs
│   │   └── Settings.settings
│   ├── Settings.cs
│   ├── UI/
│   │   ├── Done.xaml
│   │   ├── Done.xaml.cs
│   │   ├── Frames/
│   │   │   ├── InjectFrame.xaml
│   │   │   ├── InjectFrame.xaml.cs
│   │   │   ├── InjectFrames/
│   │   │   │   ├── Bases/
│   │   │   │   │   ├── BaseContainerFrame.xaml
│   │   │   │   │   ├── BaseContainerFrame.xaml.cs
│   │   │   │   │   ├── CustomBaseFrame.xaml
│   │   │   │   │   ├── CustomBaseFrame.xaml.cs
│   │   │   │   │   ├── NonCustomBaseFrame.xaml
│   │   │   │   │   └── NonCustomBaseFrame.xaml.cs
│   │   │   │   └── Configurations/
│   │   │   │       ├── BrightnessValidationRule.cs
│   │   │   │       ├── GBA.xaml
│   │   │   │       ├── GBA.xaml.cs
│   │   │   │       ├── GCConfig.xaml
│   │   │   │       ├── GCConfig.xaml.cs
│   │   │   │       ├── InverseBootConverter.cs
│   │   │   │       ├── N64Config.xaml
│   │   │   │       ├── N64Config.xaml.cs
│   │   │   │       ├── OtherConfigs.xaml
│   │   │   │       ├── OtherConfigs.xaml.cs
│   │   │   │       ├── PixelArtScalerValidationRule.cs
│   │   │   │       ├── TurboGrafX.xaml
│   │   │   │       ├── TurboGrafX.xaml.cs
│   │   │   │       ├── WiiConfig.xaml
│   │   │   │       └── WiiConfig.xaml.cs
│   │   │   ├── KeyFrame/
│   │   │   │   ├── TKFrame.xaml
│   │   │   │   └── TKFrame.xaml.cs
│   │   │   ├── Path/
│   │   │   │   ├── Paths.xaml
│   │   │   │   └── Paths.xaml.cs
│   │   │   ├── SettingsFrame.xaml
│   │   │   ├── SettingsFrame.xaml.cs
│   │   │   ├── StartFrame.xaml
│   │   │   └── StartFrame.xaml.cs
│   │   └── Windows/
│   │       ├── BaseGameWindow.xaml
│   │       ├── BaseGameWindow.xaml.cs
│   │       ├── CloseWindow.xaml
│   │       ├── CloseWindow.xaml.cs
│   │       ├── Custom Message - Kopieren.xaml
│   │       ├── Custom Message - Kopieren.xaml.cs
│   │       ├── Custom Message.xaml
│   │       ├── Custom Message.xaml.cs
│   │       ├── DownloadWait - Kopieren.xaml
│   │       ├── DownloadWait - Kopieren.xaml.cs
│   │       ├── DownloadWait.xaml
│   │       ├── DownloadWait.xaml.cs
│   │       ├── EnterKey.xaml
│   │       ├── EnterKey.xaml.cs
│   │       ├── GuideWindow.xaml
│   │       ├── GuideWindow.xaml.cs
│   │       ├── IMG_Message - Kopieren - Kopieren - Kopieren.xaml
│   │       ├── IMG_Message - Kopieren - Kopieren - Kopieren.xaml.cs
│   │       ├── IMG_Message - Kopieren - Kopieren.xaml
│   │       ├── IMG_Message - Kopieren - Kopieren.xaml.cs
│   │       ├── IMG_Message - Kopieren.xaml
│   │       ├── IMG_Message - Kopieren.xaml.cs
│   │       ├── IMG_Message.xaml
│   │       ├── IMG_Message.xaml.cs
│   │       ├── ImageCreator - Kopieren - Kopieren (2).xaml
│   │       ├── ImageCreator - Kopieren - Kopieren (2).xaml.cs
│   │       ├── ImageCreator - Kopieren - Kopieren.xaml
│   │       ├── ImageCreator - Kopieren - Kopieren.xaml.cs
│   │       ├── ImageCreator - Kopieren.xaml
│   │       ├── ImageCreator - Kopieren.xaml.cs
│   │       ├── ImageCreator.xaml
│   │       ├── ImageCreator.xaml.cs
│   │       ├── IntroductionWindow.xaml
│   │       ├── IntroductionWindow.xaml.cs
│   │       ├── MacLinuxWindow.xaml
│   │       ├── MacLinuxWindow.xaml.cs
│   │       ├── MenuWindow.xaml
│   │       ├── MenuWindow.xaml.cs
│   │       ├── TitleKeys - Kopieren.xaml
│   │       ├── TitleKeys - Kopieren.xaml.cs
│   │       ├── TitleKeys.xaml
│   │       └── TitleKeys.xaml.cs
│   ├── UWUVCI AIO WPF.csproj
│   ├── app.manifest
│   ├── packages.config
│   └── uwuvci_installer_creator/
│       ├── app/
│       │   └── Readme.txt
│       └── install_script.iss
├── UWUVCI AIO WPF.sln
└── upgrade-assistant.clef
Download .txt
SYMBOL INDEX (833 symbols across 67 files)

FILE: UWUVCI AIO WPF/App.xaml.cs
  class App (line 13) | public partial class App : Application
    method Application_Startup (line 21) | private void Application_Startup(object sender, StartupEventArgs e)
    method GlobalTextBox_PreviewDragOver (line 82) | private static void GlobalTextBox_PreviewDragOver(object sender, DragE...
    method IsRunningFromOneDrive (line 87) | private bool IsRunningFromOneDrive()
    method GlobalTextBox_PreviewDrop (line 93) | private static void GlobalTextBox_PreviewDrop(object sender, DragEvent...
    method LaunchMainApplication (line 186) | public void LaunchMainApplication()
    method LaunchMainApplication (line 191) | private void LaunchMainApplication(StartupEventArgs e)
    method KillProg (line 246) | private void KillProg(object sender, ElapsedEventArgs e)

FILE: UWUVCI AIO WPF/Classes/BootImage.cs
  class BootImage (line 10) | public class BootImage : IDisposable
    method BootImage (line 41) | public BootImage()
    method Dispose (line 55) | public void Dispose()
    method Dispose (line 61) | protected virtual void Dispose(bool disposing)
    method ContainsJapanese (line 74) | private bool ContainsJapanese(string text)
    method GetFont (line 87) | private Font GetFont()
    method GetRectangleForConsole (line 101) | private Rectangle GetRectangleForConsole(string console)
    method DrawText (line 115) | private void DrawText(Graphics g, string text, Font font, Rectangle re...
    method Create (line 126) | public Bitmap Create(string console)

FILE: UWUVCI AIO WPF/Classes/DeflickerDitheringRemover.cs
  class DeflickerDitheringRemover (line 6) | public static class DeflickerDitheringRemover
    method ProcessFile (line 70) | public static void ProcessFile(string inputFilePath, string outputFile...
    method ApplyDeflickerPatch (line 98) | private static void ApplyDeflickerPatch(byte[] buffer)
    method ApplyDitheringPatch (line 115) | private static void ApplyDitheringPatch(byte[] buffer)
    method ApplyVFilterPatch (line 127) | private static void ApplyVFilterPatch(byte[] buffer)
    method IsMatch (line 137) | private static bool IsMatch(byte[] buffer, int position, byte[] pattern)
    method AreFilesDifferent (line 145) | public static bool AreFilesDifferent(string filePath1, string filePath2)

FILE: UWUVCI AIO WPF/Classes/Dol.cs
  class Dol (line 10) | public class Dol
    method ApplyMultipleFilesToDol (line 12) | public void ApplyMultipleFilesToDol(IEnumerable<string> filePaths, str...
    method PatchDolFile (line 52) | public void PatchDolFile(string dolFilePath, List<GctCode> gctCodes)
    method ValidateCodes (line 97) | private bool ValidateCodes(List<GctCode> codes, string dolFilePath)
    method MemoryToDolOffset (line 120) | public int MemoryToDolOffset(uint memoryAddress, List<DolSection> sect...
    method InjectCodehandler (line 140) | public void InjectCodehandler(string dolFilePath, string codehandlerPath)
    method PatchDolEntryPoint (line 180) | private void PatchDolEntryPoint(byte[] dolData, int injectionOffset)
    method FindFreeSpace (line 187) | private int FindFreeSpace(byte[] fileData, int requiredSize)

FILE: UWUVCI AIO WPF/Classes/GameConfig.cs
  class GameConfig (line 7) | [Serializable]
    method Clone (line 10) | public GameConfig Clone()

FILE: UWUVCI AIO WPF/Classes/GameCubeISO.cs
  class GameCubeISO (line 7) | public class GameCubeISO
    method GameCubeISO (line 13) | public GameCubeISO(string isoPath)
    method Extract (line 23) | public void Extract(string outputPath)
    method Rebuild (line 56) | public void Rebuild(string extractedPath, string outputIsoPath)
    method ParseTOCFromFile (line 114) | private List<TOCItem> ParseTOCFromFile(string tocPath)
    method WriteSystemFile (line 148) | private void WriteSystemFile(BinaryWriter writer, string filePath)
    method WriteGameFile (line 161) | private void WriteGameFile(BinaryWriter writer, string filePath, long ...
    method AlignToBlock (line 177) | private long AlignToBlock(long value, int blockSize)
    method ReadNullTerminatedString (line 185) | private string ReadNullTerminatedString(BinaryReader reader)
  class TOCManager (line 195) | public class TOCManager
    method ExtractFiles (line 199) | public void ExtractFiles(BinaryReader reader, string outputDirectory)
  class TOCItem (line 235) | public class TOCItem

FILE: UWUVCI AIO WPF/Classes/Injection.cs
  class StringExtensions (line 28) | public static class StringExtensions
    method ToHex (line 30) | public static string ToHex(this string input)
  class Injection (line 38) | internal static class Injection
    method SetForegroundWindow (line 40) | [DllImport("User32.dll")]
    method SendMessage (line 42) | [DllImport("user32.dll")]
    method PostMessage (line 49) | [return: MarshalAs(UnmanagedType.Bool)]
    method fiind (line 75) | static List<int> fiind(this byte[] buffer, byte[] pattern, int startIn...
    method PokePatch (line 89) | static void PokePatch(string rom)
    method FormatBytes (line 146) | private static string FormatBytes(long bytes)
    method Inject (line 158) | [STAThread]
    method tick (line 308) | private static void tick(object sender, EventArgs e)
    method SendKey (line 316) | public static void SendKey(IntPtr hWnd, System.Windows.Forms.Keys key)
    method bootsound (line 320) | static void bootsound(string sound)
    method wav2btsnd (line 348) | private static void wav2btsnd(string inputWav, string outputBtsnd)
    method timer_Tick (line 360) | static void timer_Tick(object sender, EventArgs e)
    method RunSpecificInjection (line 366) | private static void RunSpecificInjection(GameConfig cfg, GameConsoles ...
    method ByteArrayToString (line 407) | private static string ByteArrayToString(byte[] arr)
    method WiiForwarder (line 412) | private static void WiiForwarder(string romPath, MainViewModel mvm)
    method SharedWitAndNFS2ISO2NFS (line 445) | private static void SharedWitAndNFS2ISO2NFS(string savedir, MainViewMo...
    method WiiHomebrew (line 567) | private static void WiiHomebrew(string romPath, MainViewModel mvm)
    method PatchDol (line 588) | private static void PatchDol(string consoleName, string mainDolPath, M...
    method GctPatch (line 658) | private static void GctPatch(MainViewModel mvm, string consoleName, st...
    method WII (line 675) | private static void WII(string romPath, MainViewModel mvm)
    method ConvertToIso (line 944) | private static void ConvertToIso(string sourcePath, string outputFileN...
    method ConvertToNKit (line 963) | private static void ConvertToNKit(string sourcePath, string outputFile...
    method GC (line 981) | private static void GC(string romPath, MainViewModel mvm, bool force)
    method Zesty_GC (line 1315) | private static void Zesty_GC(string romPath, MainViewModel mvm, bool f...
    method MSX (line 1379) | public static void MSX(string injectRomPath)
    method DeleteDirectory (line 1428) | public static void DeleteDirectory(string path)
    method Clean (line 1447) | public static void Clean()
    method Loadiine (line 1452) | [STAThread]
    method Packing (line 1482) | [STAThread]
    method Download (line 1536) | public static void Download(MainViewModel mvm)
    method ExtractBase (line 1580) | public static string ExtractBase(string path, GameConsoles console)
    method EditXML (line 1596) | private static void EditXML(string gameNameOr, int index, string code)
    method CopyBase (line 1689) | private static void CopyBase(string baserom, string customPath)
    method TG16 (line 1700) | private static void TG16(string injectRomPath)
    method NESSNES (line 1741) | private static void NESSNES(string injectRomPath)
    method GBA (line 1789) | private static void GBA(string injectRomPath, N64Conf config)
    method RunProcess (line 1934) | private static void RunProcess(string fileName, string arguments, bool...
    method NDS (line 1954) | private static void NDS(string injectRomPath)
    method UpdateConfigurationCafeJson (line 1989) | private static void UpdateConfigurationCafeJson()
    method GetRomNameFromZip (line 2008) | private static string GetRomNameFromZip()
    method ReplaceRomWithInjected (line 2028) | private static void ReplaceRomWithInjected(string romName, string inje...
    method RecompressRom (line 2043) | private static void RecompressRom(string romName)
    method N64 (line 2056) | private static void N64(string injectRomPath, N64Conf config)
    method InjectRom (line 2075) | private static void InjectRom(string injectRomPath)
    method ApplyCustomSettings (line 2090) | private static void ApplyCustomSettings(N64Conf config)
    method WriteFrameData (line 2159) | private static void WriteFrameData(FileStream fileStream, uint offset,...
    method WriteDarkFilterData (line 2177) | private static void WriteDarkFilterData(FileStream fileStream, uint of...
    method ApplyIniSettings (line 2183) | private static void ApplyIniSettings(N64Conf config)
    method RPXCompOrDecomp (line 2210) | private static void RPXCompOrDecomp(string rpxpath, bool comp)
    method ReadFileFromBin (line 2223) | private static void ReadFileFromBin(byte[] bin, string output)
    method Images (line 2227) | private static void Images(GameConfig config)
    method PrepareImageDirectory (line 2460) | private static void PrepareImageDirectory()
    method HandleImage (line 2468) | private static bool HandleImage(PNGTGA imgConfig, string fileName, str...
    method HandleDrcImage (line 2494) | private static bool HandleDrcImage(GameConfig config, bool hasTvImage)
    method ConvertTvImageToDrc (line 2518) | private static void ConvertTvImageToDrc(GameConfig config)
    method VerifyAndInjectImages (line 2543) | private static void VerifyAndInjectImages(bool hasIconImage, bool hasT...
    method MoveProcessedImages (line 2576) | private static void MoveProcessedImages(bool hasIconImage, bool hasTvI...
    method CopyAndConvertImage (line 2619) | private static void CopyAndConvertImage(string inputPath, string outpu...
    method RemoveHeader (line 2652) | private static string RemoveHeader(string filePath)
    method DirectoryCopy (line 2674) | public static void DirectoryCopy(string sourceDirName, string destDirN...

FILE: UWUVCI AIO WPF/Classes/KeyFile.cs
  class KeyFile (line 12) | class KeyFile
    method ReadBasesFromKeyFile (line 14) | public static List<TKeys> ReadBasesFromKeyFile(string keyPath)
    method ExportFile (line 40) | public static void ExportFile(List<TKeys> keys, GameConsoles console)
    method CheckAndFixFolder (line 63) | private static void CheckAndFixFolder(string folderPath)

FILE: UWUVCI AIO WPF/Classes/MenuIconImage - Kopieren.cs
  class BootLogoImage (line 9) | public class BootLogoImage : IDisposable
    method BootLogoImage (line 19) | static BootLogoImage()
    method BootLogoImage (line 44) | public BootLogoImage()
    method Dispose (line 50) | public void Dispose()
    method Dispose (line 56) | protected virtual void Dispose(bool disposing)
    method Create (line 69) | public Bitmap Create(string text, float fontsize)

FILE: UWUVCI AIO WPF/Classes/MenuIconImage.cs
  class MenuIconImage (line 8) | public class MenuIconImage : IDisposable
    method Dispose (line 41) | public void Dispose()
    method Dispose (line 47) | protected virtual void Dispose(bool disposing)
    method Create (line 60) | public Bitmap Create(string console)

FILE: UWUVCI AIO WPF/Classes/ToolCheck.cs
  class ToolCheck (line 11) | class ToolCheck
    method DoesToolsFolderExist (line 65) | public static bool DoesToolsFolderExist()
    method IsToolRight (line 77) | public static bool IsToolRight(string name)
    method CalculateMD5 (line 104) | public static string CalculateMD5(string filename)
    method CheckForMissingTools (line 113) | public static List<MissingTool> CheckForMissingTools()
    method DoesToolExist (line 130) | private static bool DoesToolExist(string path, int retryCount = 0)
  class MissingTool (line 165) | public class MissingTool
    method MissingTool (line 170) | public MissingTool(string n, string p)

FILE: UWUVCI AIO WPF/Helpers/ConsoleLoggerWriter.cs
  class ConsoleLoggerWriter (line 7) | public class ConsoleLoggerWriter : TextWriter
    method ConsoleLoggerWriter (line 11) | public ConsoleLoggerWriter()
    method WriteLine (line 18) | public override void WriteLine(string message)
    method WriteLine (line 27) | public override void WriteLine(string format, params object[] arg)

FILE: UWUVCI AIO WPF/Helpers/FileUtils.cs
  class FileUtils (line 3) | public static class FileUtils
    method FindFreeSpace (line 5) | public static int FindFreeSpace(byte[] fileData, int requiredSize)

FILE: UWUVCI AIO WPF/Helpers/JsonSettingsManager.cs
  class JsonSettingsManager (line 8) | public class JsonSettingsManager
    method LoadSettings (line 18) | public static void LoadSettings()
    method SaveSettings (line 51) | public static void SaveSettings()
    method IsFileWritable (line 96) | public static bool IsFileWritable(string path)

FILE: UWUVCI AIO WPF/Helpers/Logger.cs
  class Logger (line 6) | public static class Logger
    method Logger (line 11) | static Logger()
    method Log (line 32) | public static void Log(string message)
    method CleanupOldLogs (line 45) | private static void CleanupOldLogs(int daysToKeep)

FILE: UWUVCI AIO WPF/Helpers/MacLinuxHelper.cs
  class MacLinuxHelper (line 14) | public class MacLinuxHelper
    method WriteFailedStepToJson (line 23) | public static void WriteFailedStepToJson(string functionName, string t...
    method DisplayMessageBoxAboutTheHelper (line 48) | public static void DisplayMessageBoxAboutTheHelper()
    method PrepareAndInformUserOnUWUVCIHelper (line 66) | public static void PrepareAndInformUserOnUWUVCIHelper(string functionN...
    method IsRunningUnderWineOrSimilar (line 72) | public static bool IsRunningUnderWineOrSimilar()
    method IsRunningInVirtualMachine (line 146) | public static bool IsRunningInVirtualMachine()

FILE: UWUVCI AIO WPF/Models/BaseModel.cs
  class BaseModel (line 7) | [Serializable]
    method OnPropertyChanged (line 15) | protected void OnPropertyChanged([CallerMemberName]string propertyName...

FILE: UWUVCI AIO WPF/Models/DolSection.cs
  class DolSection (line 6) | public class DolSection
    method ReadDolHeader (line 12) | public static List<DolSection> ReadDolHeader(string dolFilePath)

FILE: UWUVCI AIO WPF/Models/GctCode.cs
  class GctCode (line 10) | public class GctCode
    method GctCode (line 15) | public GctCode(uint address, uint value)
    method LoadFromFile (line 22) | public static List<GctCode> LoadFromFile(string filePath)
    method ParseGctFile (line 34) | public static List<GctCode> ParseGctFile(string gctFilePath)
    method ParseOcarinaOrDolphinTxtFile (line 56) | public static (List<GctCode>, string) ParseOcarinaOrDolphinTxtFile(str...
    method ParseCodeBlock (line 134) | private static List<GctCode> ParseCodeBlock(string codeName, List<stri...
    method WriteGctFile (line 157) | public static void WriteGctFile(string gctFilePath, List<GctCode> code...

FILE: UWUVCI AIO WPF/Models/JsonAppSettings.cs
  class JsonAppSettings (line 3) | public class JsonAppSettings

FILE: UWUVCI AIO WPF/Models/MainViewModel.cs
  class MainViewModel (line 32) | public class MainViewModel : BaseModel
    method ReadCkeyFromOtp (line 233) | public string ReadCkeyFromOtp()
    method RemoveCreatedIMG (line 276) | public void RemoveCreatedIMG()
    method IsIsoNkit (line 284) | public void IsIsoNkit()
    method CheckTime (line 296) | public bool CheckTime(DateTime creationTime)
    method Update (line 507) | public void Update(bool button)
    method GetNewVersion (line 563) | private int GetNewVersion()
    method ConfirmRiffWave (line 588) | public bool ConfirmRiffWave(string path)
    method OpenDialog (line 599) | public void OpenDialog(string title, string msg)
    method MainViewModel (line 609) | public MainViewModel()
    method CleanUpFolders (line 651) | private void CleanUpFolders()
    method InitializePaths (line 673) | private void InitializePaths()
    method turbocd (line 683) | public string turbocd()
    method resetCBASE (line 756) | public void resetCBASE()
    method removeCBASE (line 760) | public void removeCBASE()
    method setThing (line 764) | public void setThing(Page T)
    method SetCBASE (line 768) | public void SetCBASE(CustomBaseFrame cbs)
    method setMW (line 772) | public void setMW(MainWindow mwi)
    method ExportFile (line 777) | public void ExportFile()
    method ImportConfig (line 892) | public void ImportConfig(string configPath)
    method ReadBootSoundIntoConfig (line 949) | public void ReadBootSoundIntoConfig()
    method ReadImagesIntoConfig (line 954) | public void ReadImagesIntoConfig()
    method ReadIniIntoConfig (line 961) | public void ReadIniIntoConfig()
    method ReadFileAsBin (line 966) | private void ReadFileAsBin(GameConfig file, string FilePath, int scase)
    method CheckAndFixConfigFolder (line 1034) | private static void CheckAndFixConfigFolder()
    method Pack (line 1039) | public void Pack(bool loadiine)
    method ClearImage (line 1104) | private void ClearImage()
    method runInjectThread (line 1180) | public void runInjectThread(bool force)
    method Inject (line 1206) | public void Inject(bool force)
    method BaseCheck (line 1257) | private void BaseCheck()
    method UpdateTools (line 1343) | public void UpdateTools()
    method ResetTKQuest (line 1409) | public void ResetTKQuest()
    method ResetTitleKeys (line 1421) | public void ResetTitleKeys()
    method UpdateBases (line 1454) | public void UpdateBases()
    method GetDeterministicHashCode (line 1515) | public static int GetDeterministicHashCode(string str)
    method checkSysKey (line 1533) | public bool checkSysKey(string key)
    method SysKey1set (line 1543) | public bool SysKey1set()
    method checkSysKey1 (line 1547) | public bool checkSysKey1(string key)
    method SysKeyset (line 1557) | public bool SysKeyset()
    method GetConsoleOfConfig (line 1561) | public bool GetConsoleOfConfig(string configPath, GameConsoles console)
    method selectConfig (line 1575) | public void selectConfig(GameConsoles console)
    method RemoteFileExists (line 1611) | private bool RemoteFileExists(string url)
    method GetFilePath (line 1627) | public string GetFilePath(bool ROM, bool INI)
    method CopyBase (line 1751) | private static void CopyBase(string console)
    method DeleteTool (line 1757) | private static void DeleteTool(string tool)
    method DeleteBase (line 1767) | private static void DeleteBase(string console)
    method GetMissingVCBs (line 1771) | public static List<string> GetMissingVCBs()
    method DownloadBase (line 1802) | public static void DownloadBase(string name, MainViewModel mvm)
    method DownloadTool (line 1831) | public static void DownloadTool(string name, MainViewModel mvm)
    method getDownloadLink (line 1867) | private static string getDownloadLink(string toolname, bool tool)
    method InjcttoolCheck (line 1924) | public void InjcttoolCheck()
    method ThreadDownload (line 1944) | private void ThreadDownload(List<MissingTool> missingTools)
    method timer_Tick2 (line 1967) | private void timer_Tick2(object sender, EventArgs e)
    method toolCheck (line 1977) | private void toolCheck(int currentRetry = 0)
    method ShowDownloadWaitDialog (line 2023) | private void ShowDownloadWaitDialog()
    method ShowMessage (line 2038) | private void ShowMessage(string title, string message)
    method UpdatePathSet (line 2049) | public void UpdatePathSet()
    method ValidatePathsStillExist (line 2060) | public bool ValidatePathsStillExist()
    method EnsureDirectoryExists (line 2080) | private bool EnsureDirectoryExists(ref string path, string defaultSubDir)
    method GetBases (line 2091) | public void GetBases(GameConsoles console)
    method getBasefromName (line 2104) | public GameBases getBasefromName(string name)
    method GetAllBases (line 2114) | private void GetAllBases()
    method CreateSettingIfNotExist (line 2143) | private void CreateSettingIfNotExist(List<GameBases> basesList, GameCo...
    method FixupKeys (line 2155) | private void FixupKeys(List<GameBases> basesList, GameConsoles console)
    method UpdateKeyFile (line 2168) | private void UpdateKeyFile(List<GameBases> basesList, GameConsoles con...
    method getTempList (line 2185) | public void getTempList(GameConsoles console)
    method EnterKey (line 2202) | public void EnterKey(bool ck)
    method checkcKey (line 2212) | public bool checkcKey(string key)
    method isCkeySet (line 2228) | public bool isCkeySet()
    method checkKey (line 2235) | public bool checkKey(string key)
    method UpdateKeyInFile (line 2248) | public void UpdateKeyInFile(string key, string file, GameBases baseGam...
    method isKeySet (line 2262) | public bool isKeySet(GameBases baseGame)
    method ImageWarning (line 2268) | public void ImageWarning()
    method CBaseConvertInfo (line 2280) | public bool CBaseConvertInfo()
    method getTkey (line 2297) | public TKeys getTkey(GameBases baseGame)
    method Download (line 2303) | public void Download()
    method TestDownloadSpeed (line 2336) | private double TestDownloadSpeed()
    method CalculateEstimatedTime (line 2360) | private TimeSpan CalculateEstimatedTime(double speedInMBps)
    method GetConsoleOfBase (line 2372) | public GameConsoles GetConsoleOfBase(GameBases gb)
    method getInfoOfBase (line 2393) | public List<bool> getInfoOfBase(GameBases gb)
    method SetInjectPath (line 2404) | public void SetInjectPath()
    method SetFolderPath (line 2412) | private void SetFolderPath(Action<string> setPathAction, bool setOnceF...
    method PromptUserForFolderSelection (line 2437) | private void PromptUserForFolderSelection(string folderPath, Action<st...
    method HandleError (line 2456) | private void HandleError(Exception e)
    method SetBasePath (line 2464) | public void SetBasePath()
    method ArePathsSet (line 2472) | public void ArePathsSet()
    method DirectoryIsEmpty (line 2482) | public bool DirectoryIsEmpty(string path)
    method getBootIMGGBA (line 2487) | public void getBootIMGGBA(string rom)
    method getBootIMGSNES (line 2530) | public void getBootIMGSNES(string rom)
    method getBootIMGMSX (line 2554) | public void getBootIMGMSX(string rom)
    method getBootIMGTG (line 2577) | public void getBootIMGTG(string rom)
    method GetFakeMSXTGProdcode (line 2600) | private string GetFakeMSXTGProdcode(string v, bool msx)
    method GetFakeSNESProdcode (line 2639) | private string GetFakeSNESProdcode(string path)
    method GetFakeNESProdcode (line 2700) | private string GetFakeNESProdcode(string path)
    method FetchAndProcessRepoImages (line 2736) | private void FetchAndProcessRepoImages(string systemType, string repoi...
    method getBootIMGNES (line 2745) | public void getBootIMGNES(string rom)
    method getBootIMGNDS (line 2765) | public void getBootIMGNDS(string rom)
    method getBootIMGN64 (line 2809) | public void getBootIMGN64(string rom)
    method GetMd5Hash (line 2846) | static string GetMd5Hash(MD5 md5Hash, byte[] input)
    method GetMd5Hash (line 2854) | static string GetMd5Hash(MD5 md5Hash, string input)
    method ConvertByteArrayToHexString (line 2862) | private static string ConvertByteArrayToHexString(byte[] data)
    method getCodeOfNumbers (line 2874) | static string getCodeOfNumbers(int number)
    method ByteArrayToString (line 2911) | private string ByteArrayToString(byte[] arr)
    method getInternalWIIGCNName (line 2916) | public string getInternalWIIGCNName(string OpenGame, bool gc)
    method CheckForInternetConnection (line 2973) | public bool CheckForInternetConnection()
    method ShowNoInternetConnectionMessage (line 3001) | private void ShowNoInternetConnectionMessage()
    method CheckForInternetConnectionWOWarning (line 3017) | public bool CheckForInternetConnectionWOWarning()
    method checkForAdditionalFiles (line 3044) | private void checkForAdditionalFiles(GameConsoles console, List<string...
    method TryFindFileInRepo (line 3091) | private bool TryFindFileInRepo(List<string> repoids, string linkbase, ...
    method GetAdditionalFilesMessage (line 3109) | private string GetAdditionalFilesMessage(bool iniFound, bool bootSound...
    method SetWindowOwner (line 3125) | private void SetWindowOwner(Custom_Message window)
    method DownloadAdditionalFiles (line 3146) | private void DownloadAdditionalFiles(bool iniFound, string iniUrl, boo...
    method GetURL (line 3192) | public string GetURL(string console)
    method PlaySound (line 3207) | public void PlaySound()
    method isDoneMW (line 3227) | public void isDoneMW()
    method isDone (line 3242) | public void isDone(object source, ElapsedEventArgs e)
    method RestartIntoBypass (line 3261) | public void RestartIntoBypass()
    method GetRepoImages (line 3276) | private void GetRepoImages(string SystemType, string repoid, List<stri...
    method GenerateRepoIds (line 3306) | private List<string> GenerateRepoIds(string SystemType, string repoid)
    method HandleImageLoading (line 3330) | private void HandleImageLoading(string imageUrl, string extension, str...
    method ShowTgaWarning (line 3351) | private void ShowTgaWarning()

FILE: UWUVCI AIO WPF/Models/N64Conf.cs
  class N64Conf (line 6) | [Serializable]

FILE: UWUVCI AIO WPF/Models/PNGTGA.cs
  class PNGTGA (line 5) | [Serializable]

FILE: UWUVCI AIO WPF/Models/TKeys.cs
  class TKeys (line 6) | [Serializable]

FILE: UWUVCI AIO WPF/Models/ToolStep.cs
  class ToolStep (line 3) | public class ToolStep

FILE: UWUVCI AIO WPF/Properties/Resources.Designer.cs
  class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: UWUVCI AIO WPF/Properties/Settings.Designer.cs
  class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

FILE: UWUVCI AIO WPF/Settings.cs
  class Settings (line 9) | internal sealed partial class Settings {
    method Settings (line 11) | public Settings() {
    method SettingChangingEventHandler (line 20) | private void SettingChangingEventHandler(object sender, System.Configu...
    method SettingsSavingEventHandler (line 24) | private void SettingsSavingEventHandler(object sender, System.Componen...

FILE: UWUVCI AIO WPF/UI/Done.xaml.cs
  class Done (line 8) | public partial class Done : Page
    method Done (line 10) | public Done()

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrame.xaml.cs
  class INJECTFRAME (line 10) | public partial class INJECTFRAME : Page, IDisposable
    method INJECTFRAME (line 14) | public INJECTFRAME(GameConsoles console)
    method INJECTFRAME (line 50) | public INJECTFRAME(GameConsoles console, GameConfig c)
    method Dispose (line 84) | public void Dispose()
    method Button_Click (line 89) | private void Button_Click(object sender, RoutedEventArgs e)
    method Button_Click_1 (line 98) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method Button_Click_2 (line 104) | private void Button_Click_2(object sender, RoutedEventArgs e)
    method Button_Click_3 (line 110) | private void Button_Click_3(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/BaseContainerFrame.xaml.cs
  class BaseContainerFrame (line 12) | public partial class BaseContainerFrame : Page
    method BaseContainerFrame (line 17) | public BaseContainerFrame(GameConsoles console)
    method ComboBox_SelectionChanged (line 47) | private void ComboBox_SelectionChanged(object sender, SelectionChanged...
    method id_Click (line 79) | private void id_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/CustomBaseFrame.xaml.cs
  class CustomBaseFrame (line 15) | public partial class CustomBaseFrame : Page
    method CustomBaseFrame (line 21) | public CustomBaseFrame(GameBases Base, GameConsoles console, bool exis...
    method Button_Click (line 45) | private void Button_Click(object sender, RoutedEventArgs e)
    method Reset (line 201) | public void Reset()
    method CK_Click (line 212) | private void CK_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/NonCustomBaseFrame.xaml.cs
  class NonCustomBaseFrame (line 14) | public partial class NonCustomBaseFrame : Page
    method NonCustomBaseFrame (line 21) | public NonCustomBaseFrame(GameBases Base, GameConsoles console, bool e...
    method NonCustomBaseFrame (line 33) | public NonCustomBaseFrame()
    method createConfig (line 39) | private void createConfig(GameBases Base, GameConsoles console)
    method checkStuff (line 46) | private void checkStuff(List<bool> info)
    method btnDwnlnd_Click (line 94) | private void btnDwnlnd_Click(object sender, RoutedEventArgs e)
    method btnDwnlnd_Copy_Click (line 105) | private void btnDwnlnd_Copy_Click(object sender, RoutedEventArgs e)
    method btnDwnlnd_Copy1_Click (line 112) | private void btnDwnlnd_Copy1_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/BrightnessValidationRule.cs
  class BrightnessValidationRule (line 6) | public class BrightnessValidationRule : ValidationRule
    method Validate (line 8) | public override ValidationResult Validate(object value, CultureInfo cu...

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/GBA.xaml.cs
  class GBA (line 15) | public partial class GBA : Page, IDisposable
    method GBA (line 19) | public GBA()
    method clearImages (line 31) | public void clearImages(int i)
    method SoundImg_MouseLeftButtonDown (line 58) | private void SoundImg_MouseLeftButtonDown(object sender, MouseButtonEv...
    method sound_TextChanged (line 63) | private void sound_TextChanged(object sender, TextChangedEventArgs e)
    method GBA (line 86) | public GBA(GameConfig c)
    method Dispose (line 96) | public void Dispose()
    method Set_Rom_Path (line 101) | private void Set_Rom_Path(object sender, RoutedEventArgs e)
    method InjectGame (line 126) | private void InjectGame(object sender, RoutedEventArgs e)
    method Set_TvTex (line 167) | private void Set_TvTex(object sender, RoutedEventArgs e)
    method Set_DrcTex (line 212) | private void Set_DrcTex(object sender, RoutedEventArgs e)
    method Set_IconTex (line 256) | private void Set_IconTex(object sender, RoutedEventArgs e)
    method Set_LogoTex (line 298) | private void Set_LogoTex(object sender, RoutedEventArgs e)
    method getInfoFromConfig (line 323) | public void getInfoFromConfig()
    method CheckIfNull (line 370) | private bool CheckIfNull(string s)
    method gn_KeyUp (line 381) | private void gn_KeyUp(object sender, KeyEventArgs e)
    method reset (line 397) | public void reset()
    method RadioButton_Click (line 407) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method rbRDF_Click (line 412) | private void rbRDF_Click(object sender, RoutedEventArgs e)
    method icoIMG_MouseLeftButtonDown (line 416) | private void icoIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method tvIMG_MouseLeftButtonDown (line 430) | private void tvIMG_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method drcIMG_MouseLeftButtonDown (line 444) | private void drcIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method logIMG_MouseLeftButtonDown (line 459) | private void logIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method imgpath (line 472) | public void imgpath(string icon, string tv)
    method Button_Click (line 481) | private void Button_Click(object sender, RoutedEventArgs e)
    method Image_MouseLeftButtonDown (line 523) | private void Image_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method Button_Click_1 (line 555) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method gn_TextChanged (line 586) | private void gn_TextChanged(object sender, TextChangedEventArgs e)
    method rbRDF_GBA_Click (line 597) | private void rbRDF_GBA_Click(object sender, RoutedEventArgs e)
    method rbREF_GBA_Click (line 602) | private void rbREF_GBA_Click(object sender, RoutedEventArgs e)
    method RbREF_GBA_Checked (line 607) | private void RbREF_GBA_Checked(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/GCConfig.xaml.cs
  class GCConfig (line 18) | public partial class GCConfig : Page, IDisposable
    method GCConfig (line 22) | public GCConfig()
    method clearImages (line 31) | public void clearImages(int i)
    method SoundImg_MouseLeftButtonDown (line 58) | private void SoundImg_MouseLeftButtonDown(object sender, MouseButtonEv...
    method sound_TextChanged (line 63) | private void sound_TextChanged(object sender, TextChangedEventArgs e)
    method GCConfig (line 86) | public GCConfig(GameConfig c)
    method Dispose (line 96) | public void Dispose()
    method GCConfig_PreviewDragOver (line 100) | private void GCConfig_PreviewDragOver(object sender, DragEventArgs e)
    method GCConfig_PreviewDrop (line 105) | private void GCConfig_PreviewDrop(object sender, DragEventArgs e)
    method imgpath (line 173) | public void imgpath(string icon, string tv)
    method Set_Rom_Path (line 178) | private void Set_Rom_Path(object sender, RoutedEventArgs e)
    method PostRomPath (line 184) | private void PostRomPath(string path)
    method InjectGame (line 257) | private void InjectGame(object sender, RoutedEventArgs e)
    method Set_TvTex (line 301) | private void Set_TvTex(object sender, RoutedEventArgs e)
    method Set_DrcTex (line 326) | private void Set_DrcTex(object sender, RoutedEventArgs e)
    method Set_IconTex (line 351) | private void Set_IconTex(object sender, RoutedEventArgs e)
    method Set_LogoTex (line 376) | private void Set_LogoTex(object sender, RoutedEventArgs e)
    method getInfoFromConfig (line 400) | public void getInfoFromConfig()
    method CheckIfNull (line 465) | private bool CheckIfNull(string s)
    method CheckBox_Click (line 474) | private void CheckBox_Click(object sender, RoutedEventArgs e)
    method gn_KeyUp (line 481) | private void gn_KeyUp(object sender, KeyEventArgs e)
    method CheckBox_Click_1 (line 498) | private void CheckBox_Click_1(object sender, RoutedEventArgs e)
    method Button_Click (line 510) | private void Button_Click(object sender, RoutedEventArgs e)
    method reset (line 521) | public void reset()
    method icoIMG_MouseLeftButtonDown (line 530) | private void icoIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method tvIMG_MouseLeftButtonDown (line 544) | private void tvIMG_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method drcIMG_MouseLeftButtonDown (line 558) | private void drcIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method logIMG_MouseLeftButtonDown (line 573) | private void logIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method ic_TextChanged (line 587) | private void ic_TextChanged(object sender, TextChangedEventArgs e)
    method drc_TextChanged (line 599) | private void drc_TextChanged(object sender, TextChangedEventArgs e)
    method tv_TextChanged (line 612) | private void tv_TextChanged(object sender, TextChangedEventArgs e)
    method log_TextChanged (line 624) | private void log_TextChanged(object sender, TextChangedEventArgs e)
    method Button_Click_1 (line 636) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method Image_MouseLeftButtonDown (line 678) | private void Image_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method Button_Click_2 (line 714) | private void Button_Click_2(object sender, RoutedEventArgs e)
    method trimn_Click (line 745) | private void trimn_Click(object sender, RoutedEventArgs e)
    method gn_TextChanged (line 759) | private void gn_TextChanged(object sender, TextChangedEventArgs e)
    method GetGCTFilePaths (line 792) | private string GetGCTFilePaths()

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/InverseBootConverter.cs
  class InverseBoolConverter (line 7) | public class InverseBoolConverter : IValueConverter
    method Convert (line 9) | public object Convert(object value, Type targetType, object parameter,...
    method ConvertBack (line 17) | public object ConvertBack(object value, Type targetType, object parame...

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/N64Config.xaml.cs
  class N64Config (line 16) | public partial class N64Config : Page
    method N64Config (line 20) | public N64Config()
    method SoundImg_MouseLeftButtonDown (line 29) | private void SoundImg_MouseLeftButtonDown(object sender, MouseButtonEv...
    method sound_TextChanged (line 34) | private void sound_TextChanged(object sender, TextChangedEventArgs e)
    method N64Config (line 57) | public N64Config(GameConfig c)
    method imgpath (line 66) | public void imgpath(string icon, string tv)
    method Set_Rom_Path (line 72) | private void Set_Rom_Path(object sender, RoutedEventArgs e)
    method InjectGame (line 88) | private void InjectGame(object sender, RoutedEventArgs e)
    method getInfoFromConfig (line 135) | public void getInfoFromConfig()
    method Set_TvTex (line 192) | private void Set_TvTex(object sender, RoutedEventArgs e)
    method Set_DrcTex (line 217) | private void Set_DrcTex(object sender, RoutedEventArgs e)
    method Set_IconTex (line 242) | private void Set_IconTex(object sender, RoutedEventArgs e)
    method Set_LogoTex (line 267) | private void Set_LogoTex(object sender, RoutedEventArgs e)
    method CheckIfNull (line 292) | private bool CheckIfNull(string s)
    method Set_IniPath (line 301) | private void Set_IniPath(object sender, RoutedEventArgs e)
    method gn_KeyUp (line 311) | private void gn_KeyUp(object sender, KeyEventArgs e)
    method rbRDF_Click (line 328) | private void rbRDF_Click(object sender, RoutedEventArgs e)
    method RadioButton_Click (line 333) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method reset (line 337) | public void reset()
    method icoIMG_MouseLeftButtonDown (line 346) | private void icoIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method clearImages (line 359) | public void clearImages(int i)
    method tvIMG_MouseLeftButtonDown (line 385) | private void tvIMG_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method drcIMG_MouseLeftButtonDown (line 399) | private void drcIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method logIMG_MouseLeftButtonDown (line 414) | private void logIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method Button_Click (line 428) | private void Button_Click(object sender, RoutedEventArgs e)
    method Image_MouseLeftButtonDown (line 470) | private void Image_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method Button_Click_1 (line 501) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method gn_TextChanged (line 532) | private void gn_TextChanged(object sender, TextChangedEventArgs e)
    method chkWide_Click (line 544) | private void chkWide_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/OtherConfigs.xaml.cs
  class OtherConfigs (line 16) | public partial class OtherConfigs : Page, IDisposable
    method OtherConfigs (line 19) | public OtherConfigs()
    method clearImages (line 36) | public void clearImages(int i)
    method OtherConfigs (line 63) | public OtherConfigs(GameConfig c)
    method imgpath (line 77) | public void imgpath(string icon, string tv)
    method Set_Rom_Path (line 82) | private void Set_Rom_Path(object sender, RoutedEventArgs e)
    method SoundImg_MouseLeftButtonDown (line 119) | private void SoundImg_MouseLeftButtonDown(object sender, MouseButtonEv...
    method sound_TextChanged (line 124) | private void sound_TextChanged(object sender, TextChangedEventArgs e)
    method InjectGame (line 139) | private void InjectGame(object sender, RoutedEventArgs e)
    method Set_TvTex (line 165) | private void Set_TvTex(object sender, RoutedEventArgs e)
    method Set_DrcTex (line 190) | private void Set_DrcTex(object sender, RoutedEventArgs e)
    method Set_IconTex (line 215) | private void Set_IconTex(object sender, RoutedEventArgs e)
    method Set_LogoTex (line 240) | private void Set_LogoTex(object sender, RoutedEventArgs e)
    method getInfoFromConfig (line 265) | public void getInfoFromConfig()
    method CheckIfNull (line 310) | private bool CheckIfNull(string s)
    method icoIMG_MouseLeftButtonDown (line 315) | private void icoIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method tvIMG_MouseLeftButtonDown (line 329) | private void tvIMG_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method drcIMG_MouseLeftButtonDown (line 343) | private void drcIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method logIMG_MouseLeftButtonDown (line 358) | private void logIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method Button_Click (line 372) | private void Button_Click(object sender, RoutedEventArgs e)
    method Button_Click_1 (line 409) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method CheckBox_Click (line 446) | private void CheckBox_Click(object sender, RoutedEventArgs e)
    method gn_TextChanged (line 451) | private void gn_TextChanged(object sender, TextChangedEventArgs e)
    method Dispose (line 464) | public void Dispose()
    method RendererScale1_Checked (line 469) | private void RendererScale1_Checked(object sender, RoutedEventArgs e)
    method RendererScale2_Checked (line 475) | private void RendererScale2_Checked(object sender, RoutedEventArgs e)
    method STLayoutFalse_Checked (line 480) | private void STLayoutFalse_Checked(object sender, RoutedEventArgs e)
    method STLayoutTrue_Checked (line 486) | private void STLayoutTrue_Checked(object sender, RoutedEventArgs e)
    method DSLayoutFalse_Checked (line 490) | private void DSLayoutFalse_Checked(object sender, RoutedEventArgs e)
    method DSLayoutTrue_Checked (line 496) | private void DSLayoutTrue_Checked(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/PixelArtScalerValidationRule.cs
  class PixelArtScalerValidationRule (line 6) | public class PixelArtScalerValidationRule : ValidationRule
    method Validate (line 8) | public override ValidationResult Validate(object value, CultureInfo cu...

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/TurboGrafX.xaml.cs
  class TurboGrafX (line 14) | public partial class TurboGrafX : Page, IDisposable
    method TurboGrafX (line 18) | public TurboGrafX()
    method clearImages (line 26) | public void clearImages(int i)
    method TurboGrafX (line 53) | public TurboGrafX(GameConfig c)
    method SoundImg_MouseLeftButtonDown (line 62) | private void SoundImg_MouseLeftButtonDown(object sender, MouseButtonEv...
    method sound_TextChanged (line 67) | private void sound_TextChanged(object sender, TextChangedEventArgs e)
    method Dispose (line 90) | public void Dispose()
    method Set_Rom_Path (line 95) | private void Set_Rom_Path(object sender, RoutedEventArgs e)
    method InjectGame (line 118) | private void InjectGame(object sender, RoutedEventArgs e)
    method Set_TvTex (line 157) | private void Set_TvTex(object sender, RoutedEventArgs e)
    method Set_DrcTex (line 183) | private void Set_DrcTex(object sender, RoutedEventArgs e)
    method Set_IconTex (line 208) | private void Set_IconTex(object sender, RoutedEventArgs e)
    method imgpath (line 233) | public void imgpath(string icon, string tv)
    method Set_LogoTex (line 239) | private void Set_LogoTex(object sender, RoutedEventArgs e)
    method getInfoFromConfig (line 264) | public void getInfoFromConfig()
    method CheckIfNull (line 314) | private bool CheckIfNull(string s)
    method CheckBox_Click (line 323) | private void CheckBox_Click(object sender, RoutedEventArgs e)
    method gn_KeyUp (line 345) | private void gn_KeyUp(object sender, KeyEventArgs e)
    method reset (line 361) | public void reset()
    method icoIMG_MouseDown (line 371) | private void icoIMG_MouseDown(object sender, MouseButtonEventArgs e)
    method icoIMG_MouseLeftButtonDown (line 376) | private void icoIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method tvIMG_MouseLeftButtonDown (line 390) | private void tvIMG_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method drcIMG_MouseLeftButtonDown (line 404) | private void drcIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method logIMG_MouseLeftButtonDown (line 419) | private void logIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method Button_Click (line 433) | private void Button_Click(object sender, RoutedEventArgs e)
    method Image_MouseLeftButtonDown (line 475) | private void Image_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method Button_Click_1 (line 506) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method gn_TextChanged (line 548) | private void gn_TextChanged(object sender, TextChangedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/WiiConfig.xaml.cs
  class WiiConfig (line 24) | public partial class WiiConfig : Page, IDisposable
    method clearImages (line 28) | public void clearImages(int i)
    method CheckBox_Checked (line 56) | private void CheckBox_Checked(object sender, RoutedEventArgs e)
    method imgpath (line 73) | public void imgpath(string icon, string tv)
    method WiiConfig (line 78) | public WiiConfig()
    method WiiConfig (line 101) | public WiiConfig(GameConfig c)
    method Dispose (line 126) | public void Dispose()
    method WiiConfig_PreviewDragOver (line 131) | private void WiiConfig_PreviewDragOver(object sender, DragEventArgs e)
    method WiiConfig_PreviewDrop (line 137) | private void WiiConfig_PreviewDrop(object sender, DragEventArgs e)
    method Set_Rom_Path (line 246) | private void Set_Rom_Path(object sender, RoutedEventArgs e)
    method PostRomPath (line 252) | public void PostRomPath(string path)
    method ReadAncastFromOtp (line 391) | public string ReadAncastFromOtp()
    method InjectGame (line 415) | private void InjectGame(object sender, RoutedEventArgs e)
    method Set_TvTex (line 546) | private void Set_TvTex(object sender, RoutedEventArgs e)
    method Set_DrcTex (line 571) | private void Set_DrcTex(object sender, RoutedEventArgs e)
    method Set_IconTex (line 596) | private void Set_IconTex(object sender, RoutedEventArgs e)
    method Set_LogoTex (line 621) | private void Set_LogoTex(object sender, RoutedEventArgs e)
    method getInfoFromConfig (line 646) | public void getInfoFromConfig()
    method CheckIfNull (line 716) | private bool CheckIfNull(string s)
    method gn_KeyUp (line 721) | private void gn_KeyUp(object sender, KeyEventArgs e)
    method gn_KeyUp_1 (line 733) | private void gn_KeyUp_1(object sender, KeyEventArgs e)
    method gamepad_SelectionChanged (line 738) | private void gamepad_SelectionChanged(object sender, SelectionChangedE...
    method RadioButton_Click (line 751) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method RadioButton_Click_1 (line 757) | private void RadioButton_Click_1(object sender, RoutedEventArgs e)
    method RadioButton_Click_2 (line 763) | private void RadioButton_Click_2(object sender, RoutedEventArgs e)
    method reset (line 768) | public void reset()
    method icoIMG_MouseLeftButtonDown (line 776) | private void icoIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method tvIMG_MouseLeftButtonDown (line 790) | private void tvIMG_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method drcIMG_MouseLeftButtonDown (line 804) | private void drcIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method logIMG_MouseLeftButtonDown (line 818) | private void logIMG_MouseLeftButtonDown(object sender, MouseButtonEven...
    method ic_TextChanged (line 832) | private void ic_TextChanged(object sender, TextChangedEventArgs e)
    method drc_TextChanged (line 837) | private void drc_TextChanged(object sender, TextChangedEventArgs e)
    method tv_TextChanged (line 842) | private void tv_TextChanged(object sender, TextChangedEventArgs e)
    method log_TextChanged (line 847) | private void log_TextChanged(object sender, TextChangedEventArgs e)
    method gn_KeyDown (line 852) | private void gn_KeyDown(object sender, KeyEventArgs e)
    method Button_Click (line 858) | private void Button_Click(object sender, RoutedEventArgs e)
    method Image_MouseLeftButtonDown (line 892) | private void Image_MouseLeftButtonDown(object sender, MouseButtonEvent...
    method SoundImg_MouseLeftButtonDown (line 897) | private void SoundImg_MouseLeftButtonDown(object sender, MouseButtonEv...
    method sound_TextChanged (line 902) | private void sound_TextChanged(object sender, TextChangedEventArgs e)
    method Button_Click_1 (line 915) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method trimn_Click (line 946) | private void trimn_Click(object sender, RoutedEventArgs e)
    method jppatch_Click (line 1000) | private void jppatch_Click(object sender, RoutedEventArgs e)
    method selectionDB_SelectionChanged (line 1005) | private void selectionDB_SelectionChanged(object sender, SelectionChan...
    method motepass_Checked (line 1027) | private void motepass_Checked(object sender, RoutedEventArgs e)
    method motepass_Unchecked (line 1032) | private void motepass_Unchecked(object sender, RoutedEventArgs e)
    method RF_tp_Click (line 1037) | private void RF_tp_Click(object sender, RoutedEventArgs e)
    method log_TextChanged_1 (line 1065) | private void log_TextChanged_1(object sender, TextChangedEventArgs e)
    method ancast_OTP (line 1076) | private void ancast_OTP(object sender, RoutedEventArgs e)
    method SelectGctFile (line 1081) | private void SelectGctFile(object sender, RoutedEventArgs e)
    method GetGCTFilePaths (line 1102) | private string GetGCTFilePaths()

FILE: UWUVCI AIO WPF/UI/Frames/KeyFrame/TKFrame.xaml.cs
  class TKFrame (line 10) | public partial class TKFrame : Page
    method TKFrame (line 13) | public TKFrame(GameConsoles c)
    method DataGrid_MouseDoubleClick (line 22) | private void DataGrid_MouseDoubleClick(object sender, MouseButtonEvent...

FILE: UWUVCI AIO WPF/UI/Frames/Path/Paths.xaml.cs
  class Paths (line 10) | public partial class Paths : Page, IDisposable
    method Paths (line 14) | public Paths(MainWindow mw)
    method Dispose (line 20) | public void Dispose()
    method Button_Click (line 25) | private void Button_Click(object sender, RoutedEventArgs e)
    method Button_Click_1 (line 30) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method Button_Click_2 (line 35) | private void Button_Click_2(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/SettingsFrame.xaml.cs
  class SettingsFrame (line 14) | public partial class SettingsFrame : Page, IDisposable
    method SettingsFrame (line 17) | public SettingsFrame(MainWindow mw)
    method Dispose (line 23) | public void Dispose()
    method Button_Click (line 28) | private void Button_Click(object sender, RoutedEventArgs e)
    method Button_Click_1 (line 34) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method Button_Click_2 (line 40) | private void Button_Click_2(object sender, RoutedEventArgs e)
    method Button_Click_3 (line 45) | private void Button_Click_3(object sender, RoutedEventArgs e)
    method Button_Click_4 (line 51) | private void Button_Click_4(object sender, RoutedEventArgs e)
    method Button_Click_5 (line 61) | private void Button_Click_5(object sender, RoutedEventArgs e)
    method Button_Click_6 (line 75) | private void Button_Click_6(object sender, RoutedEventArgs e)
    method Button_Click_7 (line 81) | private void Button_Click_7(object sender, RoutedEventArgs e)
    method Button_Click_8 (line 87) | private void Button_Click_8(object sender, RoutedEventArgs e)
    method Button_Click_9 (line 93) | private void Button_Click_9(object sender, RoutedEventArgs e)
    method Button_Click_10 (line 103) | private void Button_Click_10(object sender, RoutedEventArgs e)
    method Button_Click_11 (line 112) | private void Button_Click_11(object sender, RoutedEventArgs e)
    method Button_Click_12 (line 128) | private void Button_Click_12(object sender, RoutedEventArgs e)
    method Button_Click_13 (line 133) | private void Button_Click_13(object sender, RoutedEventArgs e)
    method BtnZestyTSVersion (line 138) | private void BtnZestyTSVersion(object sender, RoutedEventArgs e)
    method ShowTutorialScreens_Click (line 143) | private void ShowTutorialScreens_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Frames/StartFrame.xaml.cs
  class StartFrame (line 10) | public partial class StartFrame : Page
    method StartFrame (line 12) | public StartFrame()
    method Button_Click (line 18) | private void Button_Click(object sender, RoutedEventArgs e)
    method Button_Click2 (line 22) | private void Button_Click2(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/BaseGameWindow.xaml.cs
  class BaseGameWindow (line 8) | public partial class BaseGameWindow : Window
    method BaseGameWindow (line 11) | public BaseGameWindow()
    method Timer_Tick (line 26) | private void Timer_Tick(object sender, EventArgs e)
    method NextButton_Click (line 34) | private void NextButton_Click(object sender, RoutedEventArgs e)
    method BackButton_Click (line 42) | private void BackButton_Click(object sender, RoutedEventArgs e)
    method CompatibilityListButton_Click (line 50) | private void CompatibilityListButton_Click(object sender, RoutedEventA...

FILE: UWUVCI AIO WPF/UI/Windows/CloseWindow.xaml.cs
  class CloseWindow (line 9) | public partial class CloseWindow : Window
    method CloseWindow (line 13) | public CloseWindow()
    method Timer_Tick (line 28) | private void Timer_Tick(object sender, EventArgs e)
    method CloseButton_Click (line 37) | private void CloseButton_Click(object sender, RoutedEventArgs e)
    method BackButton_Click (line 55) | private void BackButton_Click(object sender, RoutedEventArgs e)
    method DiscordButton_Click (line 63) | private void DiscordButton_Click(object sender, RoutedEventArgs e)
    method DonateButton_Click (line 73) | private void DonateButton_Click(object sender, RoutedEventArgs e)
    method GameButton_Click (line 83) | private void GameButton_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/Custom Message - Kopieren.xaml.cs
  class Custom_Message___Kopieren (line 8) | public partial class Custom_Message___Kopieren : Window
    method Custom_Message___Kopieren (line 10) | public Custom_Message___Kopieren()

FILE: UWUVCI AIO WPF/UI/Windows/Custom Message.xaml.cs
  class Custom_Message (line 15) | public partial class Custom_Message : Window
    method Custom_Message (line 20) | public Custom_Message(string title, string message)
    method CloseProgram (line 69) | public void CloseProgram(object sender, RoutedEventArgs e)
    method Custom_Message (line 73) | public Custom_Message(string title, string message, string Path)
    method Button_Click (line 107) | private void Button_Click(object sender, RoutedEventArgs e)
    method Folder_Click (line 113) | private void Folder_Click(object sender, RoutedEventArgs e)
    method Reset_Click (line 138) | private void Reset_Click(object sender, RoutedEventArgs e)
    method nc_Click (line 157) | private void nc_Click(object sender, RoutedEventArgs e)
    method wind_Closing (line 175) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 180) | private void wind_Closed(object sender, EventArgs e)
    method isWindClosing (line 185) | private void isWindClosing(bool topMost)
    method dontChecked (line 201) | private void dontChecked()

FILE: UWUVCI AIO WPF/UI/Windows/DownloadWait - Kopieren.xaml.cs
  class SDSetup (line 22) | partial class SDSetup : Window, IDisposable
    method SDSetup (line 29) | public SDSetup()
    method SpecifyDrive (line 38) | public void SpecifyDrive()
    method SDSetup (line 50) | public SDSetup(bool gamecube, string injectlocation)
    method checkfornewinput (line 66) | private void checkfornewinput()
    method checkfornewoutput (line 83) | private void checkfornewoutput()
    method watcher_EventArrived (line 101) | private void watcher_EventArrived(object sender, EventArrivedEventArgs e)
    method GetDrives (line 106) | private void GetDrives()
    method GetDirectorySize (line 111) | public static long GetDirectorySize(string p)
    method GetDirectorySize (line 122) | public static long GetDirectorySize(string b, bool t)
    method Window_Minimize (line 143) | private void Window_Minimize(object sender, RoutedEventArgs e)
    method changeOwner (line 148) | public void changeOwner(MainWindow ow)
    method MoveWindow (line 164) | private void MoveWindow(object sender, MouseButtonEventArgs e)
    method Window_Close (line 176) | private void Window_Close(object sender, RoutedEventArgs e)
    method close_MouseLeave (line 191) | private void close_MouseLeave(object sender, MouseEventArgs e)
    method close_MouseEnter (line 196) | private void close_MouseEnter(object sender, MouseEventArgs e)
    method wind_Closed (line 200) | private void wind_Closed(object sender, EventArgs e)
    method FormatBytes (line 215) | private static string FormatBytes(long bytes)
    method setup_Click (line 227) | private void setup_Click(object sender, RoutedEventArgs e)
    method Dp_Tick (line 273) | private void Dp_Tick(object sender, EventArgs e)
    method SetupNintendont (line 292) | private void SetupNintendont()
    method CopyInject (line 345) | private void CopyInject()
    method CopyDirectory (line 375) | public static void CopyDirectory(string sourceDir, string destDir)
    method DirectoryCopy (line 407) | public static void DirectoryCopy(string sourceDirName, string destDirN...
    method sd_SelectionChanged (line 440) | private void sd_SelectionChanged(object sender, SelectionChangedEventA...
    method Dispose (line 455) | public void Dispose()

FILE: UWUVCI AIO WPF/UI/Windows/DownloadWait.xaml.cs
  class DownloadWait (line 11) | partial class DownloadWait : Window
    method DownloadWait (line 21) | public DownloadWait(string doing, string msg, MainViewModel mvm)
    method DownloadWait (line 42) | public DownloadWait(string doing, string msg, MainViewModel mvm, bool t)
    method DownloadWait (line 62) | public DownloadWait(string doing, TimeSpan estimatedTime, MainViewMode...
    method Window_Minimize (line 89) | private void Window_Minimize(object sender, RoutedEventArgs e)
    method timer_Tick (line 94) | private void timer_Tick(object sender, EventArgs e)
    method changeOwner (line 163) | public void changeOwner(MainWindow ow)
    method wind_Closed (line 180) | private void wind_Closed(object sender, EventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/EnterKey.xaml.cs
  class EnterKey (line 9) | public partial class EnterKey : Window
    method EnterKey (line 13) | public EnterKey(bool ckey)
    method EnterKey (line 45) | public EnterKey(int i)
    method Button_Click (line 68) | private void Button_Click(object sender, RoutedEventArgs e)
    method Button_Click_1 (line 73) | private void Button_Click_1(object sender, RoutedEventArgs e)
    method Window_GotFocus (line 141) | private void Window_GotFocus(object sender, RoutedEventArgs e)
    method wind_Closing (line 146) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 151) | private void wind_Closed(object sender, EventArgs e)
    method Button_Click_2 (line 156) | private void Button_Click_2(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/GuideWindow.xaml.cs
  class GuideWindow (line 9) | public partial class GuideWindow : Window
    method GuideWindow (line 12) | public GuideWindow()
    method Timer_Tick (line 27) | private void Timer_Tick(object sender, EventArgs e)
    method NextButton_Click (line 36) | private void NextButton_Click(object sender, RoutedEventArgs e)
    method BackButton_Click (line 44) | private void BackButton_Click(object sender, RoutedEventArgs e)
    method ReadMeButton_Click (line 52) | private void ReadMeButton_Click(object sender, RoutedEventArgs e)
    method ZestyGuideButton_Click (line 70) | private void ZestyGuideButton_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren - Kopieren - Kopieren.xaml.cs
  class LOGSHOW (line 14) | public partial class LOGSHOW : Window, IDisposable
    method LOGSHOW (line 21) | public LOGSHOW(string path)
    method Dispose (line 85) | public void Dispose()
    method Canc_Click (line 90) | private void Canc_Click(object sender, RoutedEventArgs e)
    method wind_Closing (line 97) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 102) | private void wind_Closed(object sender, EventArgs e)
    method Button_Click (line 107) | private void Button_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren - Kopieren.xaml.cs
  class ICOSHOW (line 14) | public partial class ICOSHOW : Window, IDisposable
    method ICOSHOW (line 21) | public ICOSHOW(string path)
    method Dispose (line 89) | public void Dispose()
    method Canc_Click (line 93) | private void Canc_Click(object sender, RoutedEventArgs e)
    method wind_Closing (line 100) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 105) | private void wind_Closed(object sender, EventArgs e)
    method Button_Click (line 110) | private void Button_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren.xaml.cs
  class TDRSHOW (line 14) | public partial class TDRSHOW : Window, IDisposable
    method TDRSHOW (line 22) | public TDRSHOW(string path, bool drc)
    method Dispose (line 103) | public void Dispose()
    method Canc_Click (line 108) | private void Canc_Click(object sender, RoutedEventArgs e)
    method wind_Closing (line 115) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 120) | private void wind_Closed(object sender, EventArgs e)
    method Button_Click (line 125) | private void Button_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/IMG_Message.xaml.cs
  class IMG_Message (line 24) | public partial class IMG_Message : Window
    method IMG_Message (line 32) | public IMG_Message(string icon, string tv, string repoid)
    method GetRepoImages (line 75) | private BitmapImage GetRepoImages(string imageURL)
    method PixelFormat (line 150) | private static PixelFormat PixelFormat(IImage image)
    method WpfImage (line 171) | private static IEnumerable<Image> WpfImage(IImage image)
    method Button_Click (line 206) | private void Button_Click(object sender, RoutedEventArgs e)
    method Canc_Click (line 211) | private void Canc_Click(object sender, RoutedEventArgs e)
    method Yes_Click (line 217) | private void Yes_Click(object sender, RoutedEventArgs e)
    method checkForAdditionalFiles (line 301) | private void checkForAdditionalFiles(GameConsoles console)
    method checkForAdditionalFiles (line 390) | public void checkForAdditionalFiles(GameConsoles console, string repoid)
    method RemoteFileExists (line 479) | private bool RemoteFileExists(string url)
    method wind_Closing (line 493) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 498) | private void wind_Closed(object sender, EventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren - Kopieren (2).xaml.cs
  class asd (line 21) | public partial class asd : Window, IDisposable
    method asd (line 30) | public asd()
    method asd (line 36) | public asd(string name)
    method SetTemplate (line 44) | private void SetTemplate()
    method Button_Click (line 57) | private void Button_Click(object sender, RoutedEventArgs e)
    method FileSelect_Click (line 62) | private void FileSelect_Click(object sender, RoutedEventArgs e)
    method Finish_Click (line 121) | private void Finish_Click(object sender, RoutedEventArgs e)
    method TextBox_PreviewKeyDown (line 143) | private void TextBox_PreviewKeyDown(object sender, System.Windows.Inpu...
    method TextBox_PreviewTextInput (line 148) | private void TextBox_PreviewTextInput(object sender, TextCompositionEv...
    method IsTextAllowed (line 154) | private static bool IsTextAllowed(string text)
    method TextBoxPasting (line 158) | private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
    method wind_Loaded (line 174) | private void wind_Loaded(object sender, RoutedEventArgs e)
    method BitmapToImageSource (line 179) | BitmapImage BitmapToImageSource(Bitmap bitmap)
    method enOv_Click (line 197) | private void enOv_Click(object sender, RoutedEventArgs e)
    method ResizeImage (line 224) | public static Bitmap ResizeImage(System.Drawing.Image image, int width...
    method DrawImage (line 249) | void DrawImage()
    method Players_KeyDown (line 255) | private void Players_KeyDown(object sender, System.Windows.Input.KeyEv...
    method Players_TextChanged (line 260) | private void Players_TextChanged(object sender, TextChangedEventArgs e)
    method Dispose (line 265) | public void Dispose()
    method combo_SelectionChanged (line 270) | private void combo_SelectionChanged(object sender, SelectionChangedEve...
    method pal_Click (line 289) | private void pal_Click(object sender, RoutedEventArgs e)
    method RadioButton_Click (line 304) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method PLDi_Click (line 311) | private void PLDi_Click(object sender, RoutedEventArgs e)
    method RLEn_Click (line 317) | private void RLEn_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren - Kopieren.xaml.cs
  class LogoCreator (line 19) | public partial class LogoCreator : Window, IDisposable
    method LogoCreator (line 29) | public LogoCreator()
    method SetTemplate (line 38) | private void SetTemplate()
    method Button_Click (line 43) | private void Button_Click(object sender, RoutedEventArgs e)
    method FileSelect_Click (line 48) | private void FileSelect_Click(object sender, RoutedEventArgs e)
    method CheckIfNull (line 106) | private bool CheckIfNull(string s)
    method Finish_Click (line 114) | private void Finish_Click(object sender, RoutedEventArgs e)
    method TextBox_PreviewKeyDown (line 132) | private void TextBox_PreviewKeyDown(object sender, System.Windows.Inpu...
    method TextBox_PreviewTextInput (line 137) | private void TextBox_PreviewTextInput(object sender, TextCompositionEv...
    method IsTextAllowed (line 144) | private static bool IsTextAllowed(string text)
    method TextBoxPasting (line 148) | private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
    method wind_Loaded (line 164) | private void wind_Loaded(object sender, RoutedEventArgs e)
    method BitmapToImageSource (line 169) | BitmapImage BitmapToImageSource(Bitmap bitmap)
    method DrawImage (line 189) | void DrawImage()
    method Players_KeyDown (line 212) | private void Players_KeyDown(object sender, System.Windows.Input.KeyEv...
    method Players_TextChanged (line 217) | private void Players_TextChanged(object sender, TextChangedEventArgs e)
    method Dispose (line 222) | public void Dispose()
    method Dispose (line 228) | private void Dispose(bool disposing)
    method RadioButton_Click (line 240) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method PLDi_Click (line 244) | private void PLDi_Click(object sender, RoutedEventArgs e)
    method RLEn_Click (line 250) | private void RLEn_Click(object sender, RoutedEventArgs e)
    method t_TextChanged (line 258) | private void t_TextChanged(object sender, TextChangedEventArgs e)
    method t_Copy_TextChanged (line 263) | private void t_Copy_TextChanged(object sender, TextChangedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren.xaml.cs
  class IconCreator (line 21) | public partial class IconCreator : Window, IDisposable
    method IconCreator (line 32) | public IconCreator()
    method IconCreator (line 37) | public IconCreator(string name)
    method IconCreator (line 43) | public IconCreator(string name, string extra)
    method setUpIconCreator (line 51) | private void setUpIconCreator()
    method SetTemplate (line 56) | private void SetTemplate()
    method setUpBiFrame (line 123) | private void setUpBiFrame()
    method Button_Click (line 134) | private void Button_Click(object sender, RoutedEventArgs e)
    method FileSelect_Click (line 139) | private void FileSelect_Click(object sender, RoutedEventArgs e)
    method Finish_Click (line 196) | private void Finish_Click(object sender, RoutedEventArgs e)
    method TextBox_PreviewTextInput (line 216) | private void TextBox_PreviewTextInput(object sender, TextCompositionEv...
    method IsTextAllowed (line 222) | private static bool IsTextAllowed(string text)
    method TextBoxPasting (line 226) | private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
    method wind_Loaded (line 242) | private void wind_Loaded(object sender, RoutedEventArgs e)
    method BitmapToImageSource (line 247) | BitmapImage BitmapToImageSource(Bitmap bitmap)
    method enOv_Click (line 265) | private void enOv_Click(object sender, RoutedEventArgs e)
    method ResizeImage (line 299) | public static Bitmap ResizeImage(System.Drawing.Image image, int width...
    method DrawImage (line 324) | void DrawImage()
    method Players_TextChanged (line 330) | private void Players_TextChanged(object sender, TextChangedEventArgs e)
    method Dispose (line 335) | public void Dispose()
    method Dispose (line 341) | private void Dispose(bool disposing)
    method combo_SelectionChanged (line 353) | private void combo_SelectionChanged(object sender, SelectionChangedEve...
    method pal_Click (line 371) | private void pal_Click(object sender, RoutedEventArgs e)
    method RadioButton_Click (line 385) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method PLDi_Click (line 392) | private void PLDi_Click(object sender, RoutedEventArgs e)
    method RLEn_Click (line 397) | private void RLEn_Click(object sender, RoutedEventArgs e)
    method ww_Click (line 402) | private void ww_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/ImageCreator.xaml.cs
  class ImageCreator (line 23) | public partial class ImageCreator : Window, IDisposable
    method ImageCreator (line 34) | public ImageCreator(string name)
    method ImageCreator (line 46) | public ImageCreator(GameConsoles console, string name) : this(name)
    method ImageCreator (line 51) | public ImageCreator(bool other, GameConsoles consoles, string name) : ...
    method SetTemplate (line 67) | private void SetTemplate(GameConsoles console)
    method Button_Click (line 134) | private void Button_Click(object sender, RoutedEventArgs e)
    method FileSelect_Click (line 139) | private void FileSelect_Click(object sender, RoutedEventArgs e)
    method Finish_Click (line 198) | private void Finish_Click(object sender, RoutedEventArgs e)
    method TextBox_PreviewTextInput (line 219) | private void TextBox_PreviewTextInput(object sender, TextCompositionEv...
    method IsTextAllowed (line 226) | private static bool IsTextAllowed(string text)
    method TextBoxPasting (line 230) | private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
    method wind_Loaded (line 246) | private void wind_Loaded(object sender, RoutedEventArgs e)
    method BitmapToImageSource (line 251) | BitmapImage BitmapToImageSource(Bitmap bitmap)
    method EnableOrDisbale (line 267) | void EnableOrDisbale(bool en)
    method enOv_Click (line 293) | private void enOv_Click(object sender, RoutedEventArgs e)
    method ResizeImage (line 320) | public static Bitmap ResizeImage(System.Drawing.Image image, int width...
    method DrawImage (line 345) | void DrawImage()
    method Players_TextChanged (line 360) | private void Players_TextChanged(object sender, TextChangedEventArgs e)
    method Dispose (line 365) | public void Dispose()
    method Dispose (line 371) | private void Dispose(bool disposing)
    method combo_SelectionChanged (line 383) | private void combo_SelectionChanged(object sender, SelectionChangedEve...
    method pal_Click (line 402) | private void pal_Click(object sender, RoutedEventArgs e)
    method RadioButton_Click (line 420) | private void RadioButton_Click(object sender, RoutedEventArgs e)
    method PLDi_Click (line 449) | private void PLDi_Click(object sender, RoutedEventArgs e)
    method RLEn_Click (line 456) | private void RLEn_Click(object sender, RoutedEventArgs e)
    method switchs (line 463) | private void switchs(Visibility v)

FILE: UWUVCI AIO WPF/UI/Windows/IntroductionWindow.xaml.cs
  class IntroductionWindow (line 7) | public partial class IntroductionWindow : Window
    method IntroductionWindow (line 10) | public IntroductionWindow()
    method Timer_Tick (line 25) | private void Timer_Tick(object sender, EventArgs e)
    method NextButton_Click (line 34) | private void NextButton_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/MacLinuxWindow.xaml.cs
  class MacLinuxWindow (line 7) | public partial class MacLinuxWindow : Window
    method MacLinuxWindow (line 10) | public MacLinuxWindow()
    method Timer_Tick (line 25) | private void Timer_Tick(object sender, EventArgs e)
    method NextButton_Click (line 33) | private void NextButton_Click(object sender, RoutedEventArgs e)
    method BackButton_Click (line 41) | private void BackButton_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/MenuWindow.xaml.cs
  class MainWindow (line 18) | public partial class MainWindow : Window
    method StreamToBytes (line 34) | public static byte[] StreamToBytes(Stream stream)
    method is32 (line 53) | internal void is32()
    method MainWindow (line 66) | public MainWindow()
    method Window_KeyUp (line 73) | private void Window_KeyUp(object sender, KeyEventArgs e)
    method Media_Ended (line 91) | public static void Media_Ended(object sender, EventArgs e)
    method DisposeResources (line 96) | private static void DisposeResources()
    method ButtonCloseMenu_Click (line 105) | private void ButtonCloseMenu_Click(object sender, RoutedEventArgs e)
    method ButtonOpenMenu_Click (line 111) | private void ButtonOpenMenu_Click(object sender, RoutedEventArgs e)
    method ButtonCloseMenu_Click (line 117) | private void ButtonCloseMenu_Click(object sender, MouseEventArgs e)
    method ButtonOpenMenu_Click (line 127) | private void ButtonOpenMenu_Click(object sender, MouseEventArgs e)
    method MoveWindow (line 137) | private void MoveWindow(object sender, MouseButtonEventArgs e)
    method DestroyFrame (line 158) | private void DestroyFrame()
    method ListView_Click (line 166) | public void ListView_Click(object sender, MouseButtonEventArgs e)
    method ResetMainViewModel (line 186) | private void ResetMainViewModel()
    method UpdateUIForSelectedIndex (line 232) | private void UpdateUIForSelectedIndex(MainViewModel mvm, int selectedI...
    method paths (line 270) | public void paths(bool remove)
    method Window_Close (line 279) | private void Window_Close(object sender, RoutedEventArgs e)
    method Window_Minimize (line 284) | private void Window_Minimize(object sender, RoutedEventArgs e)
    method Button_MouseEnter (line 289) | private void Button_MouseEnter(object sender, MouseEventArgs e)
    method close_MouseEnter (line 294) | private void close_MouseEnter(object sender, MouseEventArgs e)
    method close_MouseLeave (line 299) | private void close_MouseLeave(object sender, MouseEventArgs e)
    method min_MouseLeave (line 304) | private void min_MouseLeave(object sender, MouseEventArgs e)
    method sett_MouseEnter (line 309) | private void sett_MouseEnter(object sender, MouseEventArgs e)
    method sett_MouseLeave (line 314) | private void sett_MouseLeave(object sender, MouseEventArgs e)
    method setDebug (line 319) | public void setDebug(bool bypass)
    method allowBypass (line 331) | public void allowBypass()
    method Window_MouseUp (line 340) | private void Window_MouseUp(object sender, MouseButtonEventArgs e)
    method settings_Click (line 352) | private void settings_Click(object sender, RoutedEventArgs e)
    method vwiiMode_Click (line 362) | private void vwiiMode_Click(object sender, RoutedEventArgs e)

FILE: UWUVCI AIO WPF/UI/Windows/TitleKeys - Kopieren.xaml.cs
  class TitleKeys_Kopieren (line 8) | public partial class TitleKeys_Kopieren : Window
    method TitleKeys_Kopieren (line 10) | public TitleKeys_Kopieren()

FILE: UWUVCI AIO WPF/UI/Windows/TitleKeys.xaml.cs
  class TitleKeys (line 14) | public partial class TitleKeys : Window
    method TitleKeys (line 17) | public TitleKeys(string url)
    method TitleKeys (line 64) | public TitleKeys(string url, string title)
    method MoveWindow (line 73) | private void MoveWindow(object sender, MouseButtonEventArgs e)
    method DoStuff (line 94) | public void DoStuff(string url)
    method Window_Close (line 136) | private void Window_Close(object sender, RoutedEventArgs e)
    method Window_Minimize (line 144) | private void Window_Minimize(object sender, RoutedEventArgs e)
    method wb_LoadCompleted (line 149) | private void wb_LoadCompleted(object sender, System.Windows.Navigation...
    method wb_Navigating (line 157) | private void wb_Navigating(object sender, System.Windows.Navigation.Na...
    method wind_Closing (line 174) | private void wind_Closing(object sender, System.ComponentModel.CancelE...
    method wind_Closed (line 179) | private void wind_Closed(object sender, EventArgs e)
  class clsWebbrowser_Errors (line 184) | public static class clsWebbrowser_Errors
    method SuppressscriptErrors (line 191) | public static void SuppressscriptErrors(this WebBrowser webBrowser, bo...
Condensed preview — 125 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,865K chars).
[
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".gitignore",
    "chars": 5745,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "AnalysisReport.sarif",
    "chars": 2250,
    "preview": "{\n  \"$schema\": \"https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json\",\n  \"version\": \"2.1.0\",\n  \"ru"
  },
  {
    "path": "LICENSE",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 559,
    "preview": "# UWUVCI-AIO-WPF\n \n Wii U All-in-One Injector.\n \n ## Systems Supported\n \n * DS\n * GBA\n * N64\n * Snes\n * Nes\n * Turbo Gra"
  },
  {
    "path": "UWUVCI AIO WPF/App.config",
    "chars": 3740,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <configSections>\n        <sectionGroup name=\"userSettings\" t"
  },
  {
    "path": "UWUVCI AIO WPF/App.xaml",
    "chars": 1306,
    "preview": "<Application x:Class=\"UWUVCI_AIO_WPF.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  },
  {
    "path": "UWUVCI AIO WPF/App.xaml.cs",
    "chars": 11502,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Timers;\nusing System.Windows;\nusing System.Window"
  },
  {
    "path": "UWUVCI AIO WPF/AssemblyInfo1.cs",
    "chars": 1,
    "preview": ""
  },
  {
    "path": "UWUVCI AIO WPF/Classes/BootImage.cs",
    "chars": 8903,
    "preview": "using System;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Text;\nusing System.Globalizati"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/DeflickerDitheringRemover.cs",
    "chars": 6811,
    "preview": "using System;\nusing System.IO;\nusing System.Windows;\nusing UWUVCI_AIO_WPF.Helpers;\n\npublic static class DeflickerDither"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/Dol.cs",
    "chars": 7906,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing UWUVCI_AIO_WPF.Models;\nusing "
  },
  {
    "path": "UWUVCI AIO WPF/Classes/GameConfig.cs",
    "chars": 1569,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing UWUVCI_AIO_WPF.Models;\n\nnamespace UWUVCI_AIO_WPF\n{\n    [Serializable]\n "
  },
  {
    "path": "UWUVCI AIO WPF/Classes/GameCubeISO.cs",
    "chars": 9333,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace UWUVCI_AIO_WPF.Classes\n{\n    public class G"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/Injection.cs",
    "chars": 119080,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\n"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/KeyFile.cs",
    "chars": 2505,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compressio"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/MenuIconImage - Kopieren.cs",
    "chars": 2764,
    "preview": "using System;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Windows.Forms;\nusing System.Drawing.Te"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/MenuIconImage.cs",
    "chars": 3336,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\n\nnamespace UWUVCI"
  },
  {
    "path": "UWUVCI AIO WPF/Classes/ToolCheck.cs",
    "chars": 5238,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Net;\nusing S"
  },
  {
    "path": "UWUVCI AIO WPF/FodyWeavers.xml",
    "chars": 137,
    "preview": "<Weavers xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"FodyWeavers.xsd\">\n  <Cost"
  },
  {
    "path": "UWUVCI AIO WPF/FodyWeavers.xsd",
    "chars": 10833,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n  <!-- This file was gen"
  },
  {
    "path": "UWUVCI AIO WPF/Helpers/ConsoleLoggerWriter.cs",
    "chars": 1094,
    "preview": "using System;\nusing System.IO;\nusing System.Text;\n\nnamespace UWUVCI_AIO_WPF.Helpers\n{\n    public class ConsoleLoggerWri"
  },
  {
    "path": "UWUVCI AIO WPF/Helpers/FileUtils.cs",
    "chars": 927,
    "preview": "namespace UWUVCI_AIO_WPF.Helpers\n{\n    public static class FileUtils\n    {\n        public static int FindFreeSpace(byte"
  },
  {
    "path": "UWUVCI AIO WPF/Helpers/JsonSettingsManager.cs",
    "chars": 4225,
    "preview": "using System;\nusing System.IO;\nusing Newtonsoft.Json;\nusing UWUVCI_AIO_WPF.Models;\n\nnamespace UWUVCI_AIO_WPF.Helpers\n{\n"
  },
  {
    "path": "UWUVCI AIO WPF/Helpers/Logger.cs",
    "chars": 2082,
    "preview": "using System;\nusing System.IO;\n\nnamespace UWUVCI_AIO_WPF.Helpers\n{\n    public static class Logger\n    {\n        private"
  },
  {
    "path": "UWUVCI AIO WPF/Helpers/MacLinuxHelper.cs",
    "chars": 9454,
    "preview": "using Microsoft.Win32;\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;"
  },
  {
    "path": "UWUVCI AIO WPF/ILLink/ILLink.Descriptors.LibraryBuild.xml",
    "chars": 295,
    "preview": "<linker>\n  <assembly fullname=\"System.Diagnostics.DiagnosticSource\">\n    <type fullname=\"System.Diagnostics.Metrics.Met"
  },
  {
    "path": "UWUVCI AIO WPF/Models/BaseModel.cs",
    "chars": 627,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\nnamespace UWUVCI_AIO_WPF\n{\n    [Seri"
  },
  {
    "path": "UWUVCI AIO WPF/Models/DolSection.cs",
    "chars": 1788,
    "preview": "using System.Collections.Generic;\nusing System.IO;\n\nnamespace UWUVCI_AIO_WPF.Models\n{\n    public class DolSection\n    {"
  },
  {
    "path": "UWUVCI AIO WPF/Models/GctCode.cs",
    "chars": 7259,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text;\nusing System.Text.RegularExpression"
  },
  {
    "path": "UWUVCI AIO WPF/Models/JsonAppSettings.cs",
    "chars": 903,
    "preview": "namespace UWUVCI_AIO_WPF.Models\n{\n    public class JsonAppSettings\n    {\n        public bool PathsSet { get; set; } = f"
  },
  {
    "path": "UWUVCI AIO WPF/Models/MainViewModel.cs",
    "chars": 128083,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compressio"
  },
  {
    "path": "UWUVCI AIO WPF/Models/N64Conf.cs",
    "chars": 685,
    "preview": "using System;\n\nnamespace UWUVCI_AIO_WPF.Models\n\n{\n    [Serializable]\n   public class N64Conf\n    {\n        private stri"
  },
  {
    "path": "UWUVCI AIO WPF/Models/PNGTGA.cs",
    "chars": 319,
    "preview": "using System;\n\nnamespace UWUVCI_AIO_WPF.Models\n{\n    [Serializable]\n    public class PNGTGA\n    {\n\t\tprivate string imgP"
  },
  {
    "path": "UWUVCI AIO WPF/Models/TKeys.cs",
    "chars": 227,
    "preview": "using GameBaseClassLibrary;\nusing System;\n\nnamespace UWUVCI_AIO_WPF.Models\n{\n    [Serializable]\n    public class TKeys\n"
  },
  {
    "path": "UWUVCI AIO WPF/Models/ToolStep.cs",
    "chars": 455,
    "preview": "namespace UWUVCI_AIO_WPF.Models\n{\n    public class ToolStep\n    {\n        public string ToolName { get; set; } // The n"
  },
  {
    "path": "UWUVCI AIO WPF/Properties/AssemblyInfo.cs",
    "chars": 2685,
    "preview": "using System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// Allgemeine Informationen über "
  },
  {
    "path": "UWUVCI AIO WPF/Properties/Resources.Designer.cs",
    "chars": 18849,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     Dieser Code"
  },
  {
    "path": "UWUVCI AIO WPF/Properties/Resources.resx",
    "chars": 16154,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "UWUVCI AIO WPF/Properties/Settings.Designer.cs",
    "chars": 6940,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     Dieser Code"
  },
  {
    "path": "UWUVCI AIO WPF/Properties/Settings.settings",
    "chars": 1980,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\""
  },
  {
    "path": "UWUVCI AIO WPF/Settings.cs",
    "chars": 1431,
    "preview": "namespace UWUVCI_AIO_WPF.Properties {\n    \n    \n    // Diese Klasse ermöglicht die Behandlung bestimmter Ereignisse der"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Done.xaml",
    "chars": 738,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Done\"\n     xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n      xml"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Done.xaml.cs",
    "chars": 268,
    "preview": "using System.Windows.Controls;\n\nnamespace UWUVCI_AIO_WPF.UI\n{\n    /// <summary>\n    /// Interaktionslogik für Done.xaml"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrame.xaml",
    "chars": 5371,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.INJECTFRAME\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presenta"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrame.xaml.cs",
    "chars": 3734,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\nnamespace UWUVCI_AIO_WPF"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/BaseContainerFrame.xaml",
    "chars": 1730,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Bases.BaseContainerFrame\"\n      xmlns=\"http://schemas.microsoft.co"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/BaseContainerFrame.xaml.cs",
    "chars": 2948,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Windows;\nusing System.Windows.Controls;\n\n\nnamespace UWUVCI_AIO_W"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/CustomBaseFrame.xaml",
    "chars": 2135,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Bases.CustomBaseFrame\"\n      xmlns=\"http://schemas.microsoft.com/w"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/CustomBaseFrame.xaml.cs",
    "chars": 11360,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\nusing GameBaseClassLibra"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/NonCustomBaseFrame.xaml",
    "chars": 1948,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Bases.NonCustomBaseFrame\"\n      xmlns=\"http://schemas.microsoft.co"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Bases/NonCustomBaseFrame.xaml.cs",
    "chars": 3420,
    "preview": "using GameBaseClassLibrary;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Windows;\nusing Syste"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/BrightnessValidationRule.cs",
    "chars": 757,
    "preview": "using System.Globalization;\nusing System.Windows.Controls;\n\nnamespace UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurati"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/GBA.xaml",
    "chars": 8055,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations.GBA\"\n      xmlns=\"http://schemas.microsoft.com/winf"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/GBA.xaml.cs",
    "chars": 18869,
    "preview": "using System;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing U"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/GCConfig.xaml",
    "chars": 9993,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations.GCConfig\"\n      xmlns=\"http://schemas.microsoft.com"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/GCConfig.xaml.cs",
    "chars": 27073,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Text.RegularE"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/InverseBootConverter.cs",
    "chars": 602,
    "preview": "using System;\nusing System.Globalization;\nusing System.Windows.Data;\n\nnamespace UWUVCI_AIO_WPF.UI.Frames.InjectFrames.C"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/N64Config.xaml",
    "chars": 8073,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations.N64Config\"\n      xmlns=\"http://schemas.microsoft.co"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/N64Config.xaml.cs",
    "chars": 17283,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Controls;\nusing S"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/OtherConfigs.xaml",
    "chars": 12092,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations.OtherConfigs\"\n      xmlns=\"http://schemas.microsoft"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/OtherConfigs.xaml.cs",
    "chars": 16832,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Globalization;\nusing System.IO;\nusing System.Windows;\nusing Syst"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/PixelArtScalerValidationRule.cs",
    "chars": 747,
    "preview": "using System.Globalization;\nusing System.Windows.Controls;\n\nnamespace UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurati"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/TurboGrafX.xaml",
    "chars": 7222,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations.TurboGrafX\"\n      xmlns=\"http://schemas.microsoft.c"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/TurboGrafX.xaml.cs",
    "chars": 17151,
    "preview": "using System;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\nusing U"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/WiiConfig.xaml",
    "chars": 14383,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations.WiiConfig\"\n      xmlns=\"http://schemas.microsoft.co"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/InjectFrames/Configurations/WiiConfig.xaml.cs",
    "chars": 42545,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Security.Crypto"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/KeyFrame/TKFrame.xaml",
    "chars": 1447,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.KeyFrame.TKFrame\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/KeyFrame/TKFrame.xaml.cs",
    "chars": 696,
    "preview": "using GameBaseClassLibrary;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace UWUVCI_AIO_WPF.UI.Fra"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/Path/Paths.xaml",
    "chars": 1774,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.Path.Paths\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentat"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/Path/Paths.xaml.cs",
    "chars": 898,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace UWUVCI_AIO_WPF.UI.Frames.Path\n{\n    /// <"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/SettingsFrame.xaml",
    "chars": 6831,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.SettingsFrame\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/SettingsFrame.xaml.cs",
    "chars": 5100,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\nusing UWUVCI_AIO_WPF.Helpe"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/StartFrame.xaml",
    "chars": 1930,
    "preview": "<Page x:Class=\"UWUVCI_AIO_WPF.UI.Frames.StartFrame\"\n     xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Frames/StartFrame.xaml.cs",
    "chars": 805,
    "preview": "using System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace UWUVCI_AIO_WPF.UI.Frames\n{\n  "
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/BaseGameWindow.xaml",
    "chars": 2706,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.BaseGameWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/BaseGameWindow.xaml.cs",
    "chars": 1862,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Threading;\n\nnamespace UWUVCI_AIO_WPF"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/CloseWindow.xaml",
    "chars": 2777,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.CloseWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/CloseWindow.xaml.cs",
    "chars": 2963,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Windows;\nusing System.Windows.Threading;\nusing UWUVCI_AIO_WPF.Help"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/Custom Message - Kopieren.xaml",
    "chars": 856,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.Custom_Message___Kopieren\"\n        xmlns=\"http://schemas.microsoft.com/winfx"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/Custom Message - Kopieren.xaml.cs",
    "chars": 332,
    "preview": "using System.Windows;\n\nnamespace UWUVCI_AIO_WPF.UI.Windows\n{\n    /// <summary>\n    /// Interaktionslogik für Custom_Mes"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/Custom Message.xaml",
    "chars": 2856,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.Custom_Message\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/Custom Message.xaml.cs",
    "chars": 7210,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows;\nusing UWUVCI_AIO_WPF.Classes;\nusing UWUV"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/DownloadWait - Kopieren.xaml",
    "chars": 2688,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.SDSetup\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/DownloadWait - Kopieren.xaml.cs",
    "chars": 15550,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing "
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/DownloadWait.xaml",
    "chars": 1426,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.DownloadWait\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/DownloadWait.xaml.cs",
    "chars": 6268,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Threading;\n\nnamespace UWUVCI_AIO_WPF.UI.Windows\n{\n    /// <sum"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/EnterKey.xaml",
    "chars": 2754,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.EnterKey\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/EnterKey.xaml.cs",
    "chars": 5094,
    "preview": "using System;\nusing System.Windows;\n\nnamespace UWUVCI_AIO_WPF.UI.Windows\n{\n    /// <summary>\n    /// Interaktionslogik "
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/GuideWindow.xaml",
    "chars": 2330,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.GuideWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/GuideWindow.xaml.cs",
    "chars": 2597,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Threading;\n\nnamespa"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren - Kopieren - Kopieren.xaml",
    "chars": 1528,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.LOGSHOW\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren - Kopieren - Kopieren.xaml.cs",
    "chars": 5042,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Media.Imaging;\nusin"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren - Kopieren.xaml",
    "chars": 1543,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.ICOSHOW\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren - Kopieren.xaml.cs",
    "chars": 5031,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Media.Imaging;\nusin"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren.xaml",
    "chars": 1550,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.TDRSHOW\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message - Kopieren.xaml.cs",
    "chars": 5750,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows;\nusing System.Windows.Media.Imaging;\nusin"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message.xaml",
    "chars": 3150,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.IMG_Message\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IMG_Message.xaml.cs",
    "chars": 23603,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Windows;\nusing System.Windows"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren - Kopieren (2).xaml",
    "chars": 4443,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.asd\"\n         xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren - Kopieren (2).xaml.cs",
    "chars": 10214,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imag"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren - Kopieren.xaml",
    "chars": 3001,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.LogoCreator\"\n         xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren - Kopieren.xaml.cs",
    "chars": 8197,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.IO;\nusing System.Text.RegularExpressions;\nus"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren.xaml",
    "chars": 4639,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.IconCreator\"\n         xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator - Kopieren.xaml.cs",
    "chars": 20954,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Drawing.Drawing2"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator.xaml",
    "chars": 7009,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.ImageCreator\"\n         xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/p"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/ImageCreator.xaml.cs",
    "chars": 16603,
    "preview": "using GameBaseClassLibrary;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Draw"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IntroductionWindow.xaml",
    "chars": 2347,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.IntroductionWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/x"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/IntroductionWindow.xaml.cs",
    "chars": 1252,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Threading;\n\nnamespace UWUVCI_AIO_WPF.UI.Windows\n{\n    public p"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/MacLinuxWindow.xaml",
    "chars": 3138,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.MacLinuxWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/MacLinuxWindow.xaml.cs",
    "chars": 1498,
    "preview": "using System;\nusing System.Windows;\nusing System.Windows.Threading;\n\nnamespace UWUVCI_AIO_WPF.UI.Windows\n{\n    public p"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/MenuWindow.xaml",
    "chars": 10875,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/MenuWindow.xaml.cs",
    "chars": 12324,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Threading.Tasks;\nusing System.Windows;\nus"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/TitleKeys - Kopieren.xaml",
    "chars": 542,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.TitleKeys_Kopieren\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/x"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/TitleKeys - Kopieren.xaml.cs",
    "chars": 313,
    "preview": "using System.Windows;\n\nnamespace UWUVCI_AIO_WPF.UI.Windows\n{\n    /// <summary>\n    /// Interaktionslogik für TitleKeys_"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/TitleKeys.xaml",
    "chars": 2276,
    "preview": "<Window x:Class=\"UWUVCI_AIO_WPF.UI.Windows.TitleKeys\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/prese"
  },
  {
    "path": "UWUVCI AIO WPF/UI/Windows/TitleKeys.xaml.cs",
    "chars": 6493,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Reflection;\nusing System.Threading;\nusing System.Windows;\nusing Sy"
  },
  {
    "path": "UWUVCI AIO WPF/UWUVCI AIO WPF.csproj",
    "chars": 38784,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "UWUVCI AIO WPF/app.manifest",
    "chars": 3480,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <ass"
  },
  {
    "path": "UWUVCI AIO WPF/packages.config",
    "chars": 3852,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autoupdater.NET.Official\" version=\"1.9.2\" targetFramew"
  },
  {
    "path": "UWUVCI AIO WPF/uwuvci_installer_creator/app/Readme.txt",
    "chars": 9254,
    "preview": "Thanks for downloading UWUVCI-3!\nIf you didn't download it from the official source (https://github.com/stuff-by-3-rando"
  },
  {
    "path": "UWUVCI AIO WPF/uwuvci_installer_creator/install_script.iss",
    "chars": 4864,
    "preview": "; Inno Setup Script for UWUVCI AIO\n; Version 3.Z-B\n; Supports Windows and Wine\n\n[Setup]\nAppName=UWUVCI AIO\nAppId=UWUVCI"
  },
  {
    "path": "UWUVCI AIO WPF.sln",
    "chars": 1121,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.9.3471"
  },
  {
    "path": "upgrade-assistant.clef",
    "chars": 4431483,
    "preview": "{\"@t\":\"2022-08-04T23:19:42.4258367Z\",\"@mt\":\"Hosting starting\",\"@l\":\"Debug\",\"EventId\":{\"Id\":1,\"Name\":\"Starting\"},\"SourceC"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the stuff-by-3-random-dudes/UWUVCI-AIO-WPF GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 125 files (5.2 MB), approximately 1.4M tokens, and a symbol index with 833 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!