diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 819e519..973fe13 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -52,39 +52,12 @@ jobs:
- name: install frontend dependencies
run: pnpm install
-
- - name: Build and create DMG for macOS
+ - name: build and fix macOS
if: matrix.platform == 'macos-latest'
run: |
- pnpm build
- cd src-tauri
- cargo build --release --target ${{ matrix.args }}
- cd ..
-
- TARGET_ARCH=${{ matrix.args == '--target aarch64-apple-darwin' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
-
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS"
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources"
-
- cp "src-tauri/target/$TARGET_ARCH/release/emerald-legacy-launcher" "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/"
-
- printf '\n\n\n\n CFBundleExecutable\n emerald-legacy-launcher\n CFBundleIdentifier\n com.emerald.legacy\n CFBundleName\n Emerald Legacy Launcher\n CFBundleVersion\n 1.0.0\n CFBundleShortVersionString\n 1.0.0\n CFBundlePackageType\n APPL\n NSHighResolutionCapable\n \n LSApplicationCategoryType\n public.app-category.games\n\n\n' > "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Info.plist"
-
- if [ -f "src-tauri/icons/icon.icns" ]; then
- cp src-tauri/icons/icon.icns "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources/"
- fi
-
- chmod +x "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/emerald-legacy-launcher"
-
- cd "src-tauri/target/$TARGET_ARCH/release/bundle/macos"
- hdiutil create -volname "Emerald Legacy Launcher" -srcfolder "Emerald Legacy Launcher.app" -ov -format UDZO "Emerald Legacy Launcher.dmg"
-
- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
- mv "Emerald Legacy Launcher.dmg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
-
- - name: Build with tauri-action for Windows and Linux
- if: matrix.platform != 'macos-latest'
- uses: tauri-apps/tauri-action@v0
+ pnpm tauri build ${{ matrix.args }}
+ pnpm run post-build:macos
+ - uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -92,166 +65,48 @@ jobs:
releaseName: 'Emerald Nightly'
releaseBody: |
# Emerald Legacy Launcher (Nightly)
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
+ # What to download?
+ - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
+ - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
+ - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
+ - `Emerald.Legacy.Launcher-*_x64.dmg` for macOS (Intel)
+ - `Emerald.Legacy.Launcher-*_aarch64.dmg` for macOS (M-series)
+ - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
+ - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
---
-
- ## ⚠️ Windows SmartScreen
+ # Windows SmartScreen
This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
1. Click the **"More info"** link under the main text.
2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+ ---
+ # macOS "Damaged" Error Fix
+ The macOS builds now include automatic fixes for Gatekeeper quarantine issues. The app should launch without "application is damaged" errors.
+
releaseDraft: false
prerelease: true
args: ${{ matrix.args }}
- - name: Upload all artifacts to release
- uses: softprops/action-gh-release@v2
- with:
- files: |
- src-tauri/target/release/bundle/deb/*.deb
- src-tauri/target/release/bundle/appimage/*.AppImage
- src-tauri/target/release/bundle/rpm/*.rpm
- src-tauri/target/release/bundle/msi/*.msi
- src-tauri/target/release/bundle/nsis/*.exe
- tag_name: nightly
- name: 'Emerald Nightly'
- body: |
- # Emerald Legacy Launcher (Nightly)
- # What to download?
- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
- ---
- # Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
- ---
- # macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: false
- prerelease: true
-
- - name: Upload macOS DMGs to release
- if: matrix.platform == 'macos-latest'
- uses: softprops/action-gh-release@v2
- with:
- files: src-tauri/target/release/bundle/dmg/*.dmg
- tag_name: nightly
- name: 'Emerald Nightly'
- body: |
- # Emerald Legacy Launcher (Nightly)
- # What to download?
- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
- ---
- # Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
- ---
- # macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: false
- prerelease: true
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
nightly-flatpak:
runs-on: ubuntu-latest
permissions:
contents: write
- needs: nightly-tauri
+ needs: nightly-tauri # Wait for Tauri release to be created
+ container:
+ image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
+ options: --privileged
steps:
- uses: actions/checkout@v4
with:
- submodules: recursive
-
- - name: install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y flatpak flatpak-builder
-
- - name: setup flathub
- run: |
- sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- sudo flatpak install -y flathub org.gnome.Sdk//48 org.gnome.Platform//48 org.freedesktop.Sdk.Extension.node20//24.08 org.freedesktop.Sdk.Extension.rust-stable//24.08
- sudo flatpak update
-
- - name: setup flatpak
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ submodules: true
+ - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
cache-key: flatpak-builder-${{ github.sha }}
- build-bundle: true
- repository-url: https://flathub.org/repo/flathub.flatpakrepo
- repository-name: flathub
-
- - name: Upload flatpak to release
- uses: softprops/action-gh-release@v2
+ - uses: softprops/action-gh-release@v2
with:
- files: "*.flatpak"
+ files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
tag_name: nightly
- name: 'Emerald Nightly'
- body: |
- # Emerald Legacy Launcher (Nightly)
- # What to download?
- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
- ---
- # Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
- ---
- # macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: false
- prerelease: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 4333557..c2ebabe 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -15,28 +15,20 @@ jobs:
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest'
args: '--target x86_64-apple-darwin'
- - platform: 'ubuntu-22.04'
- args: ''
- - platform: 'windows-latest'
- args: ''
+ # - platform: 'ubuntu-22.04'
+ # args: ''
+ # - platform: 'windows-latest'
+ # args: ''
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- - name: Extract version
- id: get_version
- shell: bash
- run: |
- VERSION=$(node -p "require('./package.json').version")
- echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- echo "APP_VERSION=$VERSION" >> $GITHUB_ENV
-
- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
+ sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: setup pnpm
uses: pnpm/action-setup@v4
@@ -60,220 +52,61 @@ jobs:
- name: install frontend dependencies
run: pnpm install
- - name: Build and create artifacts for macOS
+ - name: Create PKG with post-install script
if: matrix.platform == 'macos-latest'
run: |
- # Build the app once
- pnpm build
- cd src-tauri
- cargo build --release --target ${{ matrix.args }}
- cd ..
-
- # Setup target architecture name
- TARGET_ARCH=${{ matrix.args == '--target aarch64-apple-darwin' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
-
- # Prepare paths for .app bundle
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS"
- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources"
-
- cp "src-tauri/target/$TARGET_ARCH/release/emerald-legacy-launcher" "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/"
-
- printf '\n\n\n\n CFBundleExecutable\n emerald-legacy-launcher\n CFBundleIdentifier\n com.emerald.legacy\n CFBundleName\n Emerald Legacy Launcher\n CFBundleVersion\n ${{ steps.get_version.outputs.VERSION }}\n CFBundleShortVersionString\n ${{ steps.get_version.outputs.VERSION }}\n CFBundlePackageType\n APPL\n NSHighResolutionCapable\n \n LSApplicationCategoryType\n public.app-category.games\n\n\n' > "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Info.plist"
-
- if [ -f "src-tauri/icons/icon.icns" ]; then
- cp src-tauri/icons/icon.icns "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources/"
- fi
-
- chmod +x "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/emerald-legacy-launcher"
-
- # Create PKG (optional, using the built .app)
+ # Create temporary directory for PKG creation
mkdir -p pkg_temp/scripts
cp scripts/postinstall.sh pkg_temp/scripts/
- pkgbuild --root "src-tauri/target/$TARGET_ARCH/release/bundle/macos" \
+ # Build the app first
+ pnpm tauri build -- ${{ matrix.args }}
+
+ # Find the built app
+ APP_PATH=$(find src-tauri/target/release/bundle/macos/ -name "*.app" | head -1)
+ APP_NAME=$(basename "$APP_PATH")
+
+ # Create PKG with post-install script
+ pkgbuild --root "$APP_PATH/.." \
--install-location /Applications \
--scripts pkg_temp/scripts \
--identifier "com.emerald.legacy" \
- --version "${{ steps.get_version.outputs.VERSION }}" \
+ --version "1.0.0" \
+ --install-location "/Applications" \
+ --root "$APP_PATH" \
"Emerald-Legacy-Launcher.pkg"
- # Create DMG
- cd "src-tauri/target/$TARGET_ARCH/release/bundle/macos"
- hdiutil create -volname "Emerald Legacy Launcher" -srcfolder "Emerald Legacy Launcher.app" -ov -format UDZO "Emerald Legacy Launcher.dmg"
-
- # Move artifacts to final locations
- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
- mv "Emerald Legacy Launcher.dmg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
-
- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/macos/"
- mv "$GITHUB_WORKSPACE/Emerald-Legacy-Launcher.pkg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/macos/"
-
- - name: Build with tauri-action for Windows and Linux
- if: matrix.platform != 'macos-latest'
- uses: tauri-apps/tauri-action@v0
+ # Move PKG to bundle directory
+ mkdir -p src-tauri/target/release/bundle/macos/
+ mv "Emerald-Legacy-Launcher.pkg" src-tauri/target/release/bundle/macos/
+ - uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
- tagName: v${{ steps.get_version.outputs.VERSION }}
- releaseName: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
- releaseBody: |
- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
- ---
-
- ## ⚠️ Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+ tagName: v__VERSION__
+ releaseName: 'Emerald v__VERSION__'
+ releaseBody: '*pls edit me*'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
- - name: Upload all artifacts to release
- if: matrix.platform != 'macos-latest'
- uses: softprops/action-gh-release@v2
- with:
- files: |
- src-tauri/target/release/bundle/deb/*.deb
- src-tauri/target/release/bundle/appimage/*.AppImage
- src-tauri/target/release/bundle/rpm/*.rpm
- src-tauri/target/release/bundle/msi/*.msi
- src-tauri/target/release/bundle/nsis/*.exe
- tag_name: v${{ steps.get_version.outputs.VERSION }}
- name: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
- body: |
- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
- ---
-
- ## ⚠️ Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: true
- prerelease: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Upload macOS DMGs to release
- if: matrix.platform == 'macos-latest'
- uses: softprops/action-gh-release@v2
- with:
- files: |
- src-tauri/target/release/bundle/dmg/*.dmg
- src-tauri/target/release/bundle/macos/*.pkg
- tag_name: v${{ steps.get_version.outputs.VERSION }}
- name: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
- body: |
- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
-
- ## 📥 What to download?
-
- ### 🐧 GNU/Linux
- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
-
- ### 🍎 macOS
- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
-
- ### 🪟 Windows
- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
-
- ---
-
- ## ⚠️ Windows SmartScreen
- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
-
- 1. Click the **"More info"** link under the main text.
- 2. Click the **"Run anyway"** button that appears.
-
- ## 🍎 macOS Installation
- Download the DMG file, open it, and drag the app to Applications folder.
- If you see "app damaged" error, right-click the app → Open → confirm Open.
- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
- draft: true
- prerelease: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
publish-flatpak:
runs-on: ubuntu-latest
permissions:
contents: write
- needs: publish-tauri
+ needs: publish-tauri # Wait for Tauri release to be created
+ container:
+ image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
+ options: --privileged
steps:
- uses: actions/checkout@v4
with:
- submodules: recursive
-
- - name: install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y flatpak flatpak-builder
-
- - name: setup flathub
- run: |
- sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- sudo flatpak install -y flathub org.gnome.Sdk//48 org.gnome.Platform//48 org.freedesktop.Sdk.Extension.node20//24.08 org.freedesktop.Sdk.Extension.rust-stable//24.08
- sudo flatpak update
-
- - name: setup flatpak
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ submodules: true
+ - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
cache-key: flatpak-builder-${{ github.sha }}
- build-bundle: true
- repository-url: https://flathub.org/repo/flathub.flatpakrepo
- repository-name: flathub
- uses: softprops/action-gh-release@v2
with:
files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
diff --git a/README.md b/README.md
index 07c9aa9..cc9a185 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,7 @@
-

+
Emerald Legacy Launcher
-
FOSS cross-platform launcher for Minecraft Legacy Console Edition
-
-
-
-
-
-
+
FOSS cross-platform launcher for Minecraft Legacy Console Edition
@@ -27,300 +21,57 @@
---
-## Table of Contents
+
-- [Overview](#overview)
-- [Features](#features)
-- [Screenshots](#screenshots)
-- [Installation](#installation)
- - [Windows](#windows)
- - [macOS](#macos)
- - [Linux](#linux)
-- [Game Versions & Partnerships](#game-versions--partnerships)
-- [Building from Source](#building-from-source)
-- [Development](#development)
- - [Project Structure](#project-structure)
- - [Tech Stack](#tech-stack)
-- [Troubleshooting](#troubleshooting)
-- [Roadmap](#roadmap)
-- [Acknowledgments](#acknowledgments)
-- [License](#license)
+
+
+### PROJECT OVERVIEW
+Emerald Legacy Launcher started as a solo project to create a better way to play Legacy Console Edition. Over time, other developers joined the effort, bringing expertise from various preservation projects into one place.
+
+**Our Philosophy:** For too long, the LCE scene has been fragmented across different, often resource-heavy launchers. Emerald was built to stop this fragmentation and centralize everything into a single, definitive hub. By avoiding bloated frameworks and utilizing a modern Rust/Tauri stack, we deliver a high-performance, cross-platform experience that uses only ~15MB of RAM, leaving all your PC's resources dedicated to the game itself.
---
-## Overview
+### CORE FEATURES
-Emerald Legacy Launcher is a **high-performance, open-source launcher** for Minecraft Legacy Console Edition (LCE). Built to centralize the fragmented LCE scene, it provides a lightweight, unified hub for playing your favorite console versions of Minecraft on PC.
-
-**Why Emerald?** Traditional launchers often rely on bloated frameworks, consuming excessive resources. Emerald utilizes a modern **Rust/Tauri** architecture, using only **~15MB of RAM** — leaving your PC's resources dedicated to the game itself.
-
-The project started as a solo effort and has grown into a collaborative community project, bringing together expertise from various LCE preservation initiatives.
+
+
+
+ EASY SETUP
+ An automated installation process for TU19, Legacy Evolved and 360Revived, with more versions coming in future updates.
+ |
+
+ RUST BACKEND
+ A memory-safe backend that handles all file operations and game execution with minimal overhead.
+ |
+
+
+
+ EASY CONFIGURATION
+ An integrated settings menu to change your username and manage game parameters directly through the launcher.
+ |
+
+ TAURI FRONTEND
+ A lightweight frontend that handles the user interface and configuration management via webview.
+ | *Proudly developed by a passionate team from the LCE community.*
+
+
---
-## Features
-
-### Core Features
-
-| Feature | Description |
-|---------|-------------|
-| **Automated Setup** | One-click installation for TU19, Legacy Evolved, Revelations, and 360Revived versions |
-| **Cross-Platform** | Native support for Windows, macOS (Intel & Apple Silicon), and Linux |
-| **Lightweight** | Very light RAM usage thanks to Rust backend and Tauri framework |
-| **Easy Configuration** | Built-in settings for username, game parameters, and profiles |
-
-### Advanced Features
-
-| Feature | Description |
-|---------|-------------|
-| **3D Skin Viewer** | Interactive skin preview using Three.js with layer support |
-| **Custom Skins** | Import and manage your own skins with local storage |
-| **Controller Support** | Full gamepad navigation support (keyboard fallback included) |
-| **Discord Rich Presence** | Show your current activity and game status on Discord |
-| **Workshop and modloader** | *(Coming Soon)* Community content and mod browser |
+### [DEVELOPMENT ROADMAP](https://github.com/orgs/Emerald-Legacy-Launcher/projects/2)
+Click the heading above to track progress, view active tasks, and see upcoming launcher features.
---
-## Game Versions & Partnerships
-
-Emerald Legacy Launcher integrates multiple community-driven builds of Minecraft Legacy Console Edition. Each build brings unique features and improvements to the classic LCE experience.
-
-### Available Builds
-
-| Build | Developer | Platform | Description |
-|-------|-----------|----------|-------------|
-| **[Revelations](https://github.com/itsRevela/MinecraftConsoles)** | [@itsRevela](https://github.com/itsRevela) | GitHub | Enhanced LCE with uncapped FPS, graphics fixes, hardcore hearts, and dedicated server security. Features LAN multiplayer, split-screen, and keyboard & mouse support. |
-| **[360 Revived](https://github.com/BluTac10/360Revived)** | [@BluTac10](https://github.com/BluTac10) | GitHub | PC port of Xbox 360 Edition TU19 with desktop optimizations. Features keyboard & mouse, fullscreen, LAN multiplayer, dedicated server, and split-screen support. |
-| **[Legacy Evolved](https://codeberg.org/piebot/LegacyEvolved)** | [@piebot](https://codeberg.org/piebot) | Codeberg | Backports newer title updates to LCE TU19 base. Currently porting TU25 (~98% complete) and TU31 (~76% complete). |
-| **[Title Update 19](https://github.com/smartcmd/MinecraftConsoles)** | [@smartcmd](https://github.com/smartcmd) | GitHub | Minecraft LCE v1.6.0560.0 with compilation fixes. Base version for modding with keyboard & mouse, fullscreen, LAN multiplayer, and dedicated server support. |
-
-### Coming Soon: Legacy Minecraft Restoration Project (LMRP)
-
-**LMRP** will be our **first major collaboration** to bring fully functional **online mini-games** back to Legacy Console Edition. This groundbreaking project aims to:
-
-- Restore classic LCE mini-games (Battle, Tumble, Glide)
-- Preserve the authentic mini-game mechanics and maps
-
-Stay tuned for updates on this exciting partnership! :)
+> ### ACKNOWLEDGMENTS
+> * **The Emerald Team:** Technical development and maintenance.
+> * **4J Studios & Mojang:** Original creators of Legacy Console Edition.
+> * **smartcmd & The LCE Community:** Research and foundations for Legacy Console Edition on PC.
+> * **LegacyEvolved:** Backporting TUs into smartcmd
+> * **Tauri & Rust:** Core technologies.
---
-## Screenshots
-
-
-
----
-
-## Installation
-
-### Windows
-
-Download the latest release from [GitHub Releases](https://github.com/Emerald-Legacy-Launcher/Emerald-Legacy-Launcher/releases):
-
-| Format | Best For |
-|--------|----------|
-| `.exe` (NSIS) | Standard installation with uninstaller |
-| `.msi` | Enterprise/IT deployment |
-
-**⚠️ Windows SmartScreen Warning:**
-> Since the launcher is unsigned, Windows may show a "Windows protected your PC" warning. To proceed:
-> 1. Click **"More info"**
-> 2. Click **"Run anyway"**
-
-### macOS
-
-| Format | Architecture |
-|--------|-------------|
-| `.dmg` (x64) | Intel Macs |
-| `.dmg` (aarch64) | Apple Silicon (M1/M2/M3) |
-
-**Installation Steps:**
-1. Download the appropriate DMG for your Mac
-2. Open the DMG and drag the app to Applications
-3. If you see "app is damaged" error:
- - Right-click the app → **Open** → confirm **Open**
- - Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
-
-### Linux
-
-Multiple distribution formats available:
-
-| Format | Distribution |
-|--------|------------|
-| `.deb` | Debian, Ubuntu, Linux Mint |
-| `.rpm` | RHEL, Fedora, openSUSE |
-| `.AppImage` | Universal (no installation required) |
-| `Flatpak` | Universal with sandboxing |
-
-**Flatpak Installation:**
-```bash
-flatpak install emerald.flatpak
-```
-
-**Dependencies (if building from source):**
-```bash
-# Ubuntu/Debian
-sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
-
-# Fedora
-sudo dnf install webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-devel patchelf systemd-devel
-```
-
----
-
-## Building from Source
-
-### Requirements
-
-- **Node.js** (LTS recommended)
-- **Rust** (latest stable)
-- **PNPM** (recommended) or NPM
-- Platform-specific dependencies:
- - Linux: `WebKit2GTK-4.1`
- - macOS: WebKit (pre-installed)
- - Windows: Edge WebView2 Runtime (usually pre-installed)
-
-### Build Steps
-
-```bash
-# Clone the repository
-git clone https://github.com/Emerald-Legacy-Launcher/Emerald-Legacy-Launcher.git
-cd Emerald-Legacy-Launcher
-
-# Install dependencies
-pnpm install
-
-# Development mode
-pnpm tauri dev
-
-# Production build
-pnpm tauri build
-```
-
-**Flatpak Build:**
-```bash
-pnpm flatpak
-```
-
----
-
-## Development
-
-### Project Structure
-
-```
-Emerald-Legacy-Launcher/
-├── src/ # React frontend
-│ ├── components/ # UI components
-│ ├── context/ # React context providers
-│ ├── hooks/ # Custom React hooks
-│ ├── pages/ # Page components
-│ ├── services/ # API/services layer
-│ └── css/ # Global styles
-├── src-tauri/ # Rust backend
-│ ├── src/ # Rust source code
-│ ├── Cargo.toml # Rust dependencies
-│ └── tauri.conf.json # Tauri configuration
-├── public/ # Static assets
-├── flatpak/ # Flatpak build config
-└── scripts/ # Build scripts
-```
-
-### Tech Stack
-
-| Layer | Technology | Version |
-|-------|-----------|---------|
-| **Backend** | Rust | 2021 Edition |
-| **Framework** | Tauri | v2 |
-| **Frontend** | React | ^19.1.0 |
-| **Language** | TypeScript | ~5.8.3 |
-| **Styling** | TailwindCSS | v4 |
-| **Animations** | Framer Motion | ^12.36.0 |
-| **3D Rendering** | Three.js | ^0.183.2 |
-| **Build Tool** | Vite | ^7.0.4 |
-
-### Key Dependencies
-
-**Rust Crates:**
-- `tauri` — Cross-platform app framework
-- `serde` — Serialization
-- `reqwest` — HTTP client
-- `tokio` — Async runtime
-- `rfd` — Native file dialogs
-
-**Frontend Packages:**
-- `@tauri-apps/api` — Tauri JS API
-- `tauri-plugin-drpc` — Discord Rich Presence
-- `tauri-plugin-gamepad-api` — Controller support
-
----
-
-## Troubleshooting
-
-### macOS "App is Damaged" Error
-
-```bash
-# Remove quarantine attributes
-xattr -cr /path/to/Emerald\ Legacy\ Launcher.app
-```
-
-### Linux WebView Issues
-
-Ensure WebKit2GTK-4.1 is installed:
-```bash
-# Check installation
-pkg-config --modversion webkit2gtk-4.1
-
-# Reinstall if needed
-sudo apt install --reinstall libwebkit2gtk-4.1-0
-```
-
-### Game Not Launching
-
-1. Verify game files are properly installed via the launcher
-2. Check that Wine/Proton is installed (Linux only)
-3. Check that Wine/GPTK3 are installed (macOS only)
-4. Ensure your GPU drivers are up to date
-
-### Controller Not Detected
-
-- Connect controller before launching the launcher
-- Xbox and PlayStation controllers are best supported
-
----
-
-## Roadmap
-
-Track our progress and upcoming features on the [Development Roadmap](https://github.com/orgs/Emerald-Legacy-Launcher/projects/2).
-
-**Planned Features:**
-- [ ] Workshop content browser
-- [ ] Additional TU versions support
-- [ ] Enhanced mod support
-- [ ] Cloud sync for settings/skins
-- [ ] Auto-updater integration
-
----
-
-## Acknowledgments
-
-*Proudly developed by a passionate team from the LCE community.*
-
-- **The Emerald Team** — Technical development and maintenance
-- **4J Studios & Mojang** — Original creators of Legacy Console Edition
-- **smartcmd & The LCE Community** — Research and foundations for LCE on PC
-- **Tauri & Rust Communities** — Core technologies and ecosystem
-
----
-
-## License
-
-This project is licensed under the **[GNU GPL v3 License](LICENSE)**.
-
-You are free to:
-- **Use** — Use the launcher for any purpose
-- **Study** — Access and study the source code
-- **Share** — Redistribute copies
-- **Improve** — Submit improvements and modifications
-
-See `LICENSE` file for full terms.
+***This project is licensed under the [GNU GPL v3 License](LICENSE)***
+
diff --git a/changes.patch b/changes.patch
new file mode 100644
index 0000000..697248e
--- /dev/null
+++ b/changes.patch
@@ -0,0 +1,7350 @@
+diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
+index 819e519..973fe13 100644
+--- a/.github/workflows/nightly.yml
++++ b/.github/workflows/nightly.yml
+@@ -52,206 +52,61 @@ jobs:
+
+ - name: install frontend dependencies
+ run: pnpm install
+-
+- - name: Build and create DMG for macOS
++ - name: build and fix macOS
+ if: matrix.platform == 'macos-latest'
+ run: |
+- pnpm build
+- cd src-tauri
+- cargo build --release --target ${{ matrix.args }}
+- cd ..
+-
+- TARGET_ARCH=${{ matrix.args == '--target aarch64-apple-darwin' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
+-
+- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS"
+- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources"
+-
+- cp "src-tauri/target/$TARGET_ARCH/release/emerald-legacy-launcher" "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/"
+-
+- printf '\n\n\n\n CFBundleExecutable\n emerald-legacy-launcher\n CFBundleIdentifier\n com.emerald.legacy\n CFBundleName\n Emerald Legacy Launcher\n CFBundleVersion\n 1.0.0\n CFBundleShortVersionString\n 1.0.0\n CFBundlePackageType\n APPL\n NSHighResolutionCapable\n \n LSApplicationCategoryType\n public.app-category.games\n\n\n' > "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Info.plist"
+-
+- if [ -f "src-tauri/icons/icon.icns" ]; then
+- cp src-tauri/icons/icon.icns "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources/"
+- fi
+-
+- chmod +x "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/emerald-legacy-launcher"
+-
+- cd "src-tauri/target/$TARGET_ARCH/release/bundle/macos"
+- hdiutil create -volname "Emerald Legacy Launcher" -srcfolder "Emerald Legacy Launcher.app" -ov -format UDZO "Emerald Legacy Launcher.dmg"
+-
+- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
+- mv "Emerald Legacy Launcher.dmg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
+-
+- - name: Build with tauri-action for Windows and Linux
+- if: matrix.platform != 'macos-latest'
+- uses: tauri-apps/tauri-action@v0
++ pnpm tauri build ${{ matrix.args }}
++ pnpm run post-build:macos
++ - uses: tauri-apps/tauri-action@v0
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ tagName: nightly
+ releaseName: 'Emerald Nightly'
+ releaseBody: |
+ # Emerald Legacy Launcher (Nightly)
+-
+- ## 📥 What to download?
+-
+- ### 🐧 GNU/Linux
+- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
+- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
+- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
+- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
+-
+- ### 🍎 macOS
+- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
+- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
+-
+- ### 🪟 Windows
+- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
+- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
+-
++ # What to download?
++ - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
++ - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
++ - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
++ - `Emerald.Legacy.Launcher-*_x64.dmg` for macOS (Intel)
++ - `Emerald.Legacy.Launcher-*_aarch64.dmg` for macOS (M-series)
++ - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
++ - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
+ ---
+-
+- ## ⚠️ Windows SmartScreen
++ # Windows SmartScreen
+ This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+
+ 1. Click the **"More info"** link under the main text.
+ 2. Click the **"Run anyway"** button that appears.
+-
+- ## 🍎 macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
++ ---
++ # macOS "Damaged" Error Fix
++ The macOS builds now include automatic fixes for Gatekeeper quarantine issues. The app should launch without "application is damaged" errors.
++
+ releaseDraft: false
+ prerelease: true
+ args: ${{ matrix.args }}
+
+- - name: Upload all artifacts to release
+- uses: softprops/action-gh-release@v2
+- with:
+- files: |
+- src-tauri/target/release/bundle/deb/*.deb
+- src-tauri/target/release/bundle/appimage/*.AppImage
+- src-tauri/target/release/bundle/rpm/*.rpm
+- src-tauri/target/release/bundle/msi/*.msi
+- src-tauri/target/release/bundle/nsis/*.exe
+- tag_name: nightly
+- name: 'Emerald Nightly'
+- body: |
+- # Emerald Legacy Launcher (Nightly)
+- # What to download?
+- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
+- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
+- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
+- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
+- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
+- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
+- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
+- ---
+- # Windows SmartScreen
+- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+-
+- 1. Click the **"More info"** link under the main text.
+- 2. Click the **"Run anyway"** button that appears.
+- ---
+- # macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+- draft: false
+- prerelease: true
+-
+- - name: Upload macOS DMGs to release
+- if: matrix.platform == 'macos-latest'
+- uses: softprops/action-gh-release@v2
+- with:
+- files: src-tauri/target/release/bundle/dmg/*.dmg
+- tag_name: nightly
+- name: 'Emerald Nightly'
+- body: |
+- # Emerald Legacy Launcher (Nightly)
+- # What to download?
+- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
+- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
+- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
+- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
+- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
+- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
+- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
+- ---
+- # Windows SmartScreen
+- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+-
+- 1. Click the **"More info"** link under the main text.
+- 2. Click the **"Run anyway"** button that appears.
+- ---
+- # macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+- draft: false
+- prerelease: true
+- env:
+- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+-
+ nightly-flatpak:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+- needs: nightly-tauri
++ needs: nightly-tauri # Wait for Tauri release to be created
++ container:
++ image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
++ options: --privileged
+ steps:
+ - uses: actions/checkout@v4
+ with:
+- submodules: recursive
+-
+- - name: install dependencies
+- run: |
+- sudo apt-get update
+- sudo apt-get install -y flatpak flatpak-builder
+-
+- - name: setup flathub
+- run: |
+- sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+- sudo flatpak install -y flathub org.gnome.Sdk//48 org.gnome.Platform//48 org.freedesktop.Sdk.Extension.node20//24.08 org.freedesktop.Sdk.Extension.rust-stable//24.08
+- sudo flatpak update
+-
+- - name: setup flatpak
+- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
++ submodules: true
++ - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ with:
+ bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
+ manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
+ cache-key: flatpak-builder-${{ github.sha }}
+- build-bundle: true
+- repository-url: https://flathub.org/repo/flathub.flatpakrepo
+- repository-name: flathub
+-
+- - name: Upload flatpak to release
+- uses: softprops/action-gh-release@v2
++ - uses: softprops/action-gh-release@v2
+ with:
+- files: "*.flatpak"
++ files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
+ tag_name: nightly
+- name: 'Emerald Nightly'
+- body: |
+- # Emerald Legacy Launcher (Nightly)
+- # What to download?
+- - `Emerald.Legacy.Launcher-*.rpm` for GNU/Linux (RHEL)
+- - `Emerald.Legacy.Launcher-*.deb` for GNU/Linux (Debian+Ubuntu)
+- - `Emerald.Legacy.Launcher-*.AppImage` for GNU/Linux (Universal)
+- - `Emerald Legacy Launcher*.dmg` for macOS (Intel + M-series)
+- - `Emerald.Legacy.Launcher-*.exe` for Windows (Setup)
+- - `Emerald.Legacy.Launcher-*.msi` for Windows (Setup)
+- - `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak` for GNU/Linux (Flatpak)
+- ---
+- # Windows SmartScreen
+- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+-
+- 1. Click the **"More info"** link under the main text.
+- 2. Click the **"Run anyway"** button that appears.
+- ---
+- # macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+- draft: false
+- prerelease: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
+index 4333557..c2ebabe 100644
+--- a/.github/workflows/publish.yml
++++ b/.github/workflows/publish.yml
+@@ -15,28 +15,20 @@ jobs:
+ args: '--target aarch64-apple-darwin'
+ - platform: 'macos-latest'
+ args: '--target x86_64-apple-darwin'
+- - platform: 'ubuntu-22.04'
+- args: ''
+- - platform: 'windows-latest'
+- args: ''
++ # - platform: 'ubuntu-22.04'
++ # args: ''
++ # - platform: 'windows-latest'
++ # args: ''
+
+ runs-on: ${{ matrix.platform }}
+ steps:
+ - uses: actions/checkout@v4
+
+- - name: Extract version
+- id: get_version
+- shell: bash
+- run: |
+- VERSION=$(node -p "require('./package.json').version")
+- echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
+- echo "APP_VERSION=$VERSION" >> $GITHUB_ENV
+-
+ - name: install dependencies (ubuntu only)
+ if: matrix.platform == 'ubuntu-22.04'
+ run: |
+ sudo apt-get update
+- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
++ sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
+
+ - name: setup pnpm
+ uses: pnpm/action-setup@v4
+@@ -60,220 +52,61 @@ jobs:
+
+ - name: install frontend dependencies
+ run: pnpm install
+- - name: Build and create artifacts for macOS
++ - name: Create PKG with post-install script
+ if: matrix.platform == 'macos-latest'
+ run: |
+- # Build the app once
+- pnpm build
+- cd src-tauri
+- cargo build --release --target ${{ matrix.args }}
+- cd ..
+-
+- # Setup target architecture name
+- TARGET_ARCH=${{ matrix.args == '--target aarch64-apple-darwin' && 'aarch64-apple-darwin' || 'x86_64-apple-darwin' }}
+-
+- # Prepare paths for .app bundle
+- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS"
+- mkdir -p "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources"
+-
+- cp "src-tauri/target/$TARGET_ARCH/release/emerald-legacy-launcher" "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/"
+-
+- printf '\n\n\n\n CFBundleExecutable\n emerald-legacy-launcher\n CFBundleIdentifier\n com.emerald.legacy\n CFBundleName\n Emerald Legacy Launcher\n CFBundleVersion\n ${{ steps.get_version.outputs.VERSION }}\n CFBundleShortVersionString\n ${{ steps.get_version.outputs.VERSION }}\n CFBundlePackageType\n APPL\n NSHighResolutionCapable\n \n LSApplicationCategoryType\n public.app-category.games\n\n\n' > "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Info.plist"
+-
+- if [ -f "src-tauri/icons/icon.icns" ]; then
+- cp src-tauri/icons/icon.icns "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/Resources/"
+- fi
+-
+- chmod +x "src-tauri/target/$TARGET_ARCH/release/bundle/macos/Emerald Legacy Launcher.app/Contents/MacOS/emerald-legacy-launcher"
+-
+- # Create PKG (optional, using the built .app)
++ # Create temporary directory for PKG creation
+ mkdir -p pkg_temp/scripts
+ cp scripts/postinstall.sh pkg_temp/scripts/
+
+- pkgbuild --root "src-tauri/target/$TARGET_ARCH/release/bundle/macos" \
++ # Build the app first
++ pnpm tauri build -- ${{ matrix.args }}
++
++ # Find the built app
++ APP_PATH=$(find src-tauri/target/release/bundle/macos/ -name "*.app" | head -1)
++ APP_NAME=$(basename "$APP_PATH")
++
++ # Create PKG with post-install script
++ pkgbuild --root "$APP_PATH/.." \
+ --install-location /Applications \
+ --scripts pkg_temp/scripts \
+ --identifier "com.emerald.legacy" \
+- --version "${{ steps.get_version.outputs.VERSION }}" \
++ --version "1.0.0" \
++ --install-location "/Applications" \
++ --root "$APP_PATH" \
+ "Emerald-Legacy-Launcher.pkg"
+
+- # Create DMG
+- cd "src-tauri/target/$TARGET_ARCH/release/bundle/macos"
+- hdiutil create -volname "Emerald Legacy Launcher" -srcfolder "Emerald Legacy Launcher.app" -ov -format UDZO "Emerald Legacy Launcher.dmg"
+-
+- # Move artifacts to final locations
+- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
+- mv "Emerald Legacy Launcher.dmg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/dmg/"
+-
+- mkdir -p "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/macos/"
+- mv "$GITHUB_WORKSPACE/Emerald-Legacy-Launcher.pkg" "$GITHUB_WORKSPACE/src-tauri/target/release/bundle/macos/"
+-
+- - name: Build with tauri-action for Windows and Linux
+- if: matrix.platform != 'macos-latest'
+- uses: tauri-apps/tauri-action@v0
++ # Move PKG to bundle directory
++ mkdir -p src-tauri/target/release/bundle/macos/
++ mv "Emerald-Legacy-Launcher.pkg" src-tauri/target/release/bundle/macos/
++ - uses: tauri-apps/tauri-action@v0
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+- tagName: v${{ steps.get_version.outputs.VERSION }}
+- releaseName: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
+- releaseBody: |
+- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
+-
+- ## 📥 What to download?
+-
+- ### 🐧 GNU/Linux
+- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
+- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
+- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
+- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
+-
+- ### 🍎 macOS
+- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
+- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
+-
+- ### 🪟 Windows
+- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
+- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
+-
+- ---
+-
+- ## ⚠️ Windows SmartScreen
+- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+-
+- 1. Click the **"More info"** link under the main text.
+- 2. Click the **"Run anyway"** button that appears.
+-
+- ## 🍎 macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
++ tagName: v__VERSION__
++ releaseName: 'Emerald v__VERSION__'
++ releaseBody: '*pls edit me*'
+ releaseDraft: true
+ prerelease: false
+ args: ${{ matrix.args }}
+
+- - name: Upload all artifacts to release
+- if: matrix.platform != 'macos-latest'
+- uses: softprops/action-gh-release@v2
+- with:
+- files: |
+- src-tauri/target/release/bundle/deb/*.deb
+- src-tauri/target/release/bundle/appimage/*.AppImage
+- src-tauri/target/release/bundle/rpm/*.rpm
+- src-tauri/target/release/bundle/msi/*.msi
+- src-tauri/target/release/bundle/nsis/*.exe
+- tag_name: v${{ steps.get_version.outputs.VERSION }}
+- name: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
+- body: |
+- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
+-
+- ## 📥 What to download?
+-
+- ### 🐧 GNU/Linux
+- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
+- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
+- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
+- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
+-
+- ### 🍎 macOS
+- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
+- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
+-
+- ### 🪟 Windows
+- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
+- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
+-
+- ---
+-
+- ## ⚠️ Windows SmartScreen
+- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+-
+- 1. Click the **"More info"** link under the main text.
+- 2. Click the **"Run anyway"** button that appears.
+-
+- ## 🍎 macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+- draft: true
+- prerelease: false
+- env:
+- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+-
+- - name: Upload macOS DMGs to release
+- if: matrix.platform == 'macos-latest'
+- uses: softprops/action-gh-release@v2
+- with:
+- files: |
+- src-tauri/target/release/bundle/dmg/*.dmg
+- src-tauri/target/release/bundle/macos/*.pkg
+- tag_name: v${{ steps.get_version.outputs.VERSION }}
+- name: 'Emerald v${{ steps.get_version.outputs.VERSION }}'
+- body: |
+- # Emerald Legacy Launcher v${{ steps.get_version.outputs.VERSION }}
+-
+- ## 📥 What to download?
+-
+- ### 🐧 GNU/Linux
+- - **RHEL/Fedora**: `Emerald.Legacy.Launcher-*.rpm`
+- - **Debian/Ubuntu**: `Emerald.Legacy.Launcher-*.deb`
+- - **Universal**: `Emerald.Legacy.Launcher-*.AppImage`
+- - **Flatpak**: `io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak`
+-
+- ### 🍎 macOS
+- - **Intel Mac**: `Emerald.Legacy.Launcher_*.x64.dmg`
+- - **M-series Mac**: `Emerald.Legacy.Launcher_*.aarch64.dmg`
+-
+- ### 🪟 Windows
+- - **Setup Installer**: `Emerald.Legacy.Launcher-*.exe`
+- - **MSI Installer**: `Emerald.Legacy.Launcher-*.msi`
+-
+- ---
+-
+- ## ⚠️ Windows SmartScreen
+- This software is completely safe. Because the launcher is unsigned, you will see a "Windows protected your PC" window. To proceed:
+-
+- 1. Click the **"More info"** link under the main text.
+- 2. Click the **"Run anyway"** button that appears.
+-
+- ## 🍎 macOS Installation
+- Download the DMG file, open it, and drag the app to Applications folder.
+- If you see "app damaged" error, right-click the app → Open → confirm Open.
+- Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+- draft: true
+- prerelease: false
+- env:
+- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+-
+ publish-flatpak:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+- needs: publish-tauri
++ needs: publish-tauri # Wait for Tauri release to be created
++ container:
++ image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08
++ options: --privileged
+ steps:
+ - uses: actions/checkout@v4
+ with:
+- submodules: recursive
+-
+- - name: install dependencies
+- run: |
+- sudo apt-get update
+- sudo apt-get install -y flatpak flatpak-builder
+-
+- - name: setup flathub
+- run: |
+- sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+- sudo flatpak install -y flathub org.gnome.Sdk//48 org.gnome.Platform//48 org.freedesktop.Sdk.Extension.node20//24.08 org.freedesktop.Sdk.Extension.rust-stable//24.08
+- sudo flatpak update
+-
+- - name: setup flatpak
+- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
++ submodules: true
++ - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
+ with:
+ bundle: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
+ manifest-path: flatpak/io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.yml
+ cache-key: flatpak-builder-${{ github.sha }}
+- build-bundle: true
+- repository-url: https://flathub.org/repo/flathub.flatpakrepo
+- repository-name: flathub
+ - uses: softprops/action-gh-release@v2
+ with:
+ files: io.github.Emerald_Legacy_Launcher.Emerald_Legacy_Launcher.flatpak
+diff --git a/README.md b/README.md
+index 07c9aa9..cc9a185 100644
+--- a/README.md
++++ b/README.md
+@@ -1,13 +1,7 @@
+
+-

++

+
Emerald Legacy Launcher
+-
FOSS cross-platform launcher for Minecraft Legacy Console Edition
+-
+-
+-
+-
+-
+-
++
FOSS cross-platform launcher for Minecraft Legacy Console Edition
+
+
+
+@@ -27,300 +21,57 @@
+
+ ---
+
+-## Table of Contents
++
+
+-- [Overview](#overview)
+-- [Features](#features)
+-- [Screenshots](#screenshots)
+-- [Installation](#installation)
+- - [Windows](#windows)
+- - [macOS](#macos)
+- - [Linux](#linux)
+-- [Game Versions & Partnerships](#game-versions--partnerships)
+-- [Building from Source](#building-from-source)
+-- [Development](#development)
+- - [Project Structure](#project-structure)
+- - [Tech Stack](#tech-stack)
+-- [Troubleshooting](#troubleshooting)
+-- [Roadmap](#roadmap)
+-- [Acknowledgments](#acknowledgments)
+-- [License](#license)
++
++
++### PROJECT OVERVIEW
++Emerald Legacy Launcher started as a solo project to create a better way to play Legacy Console Edition. Over time, other developers joined the effort, bringing expertise from various preservation projects into one place.
++
++**Our Philosophy:** For too long, the LCE scene has been fragmented across different, often resource-heavy launchers. Emerald was built to stop this fragmentation and centralize everything into a single, definitive hub. By avoiding bloated frameworks and utilizing a modern Rust/Tauri stack, we deliver a high-performance, cross-platform experience that uses only ~15MB of RAM, leaving all your PC's resources dedicated to the game itself.
+
+ ---
+
+-## Overview
++### CORE FEATURES
+
+-Emerald Legacy Launcher is a **high-performance, open-source launcher** for Minecraft Legacy Console Edition (LCE). Built to centralize the fragmented LCE scene, it provides a lightweight, unified hub for playing your favorite console versions of Minecraft on PC.
+-
+-**Why Emerald?** Traditional launchers often rely on bloated frameworks, consuming excessive resources. Emerald utilizes a modern **Rust/Tauri** architecture, using only **~15MB of RAM** — leaving your PC's resources dedicated to the game itself.
+-
+-The project started as a solo effort and has grown into a collaborative community project, bringing together expertise from various LCE preservation initiatives.
++
++
++
++ EASY SETUP
++ An automated installation process for TU19, Legacy Evolved and 360Revived, with more versions coming in future updates.
++ |
++
++ RUST BACKEND
++ A memory-safe backend that handles all file operations and game execution with minimal overhead.
++ |
++
++
++
++ EASY CONFIGURATION
++ An integrated settings menu to change your username and manage game parameters directly through the launcher.
++ |
++
++ TAURI FRONTEND
++ A lightweight frontend that handles the user interface and configuration management via webview.
++ | *Proudly developed by a passionate team from the LCE community.*
++
++
+
+ ---
+
+-## Features
+-
+-### Core Features
+-
+-| Feature | Description |
+-|---------|-------------|
+-| **Automated Setup** | One-click installation for TU19, Legacy Evolved, Revelations, and 360Revived versions |
+-| **Cross-Platform** | Native support for Windows, macOS (Intel & Apple Silicon), and Linux |
+-| **Lightweight** | Very light RAM usage thanks to Rust backend and Tauri framework |
+-| **Easy Configuration** | Built-in settings for username, game parameters, and profiles |
+-
+-### Advanced Features
+-
+-| Feature | Description |
+-|---------|-------------|
+-| **3D Skin Viewer** | Interactive skin preview using Three.js with layer support |
+-| **Custom Skins** | Import and manage your own skins with local storage |
+-| **Controller Support** | Full gamepad navigation support (keyboard fallback included) |
+-| **Discord Rich Presence** | Show your current activity and game status on Discord |
+-| **Workshop and modloader** | *(Coming Soon)* Community content and mod browser |
++### [DEVELOPMENT ROADMAP](https://github.com/orgs/Emerald-Legacy-Launcher/projects/2)
++Click the heading above to track progress, view active tasks, and see upcoming launcher features.
+
+ ---
+
+-## Game Versions & Partnerships
+-
+-Emerald Legacy Launcher integrates multiple community-driven builds of Minecraft Legacy Console Edition. Each build brings unique features and improvements to the classic LCE experience.
+-
+-### Available Builds
+-
+-| Build | Developer | Platform | Description |
+-|-------|-----------|----------|-------------|
+-| **[Revelations](https://github.com/itsRevela/MinecraftConsoles)** | [@itsRevela](https://github.com/itsRevela) | GitHub | Enhanced LCE with uncapped FPS, graphics fixes, hardcore hearts, and dedicated server security. Features LAN multiplayer, split-screen, and keyboard & mouse support. |
+-| **[360 Revived](https://github.com/BluTac10/360Revived)** | [@BluTac10](https://github.com/BluTac10) | GitHub | PC port of Xbox 360 Edition TU19 with desktop optimizations. Features keyboard & mouse, fullscreen, LAN multiplayer, dedicated server, and split-screen support. |
+-| **[Legacy Evolved](https://codeberg.org/piebot/LegacyEvolved)** | [@piebot](https://codeberg.org/piebot) | Codeberg | Backports newer title updates to LCE TU19 base. Currently porting TU25 (~98% complete) and TU31 (~76% complete). |
+-| **[Title Update 19](https://github.com/smartcmd/MinecraftConsoles)** | [@smartcmd](https://github.com/smartcmd) | GitHub | Minecraft LCE v1.6.0560.0 with compilation fixes. Base version for modding with keyboard & mouse, fullscreen, LAN multiplayer, and dedicated server support. |
+-
+-### Coming Soon: Legacy Minecraft Restoration Project (LMRP)
+-
+-**LMRP** will be our **first major collaboration** to bring fully functional **online mini-games** back to Legacy Console Edition. This groundbreaking project aims to:
+-
+-- Restore classic LCE mini-games (Battle, Tumble, Glide)
+-- Preserve the authentic mini-game mechanics and maps
+-
+-Stay tuned for updates on this exciting partnership! :)
++> ### ACKNOWLEDGMENTS
++> * **The Emerald Team:** Technical development and maintenance.
++> * **4J Studios & Mojang:** Original creators of Legacy Console Edition.
++> * **smartcmd & The LCE Community:** Research and foundations for Legacy Console Edition on PC.
++> * **LegacyEvolved:** Backporting TUs into smartcmd
++> * **Tauri & Rust:** Core technologies.
+
+ ---
+
+-## Screenshots
+-
+-
+-
+----
+-
+-## Installation
+-
+-### Windows
+-
+-Download the latest release from [GitHub Releases](https://github.com/Emerald-Legacy-Launcher/Emerald-Legacy-Launcher/releases):
+-
+-| Format | Best For |
+-|--------|----------|
+-| `.exe` (NSIS) | Standard installation with uninstaller |
+-| `.msi` | Enterprise/IT deployment |
+-
+-**⚠️ Windows SmartScreen Warning:**
+-> Since the launcher is unsigned, Windows may show a "Windows protected your PC" warning. To proceed:
+-> 1. Click **"More info"**
+-> 2. Click **"Run anyway"**
+-
+-### macOS
+-
+-| Format | Architecture |
+-|--------|-------------|
+-| `.dmg` (x64) | Intel Macs |
+-| `.dmg` (aarch64) | Apple Silicon (M1/M2/M3) |
+-
+-**Installation Steps:**
+-1. Download the appropriate DMG for your Mac
+-2. Open the DMG and drag the app to Applications
+-3. If you see "app is damaged" error:
+- - Right-click the app → **Open** → confirm **Open**
+- - Or run: `xattr -cr "/Applications/Emerald Legacy Launcher.app"`
+-
+-### Linux
+-
+-Multiple distribution formats available:
+-
+-| Format | Distribution |
+-|--------|------------|
+-| `.deb` | Debian, Ubuntu, Linux Mint |
+-| `.rpm` | RHEL, Fedora, openSUSE |
+-| `.AppImage` | Universal (no installation required) |
+-| `Flatpak` | Universal with sandboxing |
+-
+-**Flatpak Installation:**
+-```bash
+-flatpak install emerald.flatpak
+-```
+-
+-**Dependencies (if building from source):**
+-```bash
+-# Ubuntu/Debian
+-sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libudev-dev
+-
+-# Fedora
+-sudo dnf install webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-devel patchelf systemd-devel
+-```
+-
+----
+-
+-## Building from Source
+-
+-### Requirements
+-
+-- **Node.js** (LTS recommended)
+-- **Rust** (latest stable)
+-- **PNPM** (recommended) or NPM
+-- Platform-specific dependencies:
+- - Linux: `WebKit2GTK-4.1`
+- - macOS: WebKit (pre-installed)
+- - Windows: Edge WebView2 Runtime (usually pre-installed)
+-
+-### Build Steps
+-
+-```bash
+-# Clone the repository
+-git clone https://github.com/Emerald-Legacy-Launcher/Emerald-Legacy-Launcher.git
+-cd Emerald-Legacy-Launcher
+-
+-# Install dependencies
+-pnpm install
+-
+-# Development mode
+-pnpm tauri dev
+-
+-# Production build
+-pnpm tauri build
+-```
+-
+-**Flatpak Build:**
+-```bash
+-pnpm flatpak
+-```
+-
+----
+-
+-## Development
+-
+-### Project Structure
+-
+-```
+-Emerald-Legacy-Launcher/
+-├── src/ # React frontend
+-│ ├── components/ # UI components
+-│ ├── context/ # React context providers
+-│ ├── hooks/ # Custom React hooks
+-│ ├── pages/ # Page components
+-│ ├── services/ # API/services layer
+-│ └── css/ # Global styles
+-├── src-tauri/ # Rust backend
+-│ ├── src/ # Rust source code
+-│ ├── Cargo.toml # Rust dependencies
+-│ └── tauri.conf.json # Tauri configuration
+-├── public/ # Static assets
+-├── flatpak/ # Flatpak build config
+-└── scripts/ # Build scripts
+-```
+-
+-### Tech Stack
+-
+-| Layer | Technology | Version |
+-|-------|-----------|---------|
+-| **Backend** | Rust | 2021 Edition |
+-| **Framework** | Tauri | v2 |
+-| **Frontend** | React | ^19.1.0 |
+-| **Language** | TypeScript | ~5.8.3 |
+-| **Styling** | TailwindCSS | v4 |
+-| **Animations** | Framer Motion | ^12.36.0 |
+-| **3D Rendering** | Three.js | ^0.183.2 |
+-| **Build Tool** | Vite | ^7.0.4 |
+-
+-### Key Dependencies
+-
+-**Rust Crates:**
+-- `tauri` — Cross-platform app framework
+-- `serde` — Serialization
+-- `reqwest` — HTTP client
+-- `tokio` — Async runtime
+-- `rfd` — Native file dialogs
+-
+-**Frontend Packages:**
+-- `@tauri-apps/api` — Tauri JS API
+-- `tauri-plugin-drpc` — Discord Rich Presence
+-- `tauri-plugin-gamepad-api` — Controller support
+-
+----
+-
+-## Troubleshooting
+-
+-### macOS "App is Damaged" Error
+-
+-```bash
+-# Remove quarantine attributes
+-xattr -cr /path/to/Emerald\ Legacy\ Launcher.app
+-```
+-
+-### Linux WebView Issues
+-
+-Ensure WebKit2GTK-4.1 is installed:
+-```bash
+-# Check installation
+-pkg-config --modversion webkit2gtk-4.1
+-
+-# Reinstall if needed
+-sudo apt install --reinstall libwebkit2gtk-4.1-0
+-```
+-
+-### Game Not Launching
+-
+-1. Verify game files are properly installed via the launcher
+-2. Check that Wine/Proton is installed (Linux only)
+-3. Check that Wine/GPTK3 are installed (macOS only)
+-4. Ensure your GPU drivers are up to date
+-
+-### Controller Not Detected
+-
+-- Connect controller before launching the launcher
+-- Xbox and PlayStation controllers are best supported
+-
+----
+-
+-## Roadmap
+-
+-Track our progress and upcoming features on the [Development Roadmap](https://github.com/orgs/Emerald-Legacy-Launcher/projects/2).
+-
+-**Planned Features:**
+-- [ ] Workshop content browser
+-- [ ] Additional TU versions support
+-- [ ] Enhanced mod support
+-- [ ] Cloud sync for settings/skins
+-- [ ] Auto-updater integration
+-
+----
+-
+-## Acknowledgments
+-
+-*Proudly developed by a passionate team from the LCE community.*
+-
+-- **The Emerald Team** — Technical development and maintenance
+-- **4J Studios & Mojang** — Original creators of Legacy Console Edition
+-- **smartcmd & The LCE Community** — Research and foundations for LCE on PC
+-- **Tauri & Rust Communities** — Core technologies and ecosystem
+-
+----
+-
+-## License
+-
+-This project is licensed under the **[GNU GPL v3 License](LICENSE)**.
+-
+-You are free to:
+-- **Use** — Use the launcher for any purpose
+-- **Study** — Access and study the source code
+-- **Share** — Redistribute copies
+-- **Improve** — Submit improvements and modifications
+-
+-See `LICENSE` file for full terms.
++***This project is licensed under the [GNU GPL v3 License](LICENSE)***
++
+diff --git a/public/images/minecraft_title_revelations.png b/public/images/minecraft_title_revelations.png
+deleted file mode 100644
+index aa9e0aa55ab2c609b19fe8563d635af88604e429..0000000000000000000000000000000000000000
+GIT binary patch
+literal 0
+Hc-jL100001
+
+literal 275708
+zc-qu@(_>v<)a{9F+qSI}+qT-+w#}xo8arvy#;3K@a39Wj*n91{
+z*IaYVImcLQN2@4FBf;at0{{RdSs4j60015Z004J@g$7-TR|4RIF7R86i>tV*Ndrk`
+zCB?bf__(>5*qPY?0Ga4qbx$32PaNTg>NlsGzv->2|>Ya*A^@^|bNN<02*`B^
+zG^}b``UXtNN^tDzG%|Pcn9z{&?Iu!5iJC!rWA6+mx2`(lEs+cV{9A#e%`NXO
+zSAZ258M!ldC3q5Dnk>az=Zf<+oShlUH&JNtWw5Kql`p?&yR860qQ=Yu0<&8L?_uc>
+zLA0CNHQ;?Kc8?$5#?oah0W!P*Uf8e|KL8~OfZfFsUDA&bkby9ZML0;;!pSTQ23SzJ
+z`a12mT9z}tuHFlkX$A(UZ22LPM5l741klN+z<~#RM+MN1puxF5
+z_D8#YrZBLs9AWI4n!JhmQz`Jv>(vTy${o1duG9J7N`Ivh9gn*=xH`KuG&DE80Lwpo
+z9#IOe?m2vkuSYq;7T%=KFK-%b0K6E0ba@|&KfMPsoN?NrCg_#G@b
+zvsuy){e;!4skVc`$9fD?2lF#<`q-^Z?l1f>F*
+zZ7QH4$~6xp;_NfE3O9GcpX#M*L40!}fHs9B?&s|YlZ6zEf+aE~&59y6i_;;$hlRlG#*<8Df%t^w9cxC5WLd~x
+z4rdeUqQb(78!vTKNOuf$gUd>E0FM8{|3kVOk|)Jd@ODi4jGNm7C^BPIAoIp81@fJ4&c`a~qZyIwAf?U+WII(+_9Ab>KSux|9Lb1)vsc
+zDY`v|pf7$;c>Bc5zJqELizF(sziiv}8tPH)RoIW?ow18VBqUIl6jcXOJ%ocS2vu2z
+zf|1IO@|=^D$*5k
+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
+zawXi2Qhz+dWzlogf6@7J^&s+01(z+H(~x
+ztt3qqw3T7A^NlnmT;H(^PRPF#lO9i$n7?shVfoME+H&&;fH8y@MTv(fOcE8R%w666
+z`^~JHLAMPRe|wv^2)^i-ETqQ9(|z(9BZUNn<~rj@nJ_HR((-EB;cUn5SmovbQ_cim
+zhpnL5Sv3bIJaSA#vlnfF>wzEYhv$E!x3;%@0Dc51qCJupnJB(>hjeO|%Rq&;`E2u1NgUG^taNo=nJCjXUtj0(cv}^Hb#q2&
+zXWN#K>tQrRx!(u#b8AbH2ik_w3~2_H^}LDWCB;P6EgMRYet0t+WFC^-2RIYip&*}E
+ztO%8bUkJO_>oE#cMyv?KF!^_!a6KJc6eaaalU|=wriBtK;jLT5;E|khIu3>iR1I}Y
+z?AdAPW!74KQILuG3kO*(ZjMiW_aDeJ4?ZCr62$M#(Bv?LL4
+z(}kOzL11jt1QrY$`(2cm`uZTT&nuh`tnOqd(zii3Qf!lJ4PrYz`5(;3zqLk_SVmee
+zNeCru_1kB7Pi<^f)C?qgGsyPeQzXS?o$F6jP@@NbqQ_*I$Aqsl0IHv}J{D27jZM
+z6t&=2C&`bt;IlUrF3`+!Tjf@-GDvp`@i1C!$Oc}$NFNGMTC+yk=yHWnEUBp4_=E!9
+zD9a=bmWwr=wLP0v!Jx?0gX5sIGJbH>$wqMvK{!)!|9+$ygi`xz6P^Q|Y1ZHnsurfF
+zu33~|%qO+yj2Q`he2ul|U0;>E-ln8bKCmDUwpLW6KjjQ>2_xZmkudCqV+(IFH})8%
+z(hJhUr&q)IAau4iKmXe3t_O9s*Zqm+83tNY#qa5hyh6AWQIM@lPlj3XMH;M8_nYu-jUUgN%}5HW~b`siblT8-jo2TH=;waY*g&V)>kQuE%|R+|Im3DPM_6hZz2d$Mi^v1kL@
+z6f^C%>!!Pm#q~Jad}XN(6&jms_63PT)wTk3;81TXJ=p-i%vp&EtCvEE=Ar7WPi0Gs
+zj6h%pwk|sRO3MZ_A__`2azDB)4iKIQO?rM|ad&Jy9XH;5DX;UCk!IRTO=rNYsJyPK
+zcj9DjK}>ozJfSSm1W-SNyXo`rW^MpCx=#vDo5?br%e0nvh$;lsmyR3)M!{KJx_fy+
+zrW^gl)zs9aCnrpd(-f}5nX$rrgLrFl8~f_|Yh@vvptf_-g3Ls-Dco7CuZ)-vui@qX
+zb0Gn{v(w3E=9K&10kcU7(H{|w5!PVnng&j@6b$G1P6BUm6
+zQJzo-i6S3&vAWl8=26_xjEZ(->UerVb94T#nE1#W4oQ4bOF69n+nbbG(u2|FTe4He
+zC`M?DK||DO-f4ecy8rv@G2_QZ9e4)jool?tjwO#iAG4y+mv2^=r+wH
+zvUH$^iuZRQ!?Hz9p;bGfeA@di!5D_gs?~}@6k(1AlUg|@H(=&`F7!QcV$hgdmSP6>
+za567+_lp@NI-PtD3y>ONl&Z$a9clAzTine<`AN?sjwat9yZd>(d*CG=b?;)p`ls%<
+zJx%&dcc!BZ6_pkPWDs@Odxg4X<>d_%B@IFmd6IaLu;kH*Q7?H>W6zWjL|e+~2!D{h
+zCAP*Aswu(aF>1y){=I6?n2^|H*Lxx4%Qypq`PHdW=
+z@?$D>2!jw8e>8hRHt_3(sw}D}AWtx8F%foXGv&(jey749V+3>J3Hr$XJ*%gp0tHkW
+z@&ni^5_(NlXSUpD9aLtOs#u>U%Q`8#V+lY1QUBZDb#ekn;PK$2*#Sq&3%!2AEQb?W
+z;li7VL#VcXXv2Q@gE&%qS5N*rtjg<$6WTF2^alqAUVkdeem>7&N*17AwA^9;LHTZ3
+zPe0*+yT(aed0{e%hhQ
+za`TNpk|HH?JrE*P+^V`xT(@GyyRV7Jn2eu)j4c?~P(*I3v$B#9$-R-@V#>X6tZ~`F
+z!3L`|ah<0BlcSI<00jzOTW;TCBCk4rbIy6Pp-M$tJ=Dr=eqaZI
+zxOup!MmEspBa~*@UH@w!C|QVv4TB|_+9H^IR+c2w&O=DMOnO0dT_g9Xbul^Vw*uep`yfJ=E7DLh_95&3N
+z+k1*nknRQXCS@tz$A+S;VgKD|8mN>pl02kq$YWq(n7dbR)f(E}SCIBpgB=kf<)cEg
+z%_uG|&UiuuGKwlYvS=|GC!EZ&7s9GX#j2|&M?I#1G?IEEtOI4)u}k~UZ{maymOl)n7g9Z!}Mu>V%%90j7^`n{z|`2yJ-H;tQDV-WvzaTIEnHYA!-@E&EW+&
+z775BxQ$%^Y9&Wd3GR(K-XNaL&s0~L;tsNlajLd0j6!#B!NJ@8x0AfSgPu}71=_>
+z4l3yEmQkcVm$xTEpNA*4fH!g~g6ttXray=r23SqUkM!AWpWWP@$iqVgVO|6B+kE`*
+zpSW{G0`oj9Fq#=oTGX|)DxYc#3QU>w+-2MCW2R}`6^=;=2dHqEhP2x~2{4{%)Mf3S
+z&Rsi+E#k-rAR8X2FUr`pnds<&
+z{Sn}iueG#~M^3s9>#Gj69jWf!V_Vy%mV1dz%m;K10vm|luF4g--mR*`ix*$-%t40v
+z5*_xNy5I?D?aU_pypM6d+&XSW$Wz;;g+WJdb&$b&C-Y_Oz^$;LcFF?R5?}-7mec!S
+z1lYbAg`+@f=AEp!uV?EZ{>vNV!c5ufDU}78aq^YJaHTH9s@5a5V#1SvgK`fAqdNO7
+zMfIwb>U8dcDO_C>Ck$ib?#u#N?lVoZPvjQtzs>}5xi?oN!T`C38&}?)PqWUEs4riX
+z_AcTHu5bcxn}>j?pNpEe{88kwS)?*{dqc$U1!gNS$!EUf^J-{nRhFx);>p*_-^AAt
+z5oHLuW_gG@s|fH`L{&^SE-?;IllUy_AkMzoj+f={v|%l6R~feJSc%4wnk&;Ms|@$n
+z)?Tm;`-m+jp4wfyRU(**+t=`8uGR~rVB*@fSTY%TzabGi*mI%vZ2;cEd&n?R3GYU(
+zH6R`-)ca=LZ5>8_5`jvh4!QIfnwy@{e#n@gs($eIpZv8%d8rg^9cCB73NOl7`w`i}
+zzS37EOfeTZSL-w(#^Nx|r!@{3G$!-@iCN34~nm$n|3s%%%Dv<5%j#Z^wFHrrrt#u$%HnXf!2kf0Ya_3y
+z<kN_3P%$3aznNH7a8Wro~lp9LFx)&ewS}0QzMw4U5o(MM>4qLJDw4FRJP%Co2
+zqe4Mr>Fs+N0OABQ$H&K1jEwRs+76_?qtTCzUmetLEWcjUjHoaE-P!Y${EFZYBd6*MSYoCQRKj7~c#3P&i-`&I?Ot;qp+hqpxa+w@yq{6c?wA9O>{F
+zWkRR@S{SFlHBM+8QyxDkGomqx(Lr3@@oXb_b-X8Ku9}?m8vH;&CY9_j+P#&SRY~vW
+zk3zP@ZM;@8rY9BCEW3lMOsT4>T6^(pL#WfKJt0+Lq(dQ$&&7W#j|(B1a)XX0
+z<@lKP(_}^h1G9d}q`oj0_Asd16?mEeelXB;QUeu|WJ*-@G{PEY)y_q{WWpy``GwjO
+zCTa*!8k-86Y8RVqN1ZrhBA$J)6ow|&6A8dxT`^HLz>@aZX500lf8NmBg`2HfkPU>MdfTiCyw!CK(%`ysZMKn;%_t<__Y>-hY%(CHWIm+GX!GmL3r+xd7=
+zZhnWZ9Ur&5Ke(|4zeZb-pShw<(Y>YQ3%kpf>xH3K@o`7RMvtbM7ZqKnwBe0X%joOF
+zJU_$CM<<~QP&@>~x+zeQqqS}wvrECoHKQ4~m;@i@D&CyOvVgd=(9kWxz(k%ECAzr3
+zJrl5CJIq#hl*e+h4J}u_fns`}>`0d%V@S$;Rc)1$rRxU&2yOs;PaRTIGgVJeL{;A`
+zaXg&D{~gt%il!xl3!k`Uun)8zgXLJ;AK`84A&g-I?yT76mhp5Uy`+CPVmmaQK6(IB
+zh>~4_A7uXYY^O=83lCgW&5<&|4g=nX;dz@FvOn
+zdP8AQcD8pYr1p~7qJdPvYB5P&K4SkEVPFf@A*{LRG<_s8swhU#YMR|a@%R4o)k)dJu%`AFc7)7Z-
+z7AB)67M9ojf%eUYJL|9;fCNG(`OOOEJ-5071iR+iPC8fRgfMSqd{Jue-O9UVb!GF*
+zcL*u-*0UykRZLh=Gfi3w>Aijm{CE>7T>G|{KYlPkbmlmth17vOLCpyh5mDWMS`GOf
+zv1hI9F;7?3S&!sed=I)(URLrcJ;L9w-a+81L3h&t1cCw;K#Va>H9GQd!%Pyo%
+zxFQc83NJOP88)b?&6-jWBA?+NeBbs?^6p&Qn}UVm%O~Te$yKm%F5bEn=fvm09_C=_
+zh;p~Bl~y+|N;2lHv1Y3cqWOapw8j&^CrGMYj
+z0lt`CtdK<)Ha&drmeZT@pW8vG7{{xu
+zxl-o-L>|94%Jvo>{mGtwU_Lf`x|#XN|2Q1^P3x7))>hl57pRRUkH39d-8+Xs3$P**
+zcX_Bp
+zm1cXsnGu*`GYP$UyJ-a{+LrIBz4JEt>Uqcze)!jmS$7QvRM-yse3EE^2Cmc1}Mm1L59N8D(+n
+zCp6OCp}~*^8h++X*x5n*+0=N_#rGLufHK-b4Z#uQE471RweP49uiJi3^Z4(Olcm7!=8)y;nsEEA=^oD1(A$x
+zvfpIif-z=PhEC=PBWW}0hAiGA^R}R}hb)~*YJ2kJ`95J4IUCgPt4-vKXs<1}_;H6)
+zvIu|N$O}H)jDxb0+j!KCUtM$5wih-Pq|E2pk4`u2_d5fru2@mzE_|^nX6`
+zKORUJS%oc)OB4J{w}$IumvNK#NBEV(d`q2U)@UyIfQ)R+QCDJw6N=>GV%o|m9m4rk
+zt5qo#RH@J*z2AiM_up`6CiYZ^>ooA|XH@M;PF>oQ3@*RjRtG!Ua^EnfQK2D8vD~vYKUUNxpzr
+z|eUF?sKk3#n{6VymC9|9=Y(I%x
+zjiXfgXgw7bfpq$_?)XF&TfZA^7;5ad8WMFnc{jfLKD`LkFV@4y&c05+xyIuo>ffqz
+zz1-)r%WJDS@nP6P&qEiM77Hut#S9M<9FekK+FOi?K+-2P5_!C&YMN76c}hq;RJ`RX
+zB)rAvM6Jj@eO0D$dbj|f->&nf><8&L;-ro374Z(
+zvHv;SksYg#5U?cxDuM>J
+z?rdo(kGA%$qKe_xU+~m9m|x_
+z2eARNGsiAfoWTK7>+N^x33xXf+e+uVRPDm%rRo<`GK$gh&8`5!+t=9dq+o!##FzDs
+zQS`2Hj?+?tT5(U$2a8uP7iiuFCJeo`)rp}UCo5lyDc!&4#b)*e8t~T=Ay6n`7U6iO
+zQD#>Gs9>V{`T_`)aP_FO*8QB*oqyO@`T4gSD{L|NI!EQi{e?gbTt!VyaA#fd=0|}E
+zYNx;da_46jWMYSfH_rU&vT02Ci76sOp-vs&e)p>v{~@!a2aaaxBa>iqwz%=%QsU;J
+z@NkJF*)G7>sal7(w(-(4B{XRzTkGCG)=Z_qa_Fm|g*6We9r|OX!vD^>RA<1)b5zOE@Beaf!LvBnk5C&r^R8U;j=!-2Q^BxEM^H
+z3~N@8YgmFvaU_C@x>3%@+;#;HQc`h!pZ>~x9Uny;*hdvDHTD8|3FIkz*@9ndYmsY?
+zy0#r$<<*w7H>3mjG6`k%1z=nY4K$7kC?f9?h7)v*%KPv{_>-$%XN*E$=|2*e-C+*+FNe*McE9vgqYW=FX3a8Cr=h-
+z-Ik`s)NsDNmT^wNe2&F64x93j7+Pst#kT{sS-(RAS;w%+`lAK$sff$5j*)>z(zJdY
+z;}%o_&&z}2F;ugs^|`rt?JX||s1RO?QI>XkhMY!z9DokHCQQo9_ttu}&FWZ`s$HZc
+zrL*GU0~ZQzejCoO0uG%}3!0kzJNu0$5vMWm9XHPe%YlEl_Ctb$nh0Fwp-N_C;L|P0
+zgJT-lv2dC_J^Bi#m$m>`A`O9cpxQP%RApD=qQMTLLGuq{Ly##leZ{<(z(8XXh9J0l
+z0CH^HBr?JvP^Q2<)pusUB`IoLunUt(5$W-9uEwdI#^IH`c1nxSI81?hR6-32N-$yx
+z9ju!~vNx#KzJ*0BN>{?Gaeo(~-tGj;>%5{Yeoz$?-a7Iph;0ccA|$)vTaS8TrGG0I
+z4%;a(^?M%VhHR(}X$7L7c&PN->WMuTYVKp`8}eX+W=(s>uyjnUWi
+zRMX!`JlmZp6IgTOgl{soRqwjBfQxuk^|&Fk@|s$pyeoyr#VUg5_VQEJ`Hq~tyYo`s
+z%q)9>xM|m(3;*4Ne(O2?>t*1h^vRJOd0Zv{8?cO=-DjBASIT^bX+H4axfAkqOhUK|
+zzCl``0z2J(gWt8lp_uddMCb2vtuFWba1C=Cd+{fz=&Pd?+;H!++$g3*q?
+zKe5o9kv?p?mo-5Y$cOR8#Kc^U9_h1LdD)>q5ZhCT|IfE_O0oS0YrFHKYuIN?7_#Rp
+z&5l4%0^oT>|H-e(iLX0%IW3a@jlPMs_ON81l5_Tst=7G?!JLWwj_YYu)U<3kkZ2)fjA^jO-(57&NpQE
+zq*V4Jj)jI7#>ck`!Hl0US1_-5!vdS>QZfRB&pwBP>2X739#=~S?pQw0&t6QpeFrXP
+zRu(!$9|{zs=$*)*D@E1Sn4ox7I+LAPXMk<%1KySXB&4{bc5h9e&9GV?SbFU=F0rxl
+zT5%%tbwyoxGohLxv1gNGquw6op%D_mvL#AhNN#*jy&lzI^jTLY5{Q=|x6Hhi9I=?j
+z`EuRTt{p**y~|Dc&04))d~5m3!rF@GEX;
+z&&sY`d&h(md+=xmw=bFX%jnm`bJvkZ@+Adc!bKojYeHymkjF-f10MUw?I$R~tZp;1
+zKe|V6%-#Fw6M1~{;hCkl_;_Nr(lB~i*^TauWTi>F1Z4^>EP%lW)IKS`&xl?*0a~jEP|35iRDxam|-De@sX%z
+z#G_)4S6KK7y`!=pi(SBbEHG3{WBFEE{
+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
+z<7ZD9o)YpdhCI0Vp
+z-Hk8pL#iUYUnJ(1tu;z|JU`cy&KS;$it-Z=lQ}Gxl~i&NL{Nl@7^l~SZznRF$k==G
+zf)alKe^2&i9IF-76^AZBk*M{MZr53}M65vVGX`lu6^{mM@K(0K6mWr}l_^1`tbAt=
+zT;FTBp@fB-pYK+x-A6Ik{;>tG?1qe<4(|xKoue3KiO~GXU)N;)Z7|vCEoNL&{&y3Y
+z?nS?oPHOw$ZvesiTjrxSA_H0h)3YnCz27=^77N2f02Ln#t_+(R`G#yfAOTGqE40tt
+z()t$@wg{KC?b*c{4AEATWXRTYw4W@}6Q3vs+metSK-sp%gsr-$k@3IhG=6d6kU
+ziz$?UbMwRifaU08C3dQ=%OQnE=ZRGN%Q7Vzi3-#Ml*O6ZNdKu$ZEdOCgH3R+u79`pp+FqQp74I_!g$njeGX?Z1Y*=@9g=4W`Ih)r<~Zz(Vp9
+zef#!JK~bxBf99)%t>an--o+R^BX0EeA9ek~Bdf~k7~iWmR3o@_skUr6w)wfOGTpYV
+z`^T6iq<8@sC?9+ao4)$J->-VxEw7RW=5E;glbN5}^r2nv#kqeKK3IN#8B90q6?Oy+
+zeBeeZqCO=eo!VHcPQ6AjvvFqZl_I4uL#mulp=t4dXF>MeTf8(u1tGf{ChbIc|LOvL
+zE0rkHr4B`I`h63{yuJC(d>>G5ZZfJCN#}o2Hhjv`9Pj74d%|?f9YltoKLyRyu|6nP
+zG>CB2s9M@l<
+z_|lC77h4T25yd0rJIB7#{@4WT@I$m^=mg{LpK#g2c$wdO$yY5pt%4H;_wd<-Wf7Xb{C17Ba;(WR$aui5sUNlcu@+`p^#)
+z_|ZmtH-~@e7&&POPtFc|J_=sMBXIw(F&c?JmP0Z8lh@ypN-^FXzm5IDN#Ma=0Xhg|gC{85cNYD|oD(8KV-iTqb>=^B4ZDJ%$3m1!3E@i+OX0RBbtN
+zVIuaGneX-WgUmLat-|JR#D>Y>{v2Wo;JyA98hSY!O2|wAXWQ<>URqY>aB#6T8__Vd
+zLvmecrswtjgG&6!#Kl8NRb!@VAynN=ku!s%tCi%an&eFJ0s^w^-C3@s`R^%zvjHMZ
+zq-qn=udyRV;w7MJ+#nB~;0T+vwKF0!n=Q^dj$>->Gmwq4%~H^*Ztw1J5c?f&L}6>b
+zc?e{5QAI{Z)E~?bJrL7l6Cn133yL2(ie-GbL*fH|T`kJW$~Jp$pFRwGBVkAXDX*6S
+zvb5iS{4=2m<%^-2YtuBB2=BvQ+xb@MA9Vvaa%(osgpHwD3IL$=TG2h+o(ebIoOZhQ
+z%CVU*JxiO7BVsEar32<$sF;F|PN68%4z=UN-ehKAS(T2Z3NJPHo_LNIZrABTs%_s2!qFza?Zb2W&+LVaQ5WH(w#<&g>6
+zgt#b%=*M+Nc841Xyc1u>z+2i)9G=j{Sd-1oWx^wh>s_xPo#j&x}=eSrpDzJG7}-f?!D@G??rv
+z-?&|KYkFOdE}QudPEQA*V)<|G2v~o_vFHyN%|Q4UNK?Ee5XtuUEKTa4j=iuAYs<
+z=y^i7_<64cE)p5O+&wUDdgg=HwO@>sedxQ^O01R%;(mZ}f5zMb_}upe?E}`QBEj^I
+zXO8big;3*dM7B1<^7=$HPtWmEP_nnq=6}mZcMkrgyE>Ie!f{7rB}$N&7U5IIKlZM_
+zo*aq&kNLLLx0WhJ7bXm|=`a+pGq&P^ol4aTt9&6|p`ezRH9**HB-u$3v=Nu5ZD;-G
+zukq#&QA|XBNbU$9qqP4~@7+#+ER?;LP^a$-9yxM5Iqo2RQ&81SUR!jwvSM=x8fKFm
+zwbgRW_E7>wa@Tic&H5`kkcj}U6_;gx4+J`{M@B?kbd$y6M5Sp&voGkuR}BW{tm|d3
+z?wyIUG`MvTTCcqQxg7Ub9jyXAUhf|k#;1{OUK_sqLxB<@u^4!X7WC@y`S`4Xb_u_T
+z{h(lwt~corN7n9v~u{6&p6B>b{cJrB(Kt37wXl3l(F;Pq@#9@DTwi4Ug
+zsucwJrT?c2F^Bj(E-4}^49Tp7|360G`xSdB8FVC6qwoE6#sjscpn<^8U8WR$=Rf>?
+z11K?Zc1f;iU-DK0YiE?|**LcXV+F*fh!k8;{5C>An6NqR>dcJM2gA)PEY#SKTlNl&
+zn*J!8E4H0DRW=^V1VXYkcJE)TJ&tYYx-5SJ+QtBXP+0)DgCAv$J^$d~WL{2)rE$nd
+ziZoq?xjijpCdP;6gF%BUJ{-yq0;?V#Dn-
+zrz_o;-8)eVKe%>R(A4|=oik=yLuS9}CXT!xS7Us3&hipj=|JPqhYi4AI14D2${i7<
+zz!fDW3}wZx|L0C-Qfn`5r34=aBif($h@{Dwff$0EK$1P*D>!_d=JbY#k3Ulr!42!k
+z5QlH7Y4QCD=G&a9g2-|FblTn$|3>2v`e<2d1~?0TImfgT5uqvpJO
+zoMI+kaT~8~u4~}}ugC9E667p%pL<29e(&Fi83(x0k(N_gAOzT)?NJa$;_7y=f~Y~?$P`n65>yGK*9mrGG-4`#@jF5fV9
+z7CLt_69p^s+VIQTw&VK!36I};r%!>ygBSl;HXl4xV4yo0K6;^&m?T--7cyfLr9r6@
+znehgvN!aSTcgkmH+R7dBc{g4|UJiG;+$ID5kkHT%@fQ{oga{)gU5M>B^xFBMZP76>
+ztS~CcV*-7;Vl)$e0b6x1+&ch_H1zbrgU6yw=>N<#yNRZ_3n$MP%(A@XK=7%3CGUE<
+zo*org6W8M3aMP8g8tO2QOrSHaxGhxat|xWMz#4QB=H#UtWM(B51+(@i>5zYxm$m3K
+z{ufBXZ_ops1}!gKWGwyLR!f3aS!prscr#0rRkhu0###T2N0U~p1w{O@+D3D^$ku#D
+zwRj&E(Zq}&!K0_jP&F_uhz6tpZ6;qr%xqsm{%501A36LUKx?ZLqioi#rIqE>
+zihv&|!~=jtC=Rd+bJ!1A`E*3+M}e+}l;yWtRcYCX2=;jcuz#}=E_CesZB(^*Igp@F
+z|2NhWTi-~EA8w$foY*K+RZ%$)W^b#QH`NnhVk-oOJ(#bmU?)TP5OfonWW!#=MZla&
+zbNiVVA+Bp|_!Z~)UTTQiaXcrZ^$&|%n9|{}Y5o@)5rKm6G#8<1Yum*Lk-HI@kdScs
+zzIqqtMvED3Xm76|nna48^kcQhpX7CMW1-jx$H7|JFg1c@H~COIS9sMVLWsoc;*!eR
+zRR|PUS`r>qg9X^~$fI}(a$1-0LvfVup)~4+Je@k>z&;u}
+z{EeqInlOd?InIsV(W(wxHbhOQ4TqHqSn-0CPC_^%LMA}Ox=$V0sEinxlSmQaO~}~J
+z&lnLIIj5=q^~&*0s3$Js-{|PbZOi=P;(wDl-~=NAo&f*<;1+k!-~0r4ifIt~HLJT^
+zf2}q?q&v;@s0Z6FIf~+Y(8Lx}5$>s>n&YB_XJ)Hq3Ur(?F2|MJnhb=tcXNSgRl@~hY5TucdE_Rbe>n5k7L-7JBDTV)X}@C3O&
+zE-qou)J1h8J^E#E*vqPIYJ{SwjE0sHWT>7ln3?z0-
+zqNk~thbK{+hLUH*(q>*un~@}4tf)zXYgeb!xiizQAvEGfxv<^+t5~lpP*|9TIzo&T
+zAXobQUree+N6}6}L}}f-Uc!GqU6TpDf_c=~{oPalsX?TR1f|w)(%1Yls*L;o6>_o8
+zRe;dzMsYSzBcSGPrv=)`1p$M(W{il{CY&|AHf)R}8@!%1RbyyiuCbpIs;#Z4rxzp5
+zpjH0vL(ZPREy9MW8fxuKLyw+?*iTv`^PH#xH>{$xvi&E12B@y3#X<>*C-55+Blx11
+zwh9-^W#~l&L<0v?5v+ry^+J(c!B8AA&3a!+s|~SP|GJlwJ#6!9XYZB8M*=0D{NNAr
+zZrTqxA-O=Oj0-p6*7OuwgpugO1hm>c>uh}avlw|(cm&l4=un?Ar|Gyy(IU@pB*mnu
+zEBFGTLpzbW#@8_PGJI(GF*VNqFYv?CW;$=I3p?gfwoGcm>t@4&X)YK7GxH%-IqryE
+zZUwQef;OcJP9EYx#;8RB{Ce3i#s0z-g?oZ-g;ppWSoT=mFexI$>
+z2pPch@~{MqB)Nd&d;7AqKcv6?sJmnD_U*yFoJ)NRuz*N34Lo#0FwD9Dw{KZHbs&9%jCv^-wyG&jkwEHhNLV?Lo)~+KkUK!z~
+zuzEUNgtt<%b=KxVGSdNt3nMsUNevZEaj?MJ*_H%OF9yXp255|v>6v3PmJ~!lLKTPE
+z(
+zYiF-mE!->L!G|`8xk5a
+zHM_=2i9Ejh2Fp!I|IM*YQBgDR*vFSC?WfbN$JTA@mQ%~*BC|rJV0zVv^jrCY8ELRN
+zU4RC8M9iH_VM6*o&LA#JPFCFb9p2kgB_S!(&!6<7k{01`7CSz$m>50Bw~`g<6Z_8Z
+z_xKxBEoR~%3$_YT!>bpG-#n{MjZI{{Ecy9j1;-&L?ovFgR`}fVs4@M2NV8AG(`QW@
+zZ75xN=m{zu>cWSuVh*kKj
+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
+zPeX)k)4P^@Y>XG)1(QM3tQ7Br~
+zsF8>Gf;q2bWMr-P6tM25aE33#ig}JrRJ{FfLQ-hdg!|Z0UK6(MlOyRTXL<(G
+zoKF9@8sF3v{lsR`e`NGgyZlqnK9F0MmGx%(G1*VoCJYonn)JxX$AA;brk$}}_7ZBwIquW=d9~AtBwCI*PkQ|D
+zzvho6`+EI$FC&Zv#ryqyf{&dNu^pfFXG8F-Zj5p-;)6Zrn-`$ia|5jVGO>ba^-6ajNOc%BKUraQ82H)KDuvU08!
+z8zVvTgU8B_U744py)6-^bO8T)eD-}Qe%LICRXmW%M;4zuJ3YF;W~5LC+MhL*X@p_jG@qgI0L)G-AdSjbD@l$PadsA!nf=18&gY|~
+z4p#-UC4o>m-Aq}OuwPp`XC$F|kT*|e&feZagJIXS(Ws|QKV&p|WI_XG0ZZ4EriNQN
+ztL`q6lAF~D_z33H!_oN=NVe0{k3R^!KNxQhTc9N9x%CL0toTkfw`t_fPR|AUULSXb
+zOgH1~3))B@I&OEp`MwkJFIu1BFx;On<1K8ac0CgyAdCoI9E1e-Qz4Pr%#y$rX1U{}
+zqm!fD*M$;-s<$3H#uy90E+8r2?SKFNZ3?`d`u5@3bpgRx&J$_Ft0uNfI>##~xr5#t
+z-*d@8Q%nDtBLi1oEMFE_Y~=>2{7m0$gXei${n;{b$ig%~_lciW2W)hhu?fGz>rn=Arx^P#A7Vmh3k?
+zsm!c+glz8gqmZmD`-{gGE%
+zwZwJTd#&@m)h_C*{_1-d`c8<&*r{+WqPCG+N9!@4Ew}2_=j?Xghcvi{*y2FxI>~#x
+zdhKR9i$^tFw?A*LDQ;OjCdgv@UrT${aEQWbGL>2^0h3!(4En-ERAxSSdTWS
+zpny0CV&5pPA6I?pUT8-|v^nIWmJ@!X6t`?`p}@h=`_X|*X=tN5u)xH(hx^*ma4^s<
+zgS(HK>dMgu-M-}tZdrY&ikuqo%hL)$IEXESLHuPTnRcC8N@9cv3u)Cs^7@U3rkQZ=%WJ6HR
+z!q$wqroJCq-BkG=G*@PSu}Ok~w&awfT=7r0-kdt|A0FtlUdv&wyN
+zPE?&uR;&^*LVHha@wa07zN@4Y^HK!W^X^nR($=EuXYwr-TCaI>z-(TmT}geD)p6_C
+z?{4ZwueX*%1^YwMNJUhd4-P-X8iR(gTc`8)?_XGb>u1z^0V95#$2HHh5f#Zy#2}Nw
+zh_sqg$)&M6p@CL%-Tr~b+HxJ}y?z9mW%LDg`1+|t4*C{{2;*e#2qD3fsx1L)Jw=W`Fd4}`
+zYbXGBIl0~dLmd5MSb=DqTr!S;H^)_HUL{#>or39M7pZ|
+z_v%sxvLoqAmDG+ho3&qCYz-~y$gjiUQQLyPG;M^k9o%j^Y;=#x@9wQOE`Y+br3DCv}k
+zH<^Ql~bm;<*Dy_u})ZkZh9p8tXdw7#IJv^SPpE7o-85ll?)C5v&
+zyTI*gX}_TkmAQ?G9`e}EX4Nm^%5ioJ9bf?gHH6kIZB10DdudvP$nOb4sQ6cZOd6cE
+zO9`Y4$@aWULmWW;jB&56WvR$-pl!)eb*7RkX0>%ed|WHG7)8q6D9-N<2f=7MN$={3
+zx~Ib(pR5v!XuWj2Z~c~aODk+_{Z?l-@lVajdfXTjWvTORe#IUz-ih>?pPmAu)JjUM
+z*?*8f^PO_SZU**MXfU}lXggtx6n!&CJ)f=WxJjKKr&
+zlLACd6>T_b`yVn;%+oA2#>~ak-X3Mw1+RD*)cZfEEV3*uQ
+zI9Al~{K`hmfq?<7?}pNX+JNYY2)Op=p3sA1))le*mKGFsoyM-LVu;W-dA3Trid5v>^Ru)MLP9Q7e8GgM4FLY#Z
+z<#!=DzlCDNnE~UoB@Wynr8%XoSu9c@=o!9@_T$+>S2_Z`x+#i#~
+z`gGMa^`W+nIIhDENILnkw6HeDB|V
+zOaMtj-X?1Zn?H6?R!JIRuD|FQfV=r~u{JuN(ApXMH83&H*7V{OS24bVO7fqQV62)xGjK{5^IHLWi#mKYykxyvYCm#ThPw^F6hM
+zjX-H7P2+v(h47gfrE%R17V0=4I~N;58Cm58VsYQR7$P|BCpRhW3Eq&;UyM~CJVDF)
+z?pu8?yC5t#3QpboVdwMhWV`%0iE^MlSCsa`dX#&eStepJG676#q$JxF!r9PL;GZHy
+z{K#lRG1nbo?YbiZ|`W}xX+=W*SNr^@|+g0qfeL<|Q$h6_y+>Li(^2h?G~j=;d%_LNc(BoSghn39V%-?Rj09Lx{PHC)TR2+x{R_
+zt_uwOv@KC>ZOb=y@82%ZV{qmMW!1jx>8o3P%oNfe2K0VS@uBEN`2%|BP!B+5m@c0=
+zsif2t%LduX$8Y+g>~=`
+z79;3SB;&sTirM|bDSah;7B)7M8xP_gleA8O2f!0)f5gsc$5!>DbkMKqze_C?j=&7-
+zL4^N3%*WTEQTL?vZ($CngAx%RPFmPR8RhR_||#^zM3
+z*#xX3$#3);Z8fD}ch|~Gkf4o41~bf;+1W{XOyRa_tD>%k%fIqV-&Y{OM_{I;{_e
+zo$E{Qfs6)INzFL;nJGebR)0iE8sGpRSiD+Nn~m29z?m(|YblYW1;GChzw@x?CcwtU
+z@7-!t!>GtU@id#vvbB1)l$3yh^5K10+%6LC(QR6bSeh+1HZkdUqK1xEDZabA+q!0K
+zOh<&4X6TeSSNB}^-m#wIxPqXerI85@=-Dz167O|NuNz{OSp~|ny3W(dSlKG|urjYQ
+zSYDVP|L+2vEbbPe(SMRzXD0j%lUhrgHFbD;fpBd%Uk8DnfDUWcq3=
+zPHy(|vGmPfa5j%PT>?B?p^X9uEfcCV6=oso`wlUYDKI&2TNAXydWEp&x(PuuGV*UM
+zC{0)69r^NMJ0#=OE)OH&2_dY^S{zk
+zxO=`ESR>}^xjr>>@m7yrIDA{1;5vw4q{EZZAI0r
+zc3PI~p~#Y)`;Re;$_$u=YU|nIv&yBmLhZa<$N|(v2E5n=B%3!t}
+zY8Lt$l#qLHz?MtJjgi^p6(MWa6*&-znP24#;Zj&!g|tA|hC12)K>AV9gQxFeN60P&=-_f_yD9m-%&8GGK{|C@BlV8exZGwc`v;R`V37#+7@P(+6P7%
+zeJF@9^a~S-%I_%Srvh%Um)|SDOM-?$K%g>NX<1oRlWn$)Wog;vsx+hV`P-}5HZ?76
+zAH@eM1UFy=5eG-LDt-%0vFAECIBN7Z%F4narCaZ?BRcckVV=#~#5(JMVTfIskD-0^
+zYu#vGqoHG$32
+zAxU$q^QnFA>#*PP?Dq0@jKAe_Lt2-$X15mOvHetCkP+cl{fF&*7XJCu(vDnK@Nkmi
+zGv^+V?ER#r9jILMyx40yPyb+_s~rw~(^7MgqLhKt<|@!hXf}7F;N|1n{O0DNdH7Qm
+znu@OC`ei2B?)|~5vPuy<{oF$ZxSW|8)DIy+W{G9X7L$OgqN=i})h<1OxJF*nohIX7
+z$NnLlx{I1NdY*~At=SNlc8Fp9!Z(%@d)&7vmNe+V`Eh
+z9Il3nvK3Cnc^ZRmEQ%tcr^b(lHJ>_=T&*lOzQ7i*)q
+zc>72w7H}=h&&^{q(pjG${BpIc+ItD-PAExgSc+!n~Xt`K6rmXH02T#Xyg6=#?dkDCL(>D7jE5ftL3#
+z6^>-xV>q)cHXgIVhu$ReBVYws9+xvAZBHsGDY}`4eDj#`+
+z3XKaJbUsbwaJI|ZDoS6=ZBct#JMpQ!{(><9$bLBEbKO3@U+2Ufji2YxegCLR%Xh8F
+z@mEuu#0eoHHIcBuFFG`{RYg&jiw47tW5)`>trK
+zy60_HKGru@{*v0jd9PU71_8N#D6yYFlIL1~58m;y!>sc{UPniEuV6l!Q|WaFO-CS_HYTW{VdNYIyS@6D$d4?zvW;LWoA_ukKg{
+zroTXZqnK4X{Rjw|?dwM;AiMroV|{J=L@7gq?x%pv`FRd}3mehysn+_cDk62g#;>0a
+zR<-?G&J8ue?CeO8DI*JJB+jJvZUjC7blbBrL1Ev_oOCKUqinG?4Y|zmV#@H-6x%r3
+z06|7(XsywNIjf~56KVuA12MlW%SFv(oX`dC(Uv7>udNlbITfd`{*P)eJ|&g0;|Vt;
+zWUO(cegsmjzd4*oIF?dTC}
+zlO?MeW!iuo-%w~3QY9&MyTWySFlDmoqh@P`RCQVWczSw{1__o2Mk#~CEIblT#*gNj
+z4|?IJCPxelhMb8Pg6cV&Ad9M`6Y}!&@h3YU5@IldG=4brm^qM<1nt1EOyaX0;3jV;
+zPVx`(5P5|~)UwRxAxDlqnlg}B5zn4FQYDJe{DBq(pV>Np-fPkR`UXSI$jIsFHGGbR
+zg;h{qkFF-(Z@p`3DzW2Vu(Lps?d=mJMDhXETZ6eGY?!-GeN2~bN>!enNI@D{OYrLNlL!
+z1=2&a48M)o56KV|Gf^4fGUx!vIygI>E8Gy-?*EW#k*&Xo4Z=&o!|ehQk)M%mxp-Ko
+z6|H-gI*mK1jhLLW94LCasuloLoBLX~Y0?S~QV|e!*M`~mytJ@MijrUI*w@DW5?oQ^
+zxz@}CaQV||6`bc+-+#tE-dr;x$B29a6-iJWuh?FCEg}1?ZP8OW}zWoU?@4GNm8DyI=n_v!01
+zQRk~I(@xZj?WXYfa-kF=lfhB5huz(q5EJ^<-SgWVB##qh^8C>;6LJr3xwyG@k?CQ)
+z(jA1ISo(?Newkm|e`NOh2tSIW_;s;4UzAnpL|~}vM}Kihr!{auA0{4du;Fpp3|7}?
+zC5WK-TT!COY$_CF1nuD~!7@k$x4D@|hE0fA*0yvhlCLd8u};
+zoUDj=0G6St*dVt+O>lYU?(Tj&Z!njMAOfy(Ku}$rMh{C&Qp!+dI2_0$MCTuc)Pltv
+z*@;vXNW4S71A;{}9>9rJyd#=4(WM(`LgK%}{-8_I`y8e*#{1XVNJE~)=b}v5Dkw=m
+z3x^)JsB-$B8aR!*i-NBbu#$KcI-6fplanoMmFEK~9W!c&eFiIzKht>)yLf@I!_Ev#Lm2n{24^)CZti?iZWo_A5z~`4P2KdjH|#VxSVZhUcLB&
+z52|`1;5O9EQ_`G4-(med#JW{7G4|B2d{gWZexns{ZZ4Rws}>Hi)E}0_3_=`EsPq3w
+zI_IcL->;2-vrm|8+qPX3Cfk}^Cu_1j*|zPPPPT1ZlP10Od;e~&vsTY@KYL%Fz4v`>
+z!CgagD1BGAoyjH!&W$2}&CtF+5naz43C$MCX2J0UD;=9FQaK!x+kUIIkzOc2#P-F2TBc|$b$;kM+;ig$fJ~Y7|1TVr(J?+8#;Z%$8{lM4^+_k@nZf14$
+zr%jz?WuVQrdQ!@s{m0VBm+3-W@_$G!F4}q8!xDa3h>D@=53z
+zMw69ktI4y~N3sbxH#5rTYks{zYFg;gaOexq?mH-}oax0)uo_tF(9q~Xw6S);Z91_i
+zZ_!cD^x6TE35(QKm50Z*FMDRAxotk+b_bE@|UZ?
+z)J`siIwQ(}?42D{@;%3_k7XC<3E91%e&ZW-R=bip_eX$;lO2`3TU+Nv+@{yyIK9o?AnlC8vTZu-)9?81+y
+z3L<5NY*d&EQ6E2AD@^Ru-}=D#4IRj
+zSpsrX|8;C=uScU87|@=Um<+=M>x=>a#g_h>kJd|+&ii!HQaM+i9WM=1g$0TJPD$D6
+zR}}0UtFdSOe8{PM7M$vO4eL+&3+z8usAGQLrkBcUR2&Ns{>H>Q`W}3?Bm#-mPe#^y
+zwIlUCG$5neAXT4e-ODp-kfo~#Cz44s=>6Tdz!BvvZsj+74-3u3
+zuYC#(2N3R3@N)&JihFL|zJA$n!MQ>GkwV|t@DzM6Z~Bw@8SaaaSKnP)2E6}Oh12jm
+z36WhdH>)zZGruV!4M<3&C6{t$_8jbatLRAU{MTUssGCuqSJyZjJ5^OvFU2d=8*n&E
+zSlaT$yRzMkx~*qj#$e%&SJ3={Zkx`v>4DYpa4x}&!b~75Qa}l~X}z(d{S>%lCT==X
+zLo$4e@nt544k%dkx?%TRk%TdsA=JOjf=ThwsR_rKe1{5k_775Y^AnxdYO+VH;)AqZ
+z)F@mpS1K@Of@4&Z!xOXVwGrAFDlO4lXOL$bs~OIMF-4Mm99Smmdu`@XqcME{teai#@qxc
+zP5vlgqWLR&5aCC-QZzf
+zV{y^h_6+1TK}+?JG$FYz{JK=iY=vZCQZwJcKw7ySpNg__Oemq(dMo!?r^g+$
+z+XKE!``)rGrqxo{!CjU6p6%V8e7qSF64Khc;3wEeA=O)b#sw>0^sf;zRl~JSE5T$@
+zDct}*zK$q_siUtdb|h9oL4lm!Tc#aMr*F*7)f=j7V{g
+z#TiXR1ysKFjb;>3g!SK-452?2_MKM$|G;ZH(8I*y2@auMcS?{2O9}AA9mpmnK=>Oz
+zKCLGqXY)K&HCvg1s_eKDpVU?zex5z`@bZ@at@bvRoM%ER#}n7@re6ru*B=_4Nk!9M
+zSyLq;h!QStt5?f3e5GMv5&cM(q_FnxeFSm)YG-F7PCN1#fI{b7*rbObAuB5zb(D#a
+zHB*V;qNP=KqhN(e0lmE{`V9b2Up7Vr66>Bd9otPll#GfB`W`GypL`xQ^zCckOR-oT
+zBX0|Hesorh7?LXND~ipOcT5t36w9LEvh}AKE6>HZ+HqR23e@87!@+pA*Qfk22r
+zv1F94_owa`s&yC=l}OzyW6L_r9gpVj2e=WpKQpj|eurA~3ya#uh)h6lL8i-<);=J%
+z`hJlp5Pw|csPA>hAOlFyX}dA;wYlU7QItIVt|63g@l0f09X<D<${#OtY5s(gmig!>QqSMbf9HK+z$HEAf56z$SY5IOI
+z-41eO&b{BIv99dLeGql&AFL*cyYQoik|8xVHRrh;*EVxZx;bT-2Weuo
+zVR>X}Lv+J{${XEWPs|sxTB@Z|NZf+i2uhr`ES6qmATwvt9ya+ddxc*2ON#sJ-kv9^
+zM5d>&nG@jdz}If;>sgLOI`pwf2k96XCJ^$zJ1XC#T33X-4}?1nENJYdVd;ag*4%nW
+z5fROG`7Zd2gZoi4x!f2REA@l1^gSjl=^-E>Jio8r>mGfp(?rButQzn^7BK!Quh1M4
+zhU%;}>O`J{Eq5uA5uq%pI~u02{HFGU*ltno)$}tH4x;<7lEdYiZ?Q(oLxyG-Jv{!r
+zUvG8Nx5*hRIM5hITRA3;%^clZN3&-tG^U!-mWUTLqrst!;-$&%$i~5>^)JjKkA##HMDkqbtgoZXDU{GKo
+zqwo!QkG~q5A^&(a33#LuN?IC-#dH`J=M5MCo)nACSfuTPpL>5ws1fVY?r{mM|20$h
+z(L0|fJO1gWbbUhGWwySq?+Hcg?(An8Gsbv#&O?BKx)jwU(n5VpD+?SOR8uh#2o5xr
+z|4&^5?d&7OWPz)=B;)UGINC-JGc}cV?rDvZ$Y8cv!9($;`$A$}Z^<6=5Tl@(B^DaH&EmMS
+z;Xv2k-fkpiI>E$P^aGLjY=4}09ns+86O8n|;VLw$Rh{9Cn+<&z$8lPp|DDwxG*lJ$
+zlLTcNzt??ii|E$INr)H6XFg0%Gj}^b56|6@Ig-qH?{Poh7=*8j!0{_mCLK-81%-X5ZXP+rq
+zBF763x>_CYY58yG=Oj&N=ol7s?GJsMs1o+DcDCKFy1)6oYJ9+{mlT)7m+j9406pyg
+zzTq&9PQE?=w%6fp&>yQ_ar#*3$X+_reyO6cnY8!Ju3Q-}kUij4epL+UJRm?SK
+zNs)&F&sH;T=AD_gD>gc!o0Tpv&ZK0N1c1$*hE7F2kucH(~&5)g7*7*e3l5X;iR}vC}epvhCPnnkUyyt
+zN1eW-eESMnra1g8mz;|H#FM{%gnD8_G6pG1(tQ9cN#^48xx0%j*j;F
+z{cwVInJqj_k#=;9g_~dZdJl6%Nmn=OQ%N(Cy>o^&2BZr(huG<(AZ$Bm=2MFrrwX}M
+z^XAH-ag!1Lwk1eu{}_1{?Up(us`p5gHhm{l1jX_`X3>c^rpg-v*{hv*+;xpdxe;aY
+zoxGp9eN7HE!FE>gPnYeJa|8|x4IR#tk5&`{GgyN%;bl0F#Jhq}jAa`CBQ45cE4X>0
+zAv#GsDwL-bT?aj!uf^ibm6UOZrTS!tiju6?{?p#u6=_3O;|~KLzCRi%?y8g^w~wQl
+zl(oQLE!w8l0a7d}+MV<3Ortd>loi50dRY|WQCsbMfWP<1PUH2k>L^a5-lFT&13u(?hbhmU{Rc`cS)HbVTuZFn
+zTpy|95es`q%xOIqy0nuLYx|jAA+O!L4ym#wDB+Uxa85fO2tbo@kU%~j+X=d__XmWE
+zuZ`$r(AS3al?Dql-GV247UV4mW3&3nA1Xds?fitGZ!(C8h^Maysvf8epD3H*&s~BZ
+z`H6qn_uG4l+xGA0ijHxYfs2+pHegGo=(FvVw~=HWP}OrIqLA)lWMrQz&3g+%v+HNl
+zyB4I$?IwB>dhCVCNbBj{%MP$@KJDF9y3dUqO&u(^x&uvy0rHz;ZtKKQgNJX)oXfZl
+z)1TVK2f#(OiA%QEiCJZb6%wOvBgz}5C4?YNm?8Rf3}kWJRlJnrUiz7ffpGgb6lZCF
+zNfWUw%oH@y%E)7duf^Ju)9G9-Zns7*uCg4|8XIAjn|=6nJWSJs++sG#c6n7wr4wW@2Lb~F
+zSF0aQ@gC}*nZmI<;9;D@%gJnQzt)JHC@HC^L?cWJZ7nk7-$6O9zwVA*xNpx4eP+Jw
+zO?`|tC2naaxVxF7|Jw5V(Za&oG~8tZMOEkj4)!(v
+zw%XM<8J6nt5QRg{L>IgO2OYrc3lktRKfjPy*@^fG2(JD&o?Y6FXHFfg8;124QBl0U^+madk*r?*NEMNM>1rt!X;PVFl|N9j+#KR5@SsV^7}t
+zy3Pwp+)n$_l&HG7VTQFeEyynqMDwO+;s_ox=i?b{I*DAagfg-b5w+Hjgq`n;I>lll
+z(^o^+({XmHC=J6dMAy&sGw;Wne4M0d(#!uoAvWe~MC+Q__kFv+SWFoPQwFs5#uJZx
+z{H$0sy=L7!(T;-nLcR
+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
+zRSR!4a}qwlclqc(zo6lp?FE6Q-Ou@{k)DP<
+z$@B<8Q4u-xsNX3`j_+1Q)l}g@6uQTfl9I>#+!B8u?v1_%10z0<+}i{Z$<}kp3t?|3
+zk6-Q{UQONz7T(x3gDCJM!4&>v_Zq}DwKI68UU8h7DxocH;5tIldKy7@oeRYafhwvH
+zQ}Q!WGW`9VP~M&vY_+S&nKFONEZiW*C56l?tSu}t|to*Hs8
+z0AK|-t%7o+V{#ro+K?$@xM#nNa(3HK^vb8}y#sZ8arQCzSQi03XT{JhO{wzF?Rj}&ql#2~Bnx;CwAwM^
+zC!FgXP1~0&l&D9ybN#7M1nui5S!l^c4#SWUr2e#_zw$SP*T$iLmcJf=;(u9=F?MrW
+z%oR0A8nBc3L}ze_BdPob{I~pC`R)?Hf8`kVpN*s(LOLFvEeYZJ!vdfy+1X?iZcp~%
+zHPfzhhR5y@IT6>s8$nTnUMIv%uBKP+%d9hbG~%|dF2E$@Ilzpi8N2ouN*0Qf=cV61
+zs!gj|)nQr-M$a`oo%krU6Hfv8nF3v-Y2)qHXS;9iZ+QbV&voa
+zom$E%*zJ4wFXy%6<70ji?o^%qG0Je8c0N5u0l#{FU^`p5(Q{^ecHWPyZ26xQUF!W*
+zD$?d_cd)E*d>f+b-Sk^z;q?T3Zuvbu25T6RDkmeWN~2RkPWxf%c2gOAFTWGJbfLPY
+zt^${imhR5(J+__Nc9QRofH7G;Y&t-`xUivy@U-9WmuQOo*~0vs5j*~1ZysChIP@Rg
+z&E@bJo1SReSRHVr$a4!V0k4DI!o3K+R>(L`oxOn`0EYfF*-c_ON6>Xy|sX^kZ>xoYmGZAUk6_FL9E
+zDMQ|(pw>?jq}g%^eYY#pf>%UA;ra0c2Kdtye?HT$7rCUrY)^M`LQQaV%Z%Q6xKm0n
+zWfGQ^LorL1lpkM`A5}`n0_I%UOae+)R(5)GCC%0(BV_1kENnRIhvm-nQT!zycb0?4
+ze%k)DGnJm1DIsR0I4WG|{Rk^=q%z18zLNCS_dc5I=E3XAWab%R{+E9$Q|ZTIR?FU7
+ztl;c3773_b8ny2|5QfF#P(A{N;a95QysAcpze09Y&IepCvOJ6t3^idRG#l9KB97XB0b)fgjd1FUI#<8_79UNH^iV+~OJ(gmKqq>IJMlvimb7xO;_*)gq&3zg0lpkp5kP=p~QvP!8
+znCDS@Kfiwlu8(eLB;;11}5i>9#
+zs&3z9)%6`2aG$BIxWZ|sEq1uZ7rDvhpoW?@KHY9GmmgY?OUbV)=tuizW1RGWqUQe5
+zKY?z6~H729=i~?
+z(18gFfmW-eG7a$`hfX2q_yjpMa;gQW4S_D4lqi)b3~i2d`JXz3HAA5SF91VrXR?64
+z+z6(F9N9^oNdp-xIN8xLwMq*6!E0VAc%?N?t6xscG%
+zZDi<1r@OO+NaX}U2naFvx9^`HENaMzIpmPT-Em0mT-hZ`ar}#hcGXyy+z#=GvW`mN
+z*C<)X!zBlSY;zahw{3Ni?2H;4&$+LQ#ZHS~%cM-&7Ep$;SBR^vN;RmwVwpNNabEz|
+z)i?)2x0VXz3DU(su#Yb!?A>A`h^C~u9iVNs;Og-9f_-j>&{+e#CZeS;3tFWSI>@=|
+zpA#8qNzonWM?ioC=kRD*sbF*fp9wUjm
+zp@SvtRp*DGosQeLfk3L0pD6V3Wy4kZ?X-!=Q{MMMyB9YmS%;+*M|60<^_e;o8l1RM
+zao|ke+MAwgKJKn=_4%nu>zUlH{@A|`_RI&!q(a-brltPL8e$jCmv~^WL
+zhpKEUqN1V}tSGb<;R6Fm2MnPN=X-m~jRjq1u3irA`Oh5%P905n>**-;)k}|)p34=@
+z{)A$qJ*y>dQ?bZ|JvRx@u}l^jhU?VST@d2
+zv*(m*on+HSy2wV7waCJX4u8T!LLOTAEmTU<5US9&4)%29gdllJoZjW{SsK6f<(BkJ
+z8!+qS;zEr|l#jWp4JX@>xWO;ZC3n%lGe8CS>Y);y$L4J3qt7&2LHh~5!Z+J8aYtqn
+z9%&SV(SGe$zLgy}&{>L9G=%IC`+`NazWoem)P&^Z$WPmQv30gXuDUMI7?#%dTm%Yz
+za~m6hUYD%|Q=Ly}pQjoT;g9-2;(r5yhi(7$KFSk#&jdhyO%nWlc$fiCrf!2eRwQyq
+zA<(n&r=?Hj!aB3pEx6RnGjv$jm_6mkCcqIXr4BOnM%T{~+8ZWjh|FRvtRDfO?wKKe
+z6e7*_SM%TT2S{7wcWxGR*P65`A(Vref3rT@~=7KH?tGMS(>
+z&0KkuM`KHv$ML&l4S#NoNh&CC4C*J79)x&$A^K3QL71c0Z$y#k%cYDzzBR&>K^!SQ
+z2_^C~=0)#v3xy6vxqfLpfFr5jp*E?($Yha|i*W4oKxlNzE=cy+e?EEiWFR@r6fl9t
+zJ^k6l@vR04Ax@!U*dL|hhnBMc0K(Kz9$8hpFE>`y#79w_%p%l^OVYamd>Q4_`})w0
+zoPgHL$UkFtG)Y>*P#xXVIV-)Z<96AN*(_c~zGez5ZGDTdIA_Q=kBQ{uL3JBp$?WFYG!dP&l|zi&{F{~RAlVswOB42N$z
+z(3Fr796ZfgOQ8+!CgYZ+4<=#OW)CbZdC&TMIPy=*doLJTTovqkAS~$
+zGj}qbFF#>n>WrOMM?oh$(o8pYug4*3Uz5-GWZ46Ur95`BB?M36$h
+z<=r{ADK2E;Zm6{Om-kH{^x8d#S#^Y9-+d1NT&zO$j3LDiA+-!eD>;tP)R6fwN_VI^
+z=6o+^=H~wO*5P{Qt-N@~$-{AkpVkBI?MtuKiB05NKVV63W>%!VzqK|u#?sI1^d1Tg
+zGoxt`dRk5kbaBf7gnvfK?&W3z4aT;pJ4OUzYmJruHj6#z*P)MpTShEjm7Nj)U6H$W
+zt6QJe_f@q|)E?02aGTo*G|_@nZS{)5~2yN5SqoB8-KMRx<9-N|qA1GXw=3TTgmZq9C81FokZX`FaF
+z4v=~R8=ioWkkCf6M@!xEmpSc|8b;i@nJ8xy(mbNa%PsrPw_dXp-6)BpoKQxYVkdmA
+z7~TG?jSX6M%%Sgz-jCTG%4%v!sI5+U68~XzUadF4AoIVbo+vRp{{ybOZ@4VGZTDKO
+z5hsic?cL|w8}_0Z$0D^<4g@^k)mcvwRx8r~YULbrjz*~2oJX_D~n6loBwuB
+zqZyYikCTKHBqJjW6K5l$upsV{tG++I9l!GhiH;1*{_6Mkj}I|Mp(W?`=T-5m6R}c9Ip=t2$+rjRAT8o9de>eC
+zl>ML&zHr@6TH-QVm}tqZE{2A?cp|$KnWBOE)h6GP$(80cnZ^Ur^FH-~^H1{M&|%!Z
+zI0#lGldy;{*6PO4+M18>6FR=`mIGZLv7>|k6X<$tHD6(+?=~dS_q9ztaeyT$*%=b*
+zA>yjk{<78JP0XOw@m`#rFSI5fLD2foWB7ydSBgB0u|}(k#rvy)`RR57b2^(vvK_Re
+zNz6VqBjca{%?Nu~a$t^UMKZa17hSpxB|4*xlY6rPQ0-a}`h;N#YozEV$XQU}G0HTn
+zTN|+jb6Q(6i_dTA<4uMsW5ZTiYodgiaifWGaR}D7QHS_9jz@VVO07ZMp#U5N^2wWk
+zVS84=;hrRrHX{jRhC^F)X&rjoyTDwtNRVfnbJ{bN7Rz?4P)=r)$>5BT#SezG=&qYf
+z+%#t<8EhF-s|6q0=*0)XU!=d*coWstcH&Y6VT1Y7psEd8vGUrIrpE2Dn(q9-N~qHE
+za**Fk$4B5L;a%0;;beLdo@m0cxm`SLJ-$&BS(2U~$i%97G*~bKmBxpJ5CT4FJKxs{*g&eLa9JEkZimpWgtRjZ9Npl>KNqnJAi~q120jchK(JH{GmtoPnDV4S_V~AHlP1n%3WqP4#lJ;
+zdH&hJx+WcCFX?~3IZV9SW8$yFs+XM3L{O0*
+zPVwxGR$EHUAhDq%z}|eB5=L}UEzI*MAJ@z9VTUrm&sh;T7s>_M?BkP}%8q#(@N$|u
+z5s+e{KN_M^%ke2WDvmKAN`R=_h;M#OG~rGh*u}VrW|{7{o}f!I5HIpM95WO8oLapu
+z_Pna$+u3q_Dibo%uAO)X$x6Fas%#$sS5+HfBo?E%fnU#w1AS