diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4decce6..acf3d4a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,9 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - submodules: true + submodules: true + - name: Get tags + run: git fetch --tags origin - name: Install dependencies run: | sudo apt-get update -y @@ -29,9 +31,17 @@ jobs: chmod +x build.sh ./build.sh flatpak build-bundle ~/.local/share/flatpak/repo jagex-launcher.flatpak com.jagex.Launcher + - name: Tag this branch with incremented release version + run: | + LAST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) + MAJOR=$(echo "$LAST_TAG" | cut -d. -f1) + MINOR=$(echo "$LAST_TAG" | cut -d. -f2) + PATCH=$(echo "$LAST_TAG" | cut -d. -f3) + NEW_VERSION="$MAJOR.$MINOR.$((PATCH+1))" + git tag "$NEW_VERSION" + git push "https://$GITHUB_ACTOR:${{ secrets.ACCESS_TOKEN }}@github.com/$GITHUB_REPOSITORY.git" --follow-tags + git push "https://$GITHUB_ACTOR:${{ secrets.ACCESS_TOKEN }}@github.com/$GITHUB_REPOSITORY.git" --tags - name: Release uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/') with: - files: jagex-launcher.flatpak - draft: false \ No newline at end of file + files: jagex-launcher.flatpak \ No newline at end of file diff --git a/com.jagex.Launcher.yml b/com.jagex.Launcher.yml index 2cb4172..1a599e9 100644 --- a/com.jagex.Launcher.yml +++ b/com.jagex.Launcher.yml @@ -63,8 +63,6 @@ modules: dest-filename: wine.tar.xz url: https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton8-24/wine-lutris-GE-Proton8-24-x86_64.tar.xz sha512: 5a83e6d2281e45ad84444be9db20b6624241ab05891020d153c124c62f9f38c9d024d9e09eb7385cd4152d1939d4b31260d5c26477fb332583414b157db41519 - - sources/python3-pyyaml.json - - sources/python3-requests.json - name: runelite-jar buildsystem: simple build-commands: @@ -96,39 +94,26 @@ modules: commands: - #!/bin/bash - /app/jre/bin/java -jar /app/hdos-launcher.jar - - name: dxvk - buildsystem: simple - build-commands: - - mkdir -p /app/opt/dxvk - - mv x32 /app/opt/dxvk/ - - mv x64 /app/opt/dxvk/ - sources: - - type: archive - url: https://github.com/doitsujin/dxvk/releases/download/v2.3/dxvk-2.3.tar.gz - sha256: 8059c06fc84a864122cc572426f780f35921eb4e3678dc337e9fd79ee5a427c0 - name: jagex-launcher buildsystem: simple build-commands: - - install apply_extra /app/bin - install jagex-install /app/bin - install -Dm644 com.jagex.Launcher.desktop /app/share/applications/com.jagex.Launcher.desktop - install -Dm644 com.jagex.Launcher.metainfo.xml /app/share/metainfo/com.jagex.Launcher.metainfo.xml - install -Dm644 512.png /app/share/icons/hicolor/512x512/apps/com.jagex.Launcher.png + - install -Dm644 steamdeck-settings.properties /app/steamdeck-settings.properties sources: - type: file path: jagex-launcher-linux/resources/installer.py dest-filename: jagex-install - - sources/solidpiece-sources.yaml - - sources/metafile-source.yaml - - type: file - path: scripts/apply_extra.sh - dest-filename: apply_extra - type: file path: com.jagex.Launcher.desktop - type: file path: com.jagex.Launcher.metainfo.xml - type: file path: icons/512/512.png + - type: file + path: jagex-launcher-linux/resources/steamdeck-settings.properties - name: launch-script buildsystem: simple build-commands: diff --git a/scripts/apply_extra.sh b/scripts/apply_extra.sh deleted file mode 100644 index cea5616..0000000 --- a/scripts/apply_extra.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -jagex-install \ No newline at end of file diff --git a/scripts/flatpak-pip-generator.py b/scripts/flatpak-pip-generator.py deleted file mode 100644 index e93a9ec..0000000 --- a/scripts/flatpak-pip-generator.py +++ /dev/null @@ -1,494 +0,0 @@ -#!/usr/bin/env python3 - -__license__ = 'MIT' - -import argparse -import json -import hashlib -import os -import re -import shutil -import subprocess -import sys -import tempfile -import urllib.request - -from collections import OrderedDict -from typing import Dict - -try: - import requirements -except ImportError: - exit('Requirements modules is not installed. Run "pip install requirements-parser"') - -parser = argparse.ArgumentParser() -parser.add_argument('packages', nargs='*') -parser.add_argument('--python2', action='store_true', - help='Look for a Python 2 package') -parser.add_argument('--cleanup', choices=['scripts', 'all'], - help='Select what to clean up after build') -parser.add_argument('--requirements-file', '-r', - help='Specify requirements.txt file') -parser.add_argument('--build-only', action='store_const', - dest='cleanup', const='all', - help='Clean up all files after build') -parser.add_argument('--build-isolation', action='store_true', - default=False, - help=( - 'Do not disable build isolation. ' - 'Mostly useful on pip that does\'t ' - 'support the feature.' - )) -parser.add_argument('--ignore-installed', - type=lambda s: s.split(','), - default='', - help='Comma-separated list of package names for which pip ' - 'should ignore already installed packages. Useful when ' - 'the package is installed in the SDK but not in the ' - 'runtime.') -parser.add_argument('--checker-data', action='store_true', - help='Include x-checker-data in output for the "Flatpak External Data Checker"') -parser.add_argument('--output', '-o', - help='Specify output file name') -parser.add_argument('--runtime', - help='Specify a flatpak to run pip inside of a sandbox, ensures python version compatibility') -parser.add_argument('--yaml', action='store_true', - help='Use YAML as output format instead of JSON') -parser.add_argument('--ignore-errors', action='store_true', - help='Ignore errors when downloading packages') -parser.add_argument('--ignore-pkg', nargs='*', - help='Ignore a package when generating the manifest. Can only be used with a requirements file') -opts = parser.parse_args() - -if opts.yaml: - try: - import yaml - except ImportError: - exit('PyYAML modules is not installed. Run "pip install PyYAML"') - - -def get_pypi_url(name: str, filename: str) -> str: - url = 'https://pypi.org/pypi/{}/json'.format(name) - print('Extracting download url for', name) - with urllib.request.urlopen(url) as response: - body = json.loads(response.read().decode('utf-8')) - for release in body['releases'].values(): - for source in release: - if source['filename'] == filename: - return source['url'] - raise Exception('Failed to extract url from {}'.format(url)) - - -def get_tar_package_url_pypi(name: str, version: str) -> str: - url = 'https://pypi.org/pypi/{}/{}/json'.format(name, version) - with urllib.request.urlopen(url) as response: - body = json.loads(response.read().decode('utf-8')) - for ext in ['bz2', 'gz', 'xz', 'zip']: - for source in body['urls']: - if source['url'].endswith(ext): - return source['url'] - err = 'Failed to get {}-{} source from {}'.format(name, version, url) - raise Exception(err) - - -def get_package_name(filename: str) -> str: - if filename.endswith(('bz2', 'gz', 'xz', 'zip')): - segments = filename.split('-') - if len(segments) == 2: - return segments[0] - return '-'.join(segments[:len(segments) - 1]) - elif filename.endswith('whl'): - segments = filename.split('-') - if len(segments) == 5: - return segments[0] - candidate = segments[:len(segments) - 4] - # Some packages list the version number twice - # e.g. PyQt5-5.15.0-5.15.0-cp35.cp36.cp37.cp38-abi3-manylinux2014_x86_64.whl - if candidate[-1] == segments[len(segments) - 4]: - return '-'.join(candidate[:-1]) - return '-'.join(candidate) - else: - raise Exception( - 'Downloaded filename: {} does not end with bz2, gz, xz, zip, or whl'.format(filename) - ) - - -def get_file_version(filename: str) -> str: - name = get_package_name(filename) - segments = filename.split(name + '-') - version = segments[1].split('-')[0] - for ext in ['tar.gz', 'whl', 'tar.xz', 'tar.gz', 'tar.bz2', 'zip']: - version = version.replace('.' + ext, '') - return version - - -def get_file_hash(filename: str) -> str: - sha = hashlib.sha256() - print('Generating hash for', filename.split('/')[-1]) - with open(filename, 'rb') as f: - while True: - data = f.read(1024 * 1024 * 32) - if not data: - break - sha.update(data) - return sha.hexdigest() - - -def download_tar_pypi(url: str, tempdir: str) -> None: - with urllib.request.urlopen(url) as response: - file_path = os.path.join(tempdir, url.split('/')[-1]) - with open(file_path, 'x+b') as tar_file: - shutil.copyfileobj(response, tar_file) - - -def parse_continuation_lines(fin): - for line in fin: - line = line.rstrip('\n') - while line.endswith('\\'): - try: - line = line[:-1] + next(fin).rstrip('\n') - except StopIteration: - exit('Requirements have a wrong number of line continuation characters "\\"') - yield line - - -def fprint(string: str) -> None: - separator = '=' * 72 # Same as `flatpak-builder` - print(separator) - print(string) - print(separator) - - -packages = [] -if opts.requirements_file: - requirements_file_input = os.path.expanduser(opts.requirements_file) - try: - with open(requirements_file_input, 'r') as req_file: - reqs = parse_continuation_lines(req_file) - reqs_as_str = '\n'.join([r.split('--hash')[0] for r in reqs]) - reqs_list_raw = reqs_as_str.splitlines() - py_version_regex = re.compile(r';.*python_version .+$') # Remove when pip-generator can handle python_version - reqs_list = [py_version_regex.sub('', p) for p in reqs_list_raw] - if opts.ignore_pkg: - reqs_new = '\n'.join(i for i in reqs_list if i not in opts.ignore_pkg) - else: - reqs_new = reqs_as_str - packages = list(requirements.parse(reqs_new)) - with tempfile.NamedTemporaryFile('w', delete=False, prefix='requirements.') as req_file: - req_file.write(reqs_new) - requirements_file_output = req_file.name - except FileNotFoundError as err: - print(err) - sys.exit(1) - -elif opts.packages: - packages = list(requirements.parse('\n'.join(opts.packages))) - with tempfile.NamedTemporaryFile('w', delete=False, prefix='requirements.') as req_file: - req_file.write('\n'.join(opts.packages)) - requirements_file_output = req_file.name -else: - if not len(sys.argv) > 1: - exit('Please specifiy either packages or requirements file argument') - else: - exit('This option can only be used with requirements file') - -for i in packages: - if i["name"].lower().startswith("pyqt"): - print("PyQt packages are not supported by flapak-pip-generator") - print("However, there is a BaseApp for PyQt available, that you should use") - print("Visit https://github.com/flathub/com.riverbankcomputing.PyQt.BaseApp for more information") - sys.exit(0) - -with open(requirements_file_output, 'r') as req_file: - use_hash = '--hash=' in req_file.read() - -python_version = '2' if opts.python2 else '3' -if opts.python2: - pip_executable = 'pip2' -else: - pip_executable = 'pip3' - -if opts.runtime: - flatpak_cmd = [ - 'flatpak', - '--devel', - '--share=network', - '--filesystem=/tmp', - '--command={}'.format(pip_executable), - 'run', - opts.runtime - ] - if opts.requirements_file: - if os.path.exists(requirements_file_output): - prefix = os.path.realpath(requirements_file_output) - flag = '--filesystem={}'.format(prefix) - flatpak_cmd.insert(1,flag) -else: - flatpak_cmd = [pip_executable] - -output_path = '' - -if opts.output: - output_path = os.path.dirname(opts.output) - output_package = os.path.basename(opts.output) -elif opts.requirements_file: - output_package = 'python{}-{}'.format( - python_version, - os.path.basename(opts.requirements_file).replace('.txt', ''), - ) -elif len(packages) == 1: - output_package = 'python{}-{}'.format( - python_version, packages[0].name, - ) -else: - output_package = 'python{}-modules'.format(python_version) -if opts.yaml: - output_filename = os.path.join(output_path, output_package) + '.yaml' -else: - output_filename = os.path.join(output_path, output_package) + '.json' - -modules = [] -vcs_modules = [] -sources = {} - -tempdir_prefix = 'pip-generator-{}'.format(output_package) -with tempfile.TemporaryDirectory(prefix=tempdir_prefix) as tempdir: - pip_download = flatpak_cmd + [ - 'download', - '--exists-action=i', - '--dest', - tempdir, - '-r', - requirements_file_output - ] - if use_hash: - pip_download.append('--require-hashes') - - fprint('Downloading sources') - cmd = ' '.join(pip_download) - print('Running: "{}"'.format(cmd)) - try: - subprocess.run(pip_download, check=True) - os.remove(requirements_file_output) - except subprocess.CalledProcessError: - os.remove(requirements_file_output) - print('Failed to download') - print('Please fix the module manually in the generated file') - if not opts.ignore_errors: - print('Ignore the error by passing --ignore-errors') - raise - - try: - os.remove(requirements_file_output) - except FileNotFoundError: - pass - - fprint('Downloading arch independent packages') - for filename in os.listdir(tempdir): - if not filename.endswith(('bz2', 'any.whl', 'gz', 'xz', 'zip')): - version = get_file_version(filename) - name = get_package_name(filename) - url = get_tar_package_url_pypi(name, version) - print('Deleting', filename) - try: - os.remove(os.path.join(tempdir, filename)) - except FileNotFoundError: - pass - print('Downloading {}'.format(url)) - download_tar_pypi(url, tempdir) - - files = {get_package_name(f): [] for f in os.listdir(tempdir)} - - for filename in os.listdir(tempdir): - name = get_package_name(filename) - files[name].append(filename) - - # Delete redundant sources, for vcs sources - for name in files: - if len(files[name]) > 1: - zip_source = False - for f in files[name]: - if f.endswith('.zip'): - zip_source = True - if zip_source: - for f in files[name]: - if not f.endswith('.zip'): - try: - os.remove(os.path.join(tempdir, f)) - except FileNotFoundError: - pass - - vcs_packages = { - x.name: {'vcs': x.vcs, 'revision': x.revision, 'uri': x.uri} - for x in packages - if x.vcs - } - - fprint('Obtaining hashes and urls') - for filename in os.listdir(tempdir): - name = get_package_name(filename) - sha256 = get_file_hash(os.path.join(tempdir, filename)) - - if name in vcs_packages: - uri = vcs_packages[name]['uri'] - revision = vcs_packages[name]['revision'] - vcs = vcs_packages[name]['vcs'] - url = 'https://' + uri.split('://', 1)[1] - s = 'commit' - if vcs == 'svn': - s = 'revision' - source = OrderedDict([ - ('type', vcs), - ('url', url), - (s, revision), - ]) - is_vcs = True - else: - url = get_pypi_url(name, filename) - source = OrderedDict([ - ('type', 'file'), - ('url', url), - ('sha256', sha256)]) - if opts.checker_data: - source['x-checker-data'] = { - 'type': 'pypi', - 'name': name} - if url.endswith(".whl"): - source['x-checker-data']['packagetype'] = 'bdist_wheel' - is_vcs = False - sources[name] = {'source': source, 'vcs': is_vcs} - -# Python3 packages that come as part of org.freedesktop.Sdk. -system_packages = ['cython', 'easy_install', 'mako', 'markdown', 'meson', 'pip', 'pygments', 'setuptools', 'six', 'wheel'] - -fprint('Generating dependencies') -for package in packages: - - if package.name is None: - print('Warning: skipping invalid requirement specification {} because it is missing a name'.format(package.line), file=sys.stderr) - print('Append #egg= to the end of the requirement line to fix', file=sys.stderr) - continue - elif package.name.casefold() in system_packages: - print(f"{package.name} is in system_packages. Skipping.") - continue - - if len(package.extras) > 0: - extras = '[' + ','.join(extra for extra in package.extras) + ']' - else: - extras = '' - - version_list = [x[0] + x[1] for x in package.specs] - version = ','.join(version_list) - - if package.vcs: - revision = '' - if package.revision: - revision = '@' + package.revision - pkg = package.uri + revision + '#egg=' + package.name - else: - pkg = package.name + extras + version - - dependencies = [] - # Downloads the package again to list dependencies - - tempdir_prefix = 'pip-generator-{}'.format(package.name) - with tempfile.TemporaryDirectory(prefix='{}-{}'.format(tempdir_prefix, package.name)) as tempdir: - pip_download = flatpak_cmd + [ - 'download', - '--exists-action=i', - '--dest', - tempdir, - ] - try: - print('Generating dependencies for {}'.format(package.name)) - subprocess.run(pip_download + [pkg], check=True, stdout=subprocess.DEVNULL) - for filename in sorted(os.listdir(tempdir)): - dep_name = get_package_name(filename) - if dep_name.casefold() in system_packages: - continue - dependencies.append(dep_name) - - except subprocess.CalledProcessError: - print('Failed to download {}'.format(package.name)) - - is_vcs = True if package.vcs else False - package_sources = [] - for dependency in dependencies: - if dependency in sources: - source = sources[dependency] - elif dependency.replace('_', '-') in sources: - source = sources[dependency.replace('_', '-')] - else: - continue - - if not (not source['vcs'] or is_vcs): - continue - - package_sources.append(source['source']) - - if package.vcs: - name_for_pip = '.' - else: - name_for_pip = pkg - - module_name = 'python{}-{}'.format(python_version, package.name) - - pip_command = [ - pip_executable, - 'install', - '--verbose', - '--exists-action=i', - '--no-index', - '--find-links="file://${PWD}"', - '--prefix=${FLATPAK_DEST}', - '"{}"'.format(name_for_pip) - ] - if package.name in opts.ignore_installed: - pip_command.append('--ignore-installed') - if not opts.build_isolation: - pip_command.append('--no-build-isolation') - - module = OrderedDict([ - ('name', module_name), - ('buildsystem', 'simple'), - ('build-commands', [' '.join(pip_command)]), - ('sources', package_sources), - ]) - if opts.cleanup == 'all': - module['cleanup'] = ['*'] - elif opts.cleanup == 'scripts': - module['cleanup'] = ['/bin', '/share/man/man1'] - - if package.vcs: - vcs_modules.append(module) - else: - modules.append(module) - -modules = vcs_modules + modules -if len(modules) == 1: - pypi_module = modules[0] -else: - pypi_module = { - 'name': output_package, - 'buildsystem': 'simple', - 'build-commands': [], - 'modules': modules, - } - -print() -with open(output_filename, 'w') as output: - if opts.yaml: - class OrderedDumper(yaml.Dumper): - def increase_indent(self, flow=False, indentless=False): - return super(OrderedDumper, self).increase_indent(flow, False) - - def dict_representer(dumper, data): - return dumper.represent_dict(data.items()) - - OrderedDumper.add_representer(OrderedDict, dict_representer) - - output.write("# Generated with flatpak-pip-generator " + " ".join(sys.argv[1:]) + "\n") - yaml.dump(pypi_module, output, Dumper=OrderedDumper) - else: - output.write(json.dumps(pypi_module, indent=4)) - print('Output saved to {}'.format(output_filename)) diff --git a/scripts/generate_sources.py b/scripts/generate_sources.py deleted file mode 100755 index e2fbc61..0000000 --- a/scripts/generate_sources.py +++ /dev/null @@ -1,206 +0,0 @@ -import requests -import json -import base64 -import gzip -import pprint -import os -from pathlib import Path -import errno -import sys -import base64 -import jwcrypto.jwt, jwcrypto.jwk -import cryptography.x509 -from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat -from cryptography.hazmat.primitives.asymmetric import padding -import pprint -from hashlib import sha256 -import datetime -import yaml - -url_template = "http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/{}/{}.solidpiece" -dirname = os.getcwd() - -def mkdir_p(path): - try: - parent_path = Path(path) - os.makedirs(parent_path.parent.absolute(), exist_ok=True) - except OSError as exc: - if exc.errno == errno.EEXIST and os.path.isdir(path): - pass - else: raise - -def get_abs_path(relative_path): - return os.path.join(dirname, relative_path) - -def download_gzip_deflate_and_validate(url, filename, digest): - print ("Downloading file from: {}".format(url)) - response = requests.get(url) - if response.status_code == 200: - content = response.content - - with open(filename, 'wb') as f: - f.write(content) - - print("Decompressed data saved to:", filename) - else: - print(f"Failed to download file: {response.status_code}") - -def fetch_metafile(url): - response = requests.get(url) - if response.status_code == 200: - return response.content.decode() - else: - raise Exception(f"Failed to fetch metafile, status code: {response.status_code}") - -def decode_base64(encoded_str): - try: - # Ensure the string is padded to a multiple of 4 characters - padded_str = encoded_str + '=' * ((4 - len(encoded_str) % 4) % 4) - - # Decode the base64 string - decoded_bytes = base64.b64decode(padded_str) - - # Return the decoded bytes - return decoded_bytes - except binascii.Error: - print("An error occurred: Incorrect padding or corrupted data.") - return None -def cleanup(): - for p in Path(".").glob("*.solidpiece"): - p.unlink() - for p in Path(".").glob("combined_file"): - p.unlink() - -def main(): - metafile_url_template = "http://jagex-akamai.aws.snxd.com/direct6/launcher-win/metafile/{}/metafile.json" - # This is the fingerprint of the certificate that signed the JWT we are using from the jagex CDN so we can validate we are trusting the right certificate chain. - JAGEX_PACKAGE_CERTIFICATE_SHA256_HASH = "848bae7e92dc58570db50cdfc933a78204c1b00f05d64f753a307ebbaed2404f" - - # Grab the catalog and use that to get the latest metafile. - catalog_url = "https://jagex.akamaized.net/direct6/launcher-win/alias.json" - - catalog_json = requests.get(catalog_url) - node = { - 'type': "extra-data", - 'url': catalog_url, - 'sha256': sha256(catalog_json.content).hexdigest(), - 'filename': 'catalog.json', - 'only-arches': ['x86_64'], - 'size': len(catalog_json.content) - } - - with open('catalog-source.yaml', "w") as jwt_file: - yaml.dump(node, jwt_file, explicit_start=False, default_flow_style=False, sort_keys=False) - - metafile_url = metafile_url_template.format(json.loads(catalog_json.content)['launcher-win.production']) - - print('Latest metafile_url: {}'.format(metafile_url)) - - metafile_json = requests.get(metafile_url) - node = { - 'type': "extra-data", - 'url': metafile_url, - 'sha256': sha256(metafile_json.content).hexdigest(), - 'filename': 'metafile.json', - 'only-arches': ['x86_64'], - 'size': len(metafile_json.content) - } - - # Load and deserialize JWT - jwt = metafile_json.content.strip() - jwt = jwcrypto.jwt.JWT(jwt=jwt.decode("ascii")) - - # Write the JWT to the file - with open('metafile-source.yaml', "w") as jwt_file: - yaml.dump(node, jwt_file, explicit_start=False, default_flow_style=False, sort_keys=False) - - # Deserialize the leaf certificate and validate the fingerprint of the certificate - trust_path = jwt.token.jose_header.get("x5c", []) - leaf_cert_b64 = trust_path[0] - leaf_cert_sha256_hash = sha256(leaf_cert_b64.encode('utf8')).hexdigest() - - print ("Validating fingerprint of the certificate that signed the JWT...") - if leaf_cert_sha256_hash != JAGEX_PACKAGE_CERTIFICATE_SHA256_HASH: - raise Exception("The certificate in the JWT header does not match the expected fingerprint.") - - leaf_cert = cryptography.x509.load_der_x509_certificate( - base64.b64decode(leaf_cert_b64)) - - # Derive public key from the package cert and convert to JWK - public_key = leaf_cert.public_key() - public_key = public_key.public_bytes(Encoding.PEM, PublicFormat.PKCS1) - public_key = jwcrypto.jwk.JWK.from_pem(public_key) - - # Validate JWT and access claims - jwt.validate(public_key) - print('''The jwt has validated against the certificate. - Issuer: {} - Subject: {} - Expiration UTC: {} - '''.format(leaf_cert.issuer, leaf_cert.subject, leaf_cert.not_valid_after)) - - # Build certificate chain - trust_path = jwt.token.jose_header.get("x5c", []) - trust_path = [ - cryptography.x509.load_der_x509_certificate(base64.b64decode(cert)) - for cert in trust_path - ] - - # Verify certificate chain - for i in range(len(trust_path) - 1): - issuer_certificate = trust_path[i + 1] - subject_certificate = trust_path[i] - issuer_public_key = issuer_certificate.public_key() - issuer_public_key.verify( - subject_certificate.signature, - subject_certificate.tbs_certificate_bytes, - padding.PKCS1v15(), - subject_certificate.signature_hash_algorithm, - ) - # Verify certificate expiration - current_time = datetime.datetime.utcnow() - if current_time < issuer_certificate.not_valid_before or current_time > issuer_certificate.not_valid_after: - raise Exception("Issuer certificate has expired.") - - try: - global digest_list - global pad_array - global file_list - - verified_claims_json = json.loads(jwt.claims) - - digest_list = verified_claims_json.get("pieces").get("digests") - file_list = verified_claims_json.get("files") - pad_array = verified_claims_json.get("pad") - - downloaded_file_pieces = [] - - for digest in digest_list: - print(digest) - digest_string = base64.b64decode(digest).hex() - download_gzip_deflate_and_validate(url_template.format(digest_string[0:2], digest_string), digest_string + ".solidpiece", digest_string) - downloaded_file_pieces.append(digest_string) - - sources = [] - print(digest_list) - for item in downloaded_file_pieces: - with open("{}.solidpiece".format(item), 'rb') as temp_file: - node = { - 'type': "extra-data", - 'url': url_template.format(item[0:2], item), - 'sha256': sha256(temp_file.read()).hexdigest(), - 'filename': '{}.solidpiece'.format(item), - 'only-arches': ['x86_64'], - 'size': os.path.getsize("{}.solidpiece".format(item)) - } - sources.append(node) - print(sources) - with open('solidpiece-sources.yaml', 'w', encoding='utf-8') as f: - yaml.dump(sources, f, explicit_start=False, default_flow_style=False, sort_keys=False) - - except Exception as e: - print(f"An error occurred: {e}") - -if __name__ == "__main__": - main() - cleanup() diff --git a/scripts/installer.py b/scripts/installer.py deleted file mode 100644 index 465a3b7..0000000 --- a/scripts/installer.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/python3 - -import requests -import json -import base64 -import gzip -import pprint -import os -from pathlib import Path -import errno -import sys -import base64 -import pprint -from hashlib import sha256 -import datetime -import yaml - -dirname = os.getcwd() - -def mkdir_p(path): - try: - parent_path = Path(path) - os.makedirs(parent_path.parent.absolute(), exist_ok=True) - except OSError as exc: - if exc.errno == errno.EEXIST and os.path.isdir(path): - pass - else: raise - -def get_abs_path(relative_path): - return os.path.join(dirname, relative_path) - -def cleanup(): - for p in Path(".").glob("*.solidpiece"): - p.unlink() - for p in Path(".").glob("combined_file"): - p.unlink() - - -def decode_base64(encoded_str): - try: - # Ensure the string is padded to a multiple of 4 characters - padded_str = encoded_str + '=' * ((4 - len(encoded_str) % 4) % 4) - - # Decode the base64 string - decoded_bytes = base64.b64decode(padded_str) - - # Return the decoded bytes - return decoded_bytes - except binascii.Error: - print("An error occurred: Incorrect padding or corrupted data.") - return None - -def main(): - # try: - global digest_list - global pad_array - global file_list - - metafile_yaml = [] - - with open("metafile.json", "r") as stream: - try: - content = stream.read() - decoded_jwt_body_json = json.loads(base64.b64decode(content.split(".")[1]).decode("utf-8")) - except yaml.YAMLError as exc: - print(exc) - - digest_list = decoded_jwt_body_json["pieces"]["digests"] - file_list = decoded_jwt_body_json["files"] - pad_array = decoded_jwt_body_json["pad"] - - for item in digest_list: - file_name = "{}.solidpiece".format(base64.b64decode(item).hex()) - with open(get_abs_path(file_name), 'rb') as non_gzip_file: - content = non_gzip_file.read()[6:] - with open(get_abs_path(file_name), 'wb') as gzipped_file: - gzipped_file.write(content) - try: - with gzip.open(file_name, 'rb') as compressed_file: - print("Decompressing and writing {}".format(file_name)) - # Read and decompress the data - decompressed_data = compressed_file.read() - # Save the decompressed data to an output file - with open(file_name, 'wb') as output_file: - output_file.write(decompressed_data) - except Exception as e: - print("Skipping because it is not a gzip archive... {}".format(file_name)) - continue - with open(get_abs_path('combined_file'), 'wb') as combined_file: - for item in digest_list: - file_name = "{}.solidpiece".format(base64.b64decode(item).hex()) - with open(file_name, 'rb') as temp_file: - content = temp_file.read() - combined_file.write(content) - - with open(get_abs_path('combined_file'), 'rb') as source_file: - for file in file_list: - print('Building {} by splitting off {} bytes of the combined zip'.format(file['name'], file['size'])) - file_output = source_file.read(file['size']) - output_file_path = get_abs_path(file['name']) - # Make sure the directory we are writing to exists - mkdir_p(output_file_path) - with open(output_file_path, 'wb') as output: - print('Writing {} to {}'.format(file['name'], output_file_path)) - output.write(file_output) - -if __name__ == "__main__": - main() - cleanup() \ No newline at end of file diff --git a/scripts/jagex-run.sh b/scripts/jagex-run.sh index c69cd75..f06a77c 100644 --- a/scripts/jagex-run.sh +++ b/scripts/jagex-run.sh @@ -1,13 +1,22 @@ #!/bin/sh +set -e +set -x + winebin="/app/opt/wine/bin" wineprefix="$XDG_DATA_HOME"/prefix +jagex_launcher_exe_path="$wineprefix/drive_c/Program Files (x86)/Jagex Launcher/JagexLauncher.exe" -# Make sure metafile is in the proper location. We do this on each boot to make sure it is replaced after an update. -mkdir -p "$wineprefix/drive_c/users/$(whoami)/AppData/Local/Jagex Launcher" -cp /app/extra/metafile.json "$wineprefix/drive_c/users/$(whoami)/AppData/Local/Jagex Launcher/launcher-win.production.json" +if ! [ -f "$jagex_launcher_exe_path" ]; then + mkdir tmp + cd tmp + python3 /app/bin/jagex-install + cd .. + mkdir -p "$wineprefix/drive_c/Program Files (x86)/Jagex Launcher" + cp -r ./tmp/* "$wineprefix/drive_c/Program Files (x86)/Jagex Launcher/" -mkdir -p "$wineprefix/drive_c/Program Files (x86)/Jagex Launcher" -cp -r /app/extra/* "$wineprefix/drive_c/Program Files (x86)/Jagex Launcher/" + # Copy steam deck properties file to a location accessible by the flatpak + cp /app/steamdeck-settings.properties "$XDG_DATA_HOME/steamdeck-settings.properties" +fi # Make sure the registry has the installation location for runelite. WINEPREFIX="$wineprefix" WINEDEBUG="-all" "$winebin/wine" reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\RuneLite Launcher_is1" /v "InstallLocation" /t REG_SZ /d "Z:\app" /f @@ -15,9 +24,5 @@ WINEPREFIX="$wineprefix" WINEDEBUG="-all" "$winebin/wine" reg.exe add "HKEY_CURR # Make sure the registry has the installation location for hdos WINEPREFIX="$wineprefix" WINEDEBUG="-all" "$winebin/wine" reg.exe add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\HDOS Launcher_is1" /v "InstallLocation" /t REG_SZ /d "Z:\app" /f -# Make sure dxvk is in place in our prefix -cp -r /app/opt/dxvk/x64/*.dll "$wineprefix/drive_c/windows/system32/" -cp -r /app/opt/dxvk/x32/*.dll "$wineprefix/drive_c/windows/syswow64/" - # Run with overrides for dxvk -WINEPREFIX="$wineprefix" WINEDLLOVERRIDES="d3d11=n;d3d10core=n;dxgi=n;d3d9=n" "$winebin/wine" "$wineprefix/drive_c/Program Files (x86)/Jagex Launcher/JagexLauncher.exe" \ No newline at end of file +WINEPREFIX="$wineprefix" WINEDLLOVERRIDES="dxgi=b" "$winebin/wine" "$jagex_launcher_exe_path" \ No newline at end of file diff --git a/sources/catalog-source.yaml b/sources/catalog-source.yaml deleted file mode 100644 index a124796..0000000 --- a/sources/catalog-source.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: extra-data -url: https://jagex.akamaized.net/direct6/launcher-win/alias.json -sha256: 08d07b7d5d4824a07f35579660ead175a8003ce7347c514260e1083bec45e991 -filename: catalog.json -only-arches: -- x86_64 -size: 28995 diff --git a/sources/metafile-source.yaml b/sources/metafile-source.yaml deleted file mode 100644 index c6c8fc8..0000000 --- a/sources/metafile-source.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: extra-data -url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/metafile/d589817a9dbde1cb1c6f1cde1e81b5284db1c5d0617577e3c3b987406ca2b50b/metafile.json -sha256: 1b2f2c024886586ce6bc9bd40e4a82218feb8534f56cab4b67534efb4d234a27 -filename: metafile.json -only-arches: -- x86_64 -size: 21027 diff --git a/sources/python-sources.json b/sources/python-sources.json deleted file mode 100644 index 9c15c31..0000000 --- a/sources/python-sources.json +++ /dev/null @@ -1,306 +0,0 @@ -{ - "name": "python-sources", - "buildsystem": "simple", - "build-commands": [], - "modules": [ - { - "name": "python3-certifi", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"certifi==2023.7.22\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl", - "sha256": "92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" - } - ] - }, - { - "name": "python3-cffi", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"cffi==1.16.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/68/ce/95b0bae7968c65473e1298efb042e10cafc7bafc14d9e4f154008241c91d/cffi-1.16.0.tar.gz", - "sha256": "bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", - "sha256": "8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9" - } - ] - }, - { - "name": "python3-charset-normalizer", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"charset-normalizer==3.3.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/cf/ac/e89b2f2f75f51e9859979b56d2ec162f7f893221975d244d8d5277aa9489/charset-normalizer-3.3.0.tar.gz", - "sha256": "63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6" - } - ] - }, - { - "name": "python3-cryptography", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"cryptography==41.0.4\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/68/ce/95b0bae7968c65473e1298efb042e10cafc7bafc14d9e4f154008241c91d/cffi-1.16.0.tar.gz", - "sha256": "bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/ef/33/87512644b788b00a250203382e40ee7040ae6fa6b4c4a31dcfeeaa26043b/cryptography-41.0.4.tar.gz", - "sha256": "7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", - "sha256": "8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9" - } - ] - }, - { - "name": "python3-Deprecated", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"Deprecated==1.2.14\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl", - "sha256": "6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/f8/f8/e068dafbb844c1447c55b23c921f3d338cddaba4ea53187a7dd0058452d9/wrapt-1.15.0-py3-none-any.whl", - "sha256": "64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640" - } - ] - }, - { - "name": "python3-idna", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"idna==3.4\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", - "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - } - ] - }, - { - "name": "python3-jwcrypto", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"jwcrypto==1.5.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl", - "sha256": "6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/68/ce/95b0bae7968c65473e1298efb042e10cafc7bafc14d9e4f154008241c91d/cffi-1.16.0.tar.gz", - "sha256": "bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/ef/33/87512644b788b00a250203382e40ee7040ae6fa6b4c4a31dcfeeaa26043b/cryptography-41.0.4.tar.gz", - "sha256": "7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/ed/72/b9289ee27d228fc7cae5c83d1c640de2a7cc0621805aa839ba239d6ef8fc/jwcrypto-1.5.0.tar.gz", - "sha256": "2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", - "sha256": "8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/f8/f8/e068dafbb844c1447c55b23c921f3d338cddaba4ea53187a7dd0058452d9/wrapt-1.15.0-py3-none-any.whl", - "sha256": "64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640" - } - ] - }, - { - "name": "python3-pycparser", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pycparser==2.21\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", - "sha256": "8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9" - } - ] - }, - { - "name": "python3-PyYAML", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"PyYAML==6.0.1\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gz", - "sha256": "bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43" - } - ] - }, - { - "name": "python3-requests", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requests==2.31.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl", - "sha256": "92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/cf/ac/e89b2f2f75f51e9859979b56d2ec162f7f893221975d244d8d5277aa9489/charset-normalizer-3.3.0.tar.gz", - "sha256": "63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", - "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", - "sha256": "58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/d2/b2/b157855192a68541a91ba7b2bbcb91f1b4faa51f8bae38d8005c034be524/urllib3-2.0.7-py3-none-any.whl", - "sha256": "fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" - } - ] - }, - { - "name": "python3-requirements-parser", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requirements-parser==0.5.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/f8/89/612e3b326d87780dc1daf39af7696634f969838213cddae4f553f75d04ae/requirements_parser-0.5.0-py3-none-any.whl", - "sha256": "e7fcdcd04f2049e73a9fb150d8a0f9d51ce4108f5f7cbeac74c484e17b12bcd9" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/5f/a0/d3c2368cdf5989042cfd874632f1336e8d0b5bc9e2e924c5f2620122280a/types_setuptools-68.2.0.1-py3-none-any.whl", - "sha256": "e9c649559743e9f98c924bec91eae97f3ba208a70686182c3658fd7e81778d37" - } - ] - }, - { - "name": "python3-semantic-version", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"semantic-version==2.10.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", - "sha256": "de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" - } - ] - }, - { - "name": "python3-setuptools-rust", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"setuptools-rust==1.8.1\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", - "sha256": "de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/e0/34/d88a7ceb193fbcee6c8992d1b1e33ed20361027e07fea1676efc45ec7a43/setuptools_rust-1.8.1-py3-none-any.whl", - "sha256": "b5324493949ccd6aa0c03890c5f6b5f02de4512e3ac1697d02e9a6c02b18aa8e" - } - ] - }, - { - "name": "python3-types-setuptools", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"types-setuptools==68.2.0.1\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/5f/a0/d3c2368cdf5989042cfd874632f1336e8d0b5bc9e2e924c5f2620122280a/types_setuptools-68.2.0.1-py3-none-any.whl", - "sha256": "e9c649559743e9f98c924bec91eae97f3ba208a70686182c3658fd7e81778d37" - } - ] - }, - { - "name": "python3-urllib3", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"urllib3==2.0.7\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/d2/b2/b157855192a68541a91ba7b2bbcb91f1b4faa51f8bae38d8005c034be524/urllib3-2.0.7-py3-none-any.whl", - "sha256": "fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" - } - ] - }, - { - "name": "python3-wrapt", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"wrapt==1.15.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/f8/f8/e068dafbb844c1447c55b23c921f3d338cddaba4ea53187a7dd0058452d9/wrapt-1.15.0-py3-none-any.whl", - "sha256": "64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640" - } - ] - } - ] -} \ No newline at end of file diff --git a/sources/python3-pyyaml.json b/sources/python3-pyyaml.json deleted file mode 100644 index eae93af..0000000 --- a/sources/python3-pyyaml.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "python3-pyyaml", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pyyaml\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gz", - "sha256": "bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43" - } - ] -} \ No newline at end of file diff --git a/sources/python3-requests.json b/sources/python3-requests.json deleted file mode 100644 index 2207cd6..0000000 --- a/sources/python3-requests.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "python3-requests", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"requests\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl", - "sha256": "92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/63/09/c1bc53dab74b1816a00d8d030de5bf98f724c52c1635e07681d312f20be8/charset-normalizer-3.3.2.tar.gz", - "sha256": "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", - "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", - "sha256": "58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f" - }, - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/96/94/c31f58c7a7f470d5665935262ebd7455c7e4c7782eb525658d3dbf4b9403/urllib3-2.1.0-py3-none-any.whl", - "sha256": "55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3" - } - ] -} \ No newline at end of file diff --git a/sources/solidpiece-sources.yaml b/sources/solidpiece-sources.yaml deleted file mode 100644 index 96188a3..0000000 --- a/sources/solidpiece-sources.yaml +++ /dev/null @@ -1,602 +0,0 @@ -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/c5/c508bb7872d6ec93a23bba9ae8400fe207115e93ca88f1b3271d3230db78ef27.solidpiece - sha256: 776728908837eea365644ec4f87a31304e44fc0b7b06a1ad9e11650c1b395883 - filename: c508bb7872d6ec93a23bba9ae8400fe207115e93ca88f1b3271d3230db78ef27.solidpiece - only-arches: - - x86_64 - size: 1066923 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/38/3808feaf92c5f406d4880212704961bb2ee3ea0d803b03bce30b7b6e7313b79c.solidpiece - sha256: 466ca2384a20fd4b6e07105a24d918a0aa3d9a3621215dcddf264eee23edd7be - filename: 3808feaf92c5f406d4880212704961bb2ee3ea0d803b03bce30b7b6e7313b79c.solidpiece - only-arches: - - x86_64 - size: 1492417 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ee/eee0deb33adf88a0444c79b22cbdecd3e282b78df91b5c4f32096802d9811736.solidpiece - sha256: 035db67c0c0e0fd103bd7120aba4fabdc247b543d9e3a4814f0b50d426cd7127 - filename: eee0deb33adf88a0444c79b22cbdecd3e282b78df91b5c4f32096802d9811736.solidpiece - only-arches: - - x86_64 - size: 2427246 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/22/22ff8a9a4427a7c73a1d1d3a8b5bbe4ed39c4ba2503b5c0e74e55fd9bdbf1e56.solidpiece - sha256: 18167f1700b53771504ea15e1dd1a961e82711932b28e37ed8a7fd449cce9ec0 - filename: 22ff8a9a4427a7c73a1d1d3a8b5bbe4ed39c4ba2503b5c0e74e55fd9bdbf1e56.solidpiece - only-arches: - - x86_64 - size: 875390 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/96/969ae485206a28d570a43bf0b3d0f5c756cad11448bb527e74d84ae93a56405c.solidpiece - sha256: a0c103371a49c38f57ed0631a76a483e56f5410bf1962904fdf7abd353960952 - filename: 969ae485206a28d570a43bf0b3d0f5c756cad11448bb527e74d84ae93a56405c.solidpiece - only-arches: - - x86_64 - size: 327051 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/d6/d66e85dbd448defd36e63e86d9488e2877a5192c708d6a0120330f3edb5bb549.solidpiece - sha256: e2aa43f9e1b3b6634c45e5dc9c0b7cb3685f05817db6e782e829beede8ecbd8e - filename: d66e85dbd448defd36e63e86d9488e2877a5192c708d6a0120330f3edb5bb549.solidpiece - only-arches: - - x86_64 - size: 357773 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/5d/5d7837815e681fca3bd71dba0ad677b0666f6f77b9a8ecaffc2f6eeb5535a195.solidpiece - sha256: b7ed8046691086bc7da459af486e488d0801377c9aa4f01ad94ad51e5b05f60d - filename: 5d7837815e681fca3bd71dba0ad677b0666f6f77b9a8ecaffc2f6eeb5535a195.solidpiece - only-arches: - - x86_64 - size: 596208 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/58/5884b962e1b8c757ad2920f306c7bd6a222c69e5ef6d197c6cf3cdc2b45f16a9.solidpiece - sha256: e724b40ce455dce37b5ce60d613f4e49dc96c1f381ef4778441d9273947a0e11 - filename: 5884b962e1b8c757ad2920f306c7bd6a222c69e5ef6d197c6cf3cdc2b45f16a9.solidpiece - only-arches: - - x86_64 - size: 1050728 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/fd/fd03b273e4a81b47ca5281a526e838160dcd4fb5a876ce266a759b82a282b330.solidpiece - sha256: 4b3f7f27ed98fef67c4a1b840a3512f589b9955e47c910fb8d92b351b2e597d5 - filename: fd03b273e4a81b47ca5281a526e838160dcd4fb5a876ce266a759b82a282b330.solidpiece - only-arches: - - x86_64 - size: 1889556 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/b4/b431cc72835506f9a193cc5c252caac10c5e640828e1e71b0c8216dd81c15d87.solidpiece - sha256: 9789c6f4533ff083fe8d2d0941c6687e780a7800b07b3144b28b0841800053c8 - filename: b431cc72835506f9a193cc5c252caac10c5e640828e1e71b0c8216dd81c15d87.solidpiece - only-arches: - - x86_64 - size: 2814134 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/fc/fc9516156059547478cb6f1218076cfd5362ae06940033f4549123e4468bbadd.solidpiece - sha256: 21bb18da5498875cdeda576b78046e9044a1836684fa59a2878cb55acbeedb10 - filename: fc9516156059547478cb6f1218076cfd5362ae06940033f4549123e4468bbadd.solidpiece - only-arches: - - x86_64 - size: 1211242 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/d8/d8f4dbcf2e059fad1eb53f99362905b8bc5b633bf385dcb26a402f12ce009b50.solidpiece - sha256: a7981c2e5fc51b21c0c8d2eeae0ae67fe2c59138ace5dc9371e352c0b5ac2ae2 - filename: d8f4dbcf2e059fad1eb53f99362905b8bc5b633bf385dcb26a402f12ce009b50.solidpiece - only-arches: - - x86_64 - size: 1222541 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/47/474391e4b4680260619ed740d80b24d1fe1b5af3b937ec83e53553edd0e9c744.solidpiece - sha256: 75adf4ed43c43cf6ce130c92089f9ba96bc247545402cf9fb9da0c4a9a79141a - filename: 474391e4b4680260619ed740d80b24d1fe1b5af3b937ec83e53553edd0e9c744.solidpiece - only-arches: - - x86_64 - size: 1129277 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/34/349af59928a7cab8aeb80435acc53ee80c540763e47e860203bde4022fd0d251.solidpiece - sha256: a544543ef23075e4f2b1cd762925db65672d47ff23474bc6c271d711e6816a75 - filename: 349af59928a7cab8aeb80435acc53ee80c540763e47e860203bde4022fd0d251.solidpiece - only-arches: - - x86_64 - size: 1918176 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/24/24fd26c2dc8b18b2f1cf8f82bf3c89365503d59b3a5918869f9f6389060b1fea.solidpiece - sha256: 248a640bfbf4adafc6ffafd2f14974cf89dba4a3f6b4f3949254d060999e166b - filename: 24fd26c2dc8b18b2f1cf8f82bf3c89365503d59b3a5918869f9f6389060b1fea.solidpiece - only-arches: - - x86_64 - size: 540840 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/1c/1c489a2cd04db62dd79a567cc29eb326caa4e71b20609dae82f86c52e4c00489.solidpiece - sha256: 44a90e0659e34c7d0feefbac691444f90ac64fbee8f2ec986064e6a58acd363d - filename: 1c489a2cd04db62dd79a567cc29eb326caa4e71b20609dae82f86c52e4c00489.solidpiece - only-arches: - - x86_64 - size: 992226 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/1a/1ad5f4f6175fc47df17ca1bdfadad93c9423d536af2a4e4d7c962247a09505d2.solidpiece - sha256: 298e96ace93344ff76063b59c6ff0e92d6a17a01c7aec356242cf45b4b126b55 - filename: 1ad5f4f6175fc47df17ca1bdfadad93c9423d536af2a4e4d7c962247a09505d2.solidpiece - only-arches: - - x86_64 - size: 690677 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/0c/0c8fc27c55395638098da180da3dbc76a5a5de43e8d326d9356239bbcd5c3121.solidpiece - sha256: f47071cdd961fb7bfe5f7452528bd15d1b58b7bb3d3dc7a6c126f12933d57868 - filename: 0c8fc27c55395638098da180da3dbc76a5a5de43e8d326d9356239bbcd5c3121.solidpiece - only-arches: - - x86_64 - size: 1174483 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/39/39a133e7fe0ef6bf0faf4fe6d706c278350c57be5d104d613bc234353df6fbbc.solidpiece - sha256: 822defaf415ef45d389473357ede9b9e776917f26220042e4a6f55a78ac4a66c - filename: 39a133e7fe0ef6bf0faf4fe6d706c278350c57be5d104d613bc234353df6fbbc.solidpiece - only-arches: - - x86_64 - size: 942467 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/e2/e26ca668f771b27f8f42c792ba61662a21a0417ae74a2a83bad7b1545d466887.solidpiece - sha256: 90ff2e0773076784568e8287049245744cbe3c4d26b7def6ffdee68317ac14fb - filename: e26ca668f771b27f8f42c792ba61662a21a0417ae74a2a83bad7b1545d466887.solidpiece - only-arches: - - x86_64 - size: 553380 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/1c/1cbdec05be355c99a45de0cbf71388f1429f30a5e2434be94043510f3061d558.solidpiece - sha256: 0c96fcb6300a7c917c057adc0acb7b123c7afe4783e2422d9e5e839fbbef559f - filename: 1cbdec05be355c99a45de0cbf71388f1429f30a5e2434be94043510f3061d558.solidpiece - only-arches: - - x86_64 - size: 497565 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/2d/2da50a3ef95753a3c56e2254e0fb85805a0c3c6c7b968c16f4a58a707a30d1ab.solidpiece - sha256: cdf9029a7e65032adf1b136e6a30e92725dbbf449d1e0059e85bafed0d0edae6 - filename: 2da50a3ef95753a3c56e2254e0fb85805a0c3c6c7b968c16f4a58a707a30d1ab.solidpiece - only-arches: - - x86_64 - size: 567633 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/80/80b4310ca1906bd7ae28ab6d2dfda3ab44551600ef26826d1131e0b13d6799e1.solidpiece - sha256: 729bc781cef20843aa930e13ada277de80b6042166bcaebf549ca58792ccc924 - filename: 80b4310ca1906bd7ae28ab6d2dfda3ab44551600ef26826d1131e0b13d6799e1.solidpiece - only-arches: - - x86_64 - size: 1090801 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/88/88bd51de36bbe5ee43a8e5f8eb228e7b6a0d904288cabb0d57b6bd9d9af5969e.solidpiece - sha256: 317cf0783a5f7a8999ac7b622064422cae71729fd2550bbbf86d077ebc4c95c6 - filename: 88bd51de36bbe5ee43a8e5f8eb228e7b6a0d904288cabb0d57b6bd9d9af5969e.solidpiece - only-arches: - - x86_64 - size: 833269 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/8b/8b892e8215fa20d2d04e54e55247eb14b28b1777c67d9c0238c4bfdd84824f01.solidpiece - sha256: e0330b7e5eb692febd8f86859fd1ea3a1785f9e4322e44825a3d5506bd79f84e - filename: 8b892e8215fa20d2d04e54e55247eb14b28b1777c67d9c0238c4bfdd84824f01.solidpiece - only-arches: - - x86_64 - size: 2016009 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/5e/5ed9204afdae9226ca74f9d9283a92c8ebe976655363b9e70a13ed2f8650ff17.solidpiece - sha256: 1c077f321f954e696d7b0eebef992ec06885d23db145ef489ebd53cc218e054f - filename: 5ed9204afdae9226ca74f9d9283a92c8ebe976655363b9e70a13ed2f8650ff17.solidpiece - only-arches: - - x86_64 - size: 1729003 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/d7/d7c96554545b51ff335bc9d6aa0c75d61b10571e3c6e2f25981bfb7ab9460fee.solidpiece - sha256: 568be85dacbbbc5ab0306212d2f64576d20d8a03c56fc715137c32812a6142bd - filename: d7c96554545b51ff335bc9d6aa0c75d61b10571e3c6e2f25981bfb7ab9460fee.solidpiece - only-arches: - - x86_64 - size: 920146 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/be/be384afe1121c11e4975cb45100ae2bd81c698124e4c0435db58513e7dde2354.solidpiece - sha256: e4da2b77612548dcb2d588cdc880828226f8e1ed68b09d2cc3e0b97a031f4c80 - filename: be384afe1121c11e4975cb45100ae2bd81c698124e4c0435db58513e7dde2354.solidpiece - only-arches: - - x86_64 - size: 1420961 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ec/ec98ff3f9262916dc04e3004e5a620a5db5eac7e50b51a548437cd386eb501f7.solidpiece - sha256: 14162fc89a9c9f02bd0f410bc62a1d91d53101ea63bcca9062ef3b765becee4e - filename: ec98ff3f9262916dc04e3004e5a620a5db5eac7e50b51a548437cd386eb501f7.solidpiece - only-arches: - - x86_64 - size: 825176 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/b8/b89f27b7a55948918779d156f233e4dfcf3681eb3c402a8a28f72a692b48d00a.solidpiece - sha256: babbefb56b732904355ca56de876fc7a62f5543a0a1894b014c4eefd176d5a8c - filename: b89f27b7a55948918779d156f233e4dfcf3681eb3c402a8a28f72a692b48d00a.solidpiece - only-arches: - - x86_64 - size: 1846475 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/29/29ffbe31c75e847bd1a34b03efc4304af953c4cadb0945f317f380723ca7e7c1.solidpiece - sha256: e97fcf1d46d665b2761ca2d3ab2fc15de7cbf1f53a0e3ce4f9d73c39c3610600 - filename: 29ffbe31c75e847bd1a34b03efc4304af953c4cadb0945f317f380723ca7e7c1.solidpiece - only-arches: - - x86_64 - size: 712833 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/0a/0aab4e9ae8f442f68b85d64e31ffc2d0e7e10ffa8f54a72d26141905bc6776f3.solidpiece - sha256: 5452f99cc8ea424e5d730716a48255348b2be7975d2f4683e6b4b5f562622ad3 - filename: 0aab4e9ae8f442f68b85d64e31ffc2d0e7e10ffa8f54a72d26141905bc6776f3.solidpiece - only-arches: - - x86_64 - size: 2088226 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/8b/8b76de59ac0ee306eb46e368dfb00da1de93306250157f5954f983867587f3db.solidpiece - sha256: 24bba3330ac48e7aef05086825dc9f60d6a6d793d8135b9e408ea2bc8ed89e6b - filename: 8b76de59ac0ee306eb46e368dfb00da1de93306250157f5954f983867587f3db.solidpiece - only-arches: - - x86_64 - size: 1140530 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/be/be44fbefdce006af03aca3841ec613d121a73c0a4af1c523bc85e7b4ec47fb30.solidpiece - sha256: 986bd7a0b81de1b8eaf5b8aa9262c94ba0fae8e1f5deb186c062a57eb85aea2c - filename: be44fbefdce006af03aca3841ec613d121a73c0a4af1c523bc85e7b4ec47fb30.solidpiece - only-arches: - - x86_64 - size: 1741484 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/db/db0252380d48d8e83bcf4d9691bf81cc5c818b0eaa0c05ba3e61d5f79eceffd8.solidpiece - sha256: 6ebd4623829c12cbc60a251a8acbaa58fdb3385f1f117aece30e53898e9c1526 - filename: db0252380d48d8e83bcf4d9691bf81cc5c818b0eaa0c05ba3e61d5f79eceffd8.solidpiece - only-arches: - - x86_64 - size: 1090651 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/3a/3a347665fbd720be5e1eacbf354c73025d97cd9cdde1b143d961eeab859e4f43.solidpiece - sha256: 90bab8429ba1d0fe9483dcea8ebd4f4f3d6dc27837138b971181e89c27d562ca - filename: 3a347665fbd720be5e1eacbf354c73025d97cd9cdde1b143d961eeab859e4f43.solidpiece - only-arches: - - x86_64 - size: 1024663 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ed/edf259fa8fe28f89071c43fd8406565da8e57cf92ed54f9454839d781c85267b.solidpiece - sha256: 5310ba40bdfcac09666ac22dc7d1d2043e25b42a8bd507d222289bbaa4b4d013 - filename: edf259fa8fe28f89071c43fd8406565da8e57cf92ed54f9454839d781c85267b.solidpiece - only-arches: - - x86_64 - size: 566135 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/4c/4c8bbba6160679bea090181ca9dd82405d8ef02a8366fcfbf166e45fc88016dd.solidpiece - sha256: 72cdd1b7f89c3e8c5158ebc9a3ec7b5c8e1859a5502e9328c95c459c7b64eb7a - filename: 4c8bbba6160679bea090181ca9dd82405d8ef02a8366fcfbf166e45fc88016dd.solidpiece - only-arches: - - x86_64 - size: 1413801 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/05/0542a1254588a54baddb1c237ef9216aeda4bb72abe623173d5593f5929b801b.solidpiece - sha256: 014254992e1719feaf8b1c4c6675416f70cfd527bb27c1a14a5407c323b44f88 - filename: 0542a1254588a54baddb1c237ef9216aeda4bb72abe623173d5593f5929b801b.solidpiece - only-arches: - - x86_64 - size: 505607 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/24/240204e166973252b9c87111bb12dbea6167fc8b95c6a4a8d54c417d326a329f.solidpiece - sha256: e2a3c40ebb14f4984ba7df51a2dd0e7517bab573858949ebc8cbc02433256cec - filename: 240204e166973252b9c87111bb12dbea6167fc8b95c6a4a8d54c417d326a329f.solidpiece - only-arches: - - x86_64 - size: 1047101 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/2b/2b5cc5c28c524985a01662f5222c2b8efc8d60ad17900b2647aa6f532fc82600.solidpiece - sha256: 36b63c31835ca450cb314d3aac2c967d76df619948c67a52acf9cebd5807a2ab - filename: 2b5cc5c28c524985a01662f5222c2b8efc8d60ad17900b2647aa6f532fc82600.solidpiece - only-arches: - - x86_64 - size: 705956 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/a3/a33de13edc4f918aaf56a2903b1093e91752876e15e0688d5df5be79bda00ec5.solidpiece - sha256: 5bbc5ce070639120b2febe26a6af4dbeead9efcb0a9c2867df0d15ea211ae165 - filename: a33de13edc4f918aaf56a2903b1093e91752876e15e0688d5df5be79bda00ec5.solidpiece - only-arches: - - x86_64 - size: 2064488 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/b5/b5a7a2a0529e7e24e004d41796e1fe8791670483b420bccb4bf62a5e9a70f52a.solidpiece - sha256: 110e929732081db74a507cdb980a377aacd541d20d694db20e9c42e2d8e83625 - filename: b5a7a2a0529e7e24e004d41796e1fe8791670483b420bccb4bf62a5e9a70f52a.solidpiece - only-arches: - - x86_64 - size: 690487 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ef/ef39635c957c9b2cd1f8a6de3ff342561c82bcb7475de99f2fa9b33c085bda09.solidpiece - sha256: b752d2fb0252c0207123a023fcf62b63c7ec54a9fcfba108607c61eb8cd97bf9 - filename: ef39635c957c9b2cd1f8a6de3ff342561c82bcb7475de99f2fa9b33c085bda09.solidpiece - only-arches: - - x86_64 - size: 1137441 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/5a/5a553fce1376377d1913b3425f088eecfbfeb8d19b6941874a1be95eed28f591.solidpiece - sha256: 09243b18b78e504a4b1a17ff7f0119fb125e97591fae459049464bef436ea51a - filename: 5a553fce1376377d1913b3425f088eecfbfeb8d19b6941874a1be95eed28f591.solidpiece - only-arches: - - x86_64 - size: 880912 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/3a/3a23fe6401fe3cb19097c21737f90ebadb3c82b9c4edbbb7b0af311b1b8cebef.solidpiece - sha256: 384f3b50102ff3cd867cf1624002215575b9d14c31543cd4601165a979c10cdd - filename: 3a23fe6401fe3cb19097c21737f90ebadb3c82b9c4edbbb7b0af311b1b8cebef.solidpiece - only-arches: - - x86_64 - size: 2083200 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/30/305fcbf3c0d8843e6ce51052fb11967e7d2e4857c689a9f543fe92ddd67cc650.solidpiece - sha256: 1eb7d675bf392fd0f2516845c658fca0cc56117376bb547b49354a1c80d11ab6 - filename: 305fcbf3c0d8843e6ce51052fb11967e7d2e4857c689a9f543fe92ddd67cc650.solidpiece - only-arches: - - x86_64 - size: 2005567 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/f7/f7fa67f24f5550d2caeee7a677fad9eaee003ce5569da4319e02a2e98c1484b6.solidpiece - sha256: af7f6c76259116cb8f7e1a08bf4c85839ae317823fd361fab098f3e70121c2d1 - filename: f7fa67f24f5550d2caeee7a677fad9eaee003ce5569da4319e02a2e98c1484b6.solidpiece - only-arches: - - x86_64 - size: 1262744 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/f1/f1a5cff83b111d0bf7dbe3af992fcda6242b4ac290241d97780ca9351f7edd38.solidpiece - sha256: 3da5c49741fd0f2d6c289c6059ceaded1f5e9585ce4a0448ba642d7e7264962d - filename: f1a5cff83b111d0bf7dbe3af992fcda6242b4ac290241d97780ca9351f7edd38.solidpiece - only-arches: - - x86_64 - size: 1332952 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/e8/e86242147521eeabf7702bf449ffdb3061d90a46be109efd27639d49602cf2aa.solidpiece - sha256: d5628d0aae0731f76040b48e27f5f673cf2b58e8702b682a22b4cfe8935525ff - filename: e86242147521eeabf7702bf449ffdb3061d90a46be109efd27639d49602cf2aa.solidpiece - only-arches: - - x86_64 - size: 1934943 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/c4/c479b85d1c324dc89b90775e06ee57f08350adcd70389b74c781dbb7ce404579.solidpiece - sha256: 75e171be7873889333f4bd66ce63d69d4455d8cde86f73c6accb692099bf0b76 - filename: c479b85d1c324dc89b90775e06ee57f08350adcd70389b74c781dbb7ce404579.solidpiece - only-arches: - - x86_64 - size: 1813561 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/0c/0c0a10d15a9f8875ece65a179a52f1481fb52cd822e5c889799676e103c918f3.solidpiece - sha256: acc23cf2f1e966cacd4ee8fe677a559cbb631956d60cc32084e8b948af6c23ba - filename: 0c0a10d15a9f8875ece65a179a52f1481fb52cd822e5c889799676e103c918f3.solidpiece - only-arches: - - x86_64 - size: 1120777 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ba/bac05c2930f88a47ee13d33ff0fc50ce4e00fc2a6a2418a3db249bb4eb4c94e6.solidpiece - sha256: 17b7618bd5629b59357ac1d98df6956134a391312a141286490f6fc78eff0ac6 - filename: bac05c2930f88a47ee13d33ff0fc50ce4e00fc2a6a2418a3db249bb4eb4c94e6.solidpiece - only-arches: - - x86_64 - size: 751897 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/d8/d874a2406207dc11ce0e051cf65aa47e349c3fd169efa88ec9a2cd4f6bd42193.solidpiece - sha256: e2f7c0250701ce3614b26f45b99d99ea4c22d2529cbbb0ed7b402c0813797d03 - filename: d874a2406207dc11ce0e051cf65aa47e349c3fd169efa88ec9a2cd4f6bd42193.solidpiece - only-arches: - - x86_64 - size: 2030879 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/7b/7ba0eb43400c34e5495dbff6209275377c220e84e60915d70185067bc2c56c97.solidpiece - sha256: dd5c507db6a8d0a76e9a388a5fa6c9bbb07d0b6a5b09ad544a5057857cbaec07 - filename: 7ba0eb43400c34e5495dbff6209275377c220e84e60915d70185067bc2c56c97.solidpiece - only-arches: - - x86_64 - size: 1173741 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/75/7569ab301e07025e6a87249efba3e030804d34fedf96e48410d7535559e7ae9c.solidpiece - sha256: e873bd64d7871709aa18520a5a7b90ebd126c940f97441b44803e029c2084d62 - filename: 7569ab301e07025e6a87249efba3e030804d34fedf96e48410d7535559e7ae9c.solidpiece - only-arches: - - x86_64 - size: 2033768 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/19/19ace17b2b792c997f242787573aad001ffa15f3428c97600b3bef86a450d186.solidpiece - sha256: 58716cbb486204605cbb0de11341323cb6a1cdc491997c63042d6dea7dc6b96b - filename: 19ace17b2b792c997f242787573aad001ffa15f3428c97600b3bef86a450d186.solidpiece - only-arches: - - x86_64 - size: 1975189 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/7d/7d0651b1d1af4c4a19a42d9479be0f6259318ca69a4328da2eac7aa6c598dcbf.solidpiece - sha256: 0f6662f7ab740b3e1795a9c4570ab86e6e0cfd2e19cebcd52c49ec06fccfc8ed - filename: 7d0651b1d1af4c4a19a42d9479be0f6259318ca69a4328da2eac7aa6c598dcbf.solidpiece - only-arches: - - x86_64 - size: 1117638 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/07/07a571c1778140542648c04a5a523deaa74e6e74084cc6668c475d7ef118e2d4.solidpiece - sha256: a42bff24dc54e7290ab4ca17377ac3fbdb709742b72c99bee6e8baa3f107b425 - filename: 07a571c1778140542648c04a5a523deaa74e6e74084cc6668c475d7ef118e2d4.solidpiece - only-arches: - - x86_64 - size: 1396589 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/1b/1b041b1788f14ad2eee663e8e7146df86ed77c261706e556c6b2ba85007b27c4.solidpiece - sha256: a00ca23bd2e626f4573c451f19ca222a935520a0104702bd2493c696b4353b89 - filename: 1b041b1788f14ad2eee663e8e7146df86ed77c261706e556c6b2ba85007b27c4.solidpiece - only-arches: - - x86_64 - size: 2054699 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/bc/bc4cc3c4fa048297e6afafd4608f5d6a38a3f6164a5b726f0282eb2acef15e99.solidpiece - sha256: ec257404da4a20937e822d4a350ade2a86e9fb348e90812fce4e3edc154f4cd4 - filename: bc4cc3c4fa048297e6afafd4608f5d6a38a3f6164a5b726f0282eb2acef15e99.solidpiece - only-arches: - - x86_64 - size: 2401111 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/52/5289110490caaa27c76cc92504513c2e39c40138824eea9853c1d92463c8d614.solidpiece - sha256: 23109320f7d2c5571a46f323bf60219c8b10688e5ccb908ea033e3a87502d806 - filename: 5289110490caaa27c76cc92504513c2e39c40138824eea9853c1d92463c8d614.solidpiece - only-arches: - - x86_64 - size: 789195 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/6c/6cec61b37bc5943034d71dd7c0c95af7286bcd33445ce357a704e5ccb3485b46.solidpiece - sha256: 61d2d3825f4739e81406801898239003258027fee17f1bc1117478d646121bab - filename: 6cec61b37bc5943034d71dd7c0c95af7286bcd33445ce357a704e5ccb3485b46.solidpiece - only-arches: - - x86_64 - size: 1426357 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/c1/c194c2d8a5ef41e72a529fc3f1eae812ee5c35e2b7c124f044ca77542e7789ed.solidpiece - sha256: a4f8ad81642f9183cbcfdb9a6c8dc2362096ebb7f805c6f323b04626329d8781 - filename: c194c2d8a5ef41e72a529fc3f1eae812ee5c35e2b7c124f044ca77542e7789ed.solidpiece - only-arches: - - x86_64 - size: 962172 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/3a/3aa67bb56a38480b2ede08ef5f707a4f009f959e6aebe8804f9039512f49b56c.solidpiece - sha256: 0d1bff4da2f58ec76b8c88c44ad860598605f6b78006f27d166298fd0fa72032 - filename: 3aa67bb56a38480b2ede08ef5f707a4f009f959e6aebe8804f9039512f49b56c.solidpiece - only-arches: - - x86_64 - size: 1406128 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/a3/a35010736f7af4bfd1cd3f0be36208a5fc4988ef6c4a42d08ebe51f6e0c4bd72.solidpiece - sha256: dc6859883f162f081227e75672a56f0ebcffc3ade10f7ac44b5b20606ddab7f5 - filename: a35010736f7af4bfd1cd3f0be36208a5fc4988ef6c4a42d08ebe51f6e0c4bd72.solidpiece - only-arches: - - x86_64 - size: 329625 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/1e/1e38d5741ebee504766d4539097444b7fa28f4a4d8b9a7435369740309283f4f.solidpiece - sha256: 88d4b1694804ee5f66b9cb9aa7637c0b65359bf7ab0991e03d66e81ea6897bfa - filename: 1e38d5741ebee504766d4539097444b7fa28f4a4d8b9a7435369740309283f4f.solidpiece - only-arches: - - x86_64 - size: 562751 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/17/17393deab6828914b4d1c5d73343a65fd59cb46ac27342fdd931b287e6d3fcb0.solidpiece - sha256: 7d0b0195b3094ff6d86e7c129ca2d0e3358425b0f470d66760835a11748f0587 - filename: 17393deab6828914b4d1c5d73343a65fd59cb46ac27342fdd931b287e6d3fcb0.solidpiece - only-arches: - - x86_64 - size: 889926 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/91/91abcaf00cd4f2b1ff2be31f569ef0af272343f79b466dca86d543917c012694.solidpiece - sha256: 3e79b2a8df75fbe8b29e6abeaca646db682497ffc4bd6cf35f5739d1cb2311bf - filename: 91abcaf00cd4f2b1ff2be31f569ef0af272343f79b466dca86d543917c012694.solidpiece - only-arches: - - x86_64 - size: 694652 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/a3/a35a720a5fa7cdb56a0ed45f367632bb9050c8fabc6cc04ccc59e058d58f37eb.solidpiece - sha256: d03d965ef670c90f9960cabd2269bff4a10982d8f53ef6bda07083d28c2e28c7 - filename: a35a720a5fa7cdb56a0ed45f367632bb9050c8fabc6cc04ccc59e058d58f37eb.solidpiece - only-arches: - - x86_64 - size: 865784 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/f3/f32b9d00853eeeccd80bf8f53b9605fdd07f11546ecdef3fea5c3b5168a33cdb.solidpiece - sha256: 344418d622357500cd771463a319631633a8e83a49d55689fc9000e3385e91cf - filename: f32b9d00853eeeccd80bf8f53b9605fdd07f11546ecdef3fea5c3b5168a33cdb.solidpiece - only-arches: - - x86_64 - size: 1927572 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ef/efdbfff3a0be82221cd754507b4a7e99cea98fe120d3a31c76117c92b5b361c9.solidpiece - sha256: 00cb051bd005a9fd55cf20d09671dc3e46e7665a9398eb8e9e8f16cdad3cdb12 - filename: efdbfff3a0be82221cd754507b4a7e99cea98fe120d3a31c76117c92b5b361c9.solidpiece - only-arches: - - x86_64 - size: 1346821 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/15/15005ed999d89f7cbc847c66c0679a5e1f3d2515e597579d7788aa8ab2ff9b1b.solidpiece - sha256: b94b0b45e02d15dbaeff9cc77435e569ada61ab58df9c9868c94df3c33b414d5 - filename: 15005ed999d89f7cbc847c66c0679a5e1f3d2515e597579d7788aa8ab2ff9b1b.solidpiece - only-arches: - - x86_64 - size: 1474371 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/c7/c7936051432ae3144f8ed1ba77fb4860920cfd2f838549f87722b920f5637e95.solidpiece - sha256: e0d0f31069327b61e42ff2e253058f39f117d4bf19502943bb5f2cf5afff1120 - filename: c7936051432ae3144f8ed1ba77fb4860920cfd2f838549f87722b920f5637e95.solidpiece - only-arches: - - x86_64 - size: 1092832 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/1a/1a7e2c501d1d1e9aff97ced5ddd45300e1fe3998aa5f2819714645dbebeae83e.solidpiece - sha256: 599a34f7aa8302b79797805f8ee954644ad161fef075c63e14ebdcb940dd9a5f - filename: 1a7e2c501d1d1e9aff97ced5ddd45300e1fe3998aa5f2819714645dbebeae83e.solidpiece - only-arches: - - x86_64 - size: 865497 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/cd/cd2e910cd733a00adbaa9fb4672612b69dbde310b67b38d6a8b89f1fce6bfa94.solidpiece - sha256: 26fd6cebaba56cce5728092122329bb23c29d89ebb1055107394890ca35367d2 - filename: cd2e910cd733a00adbaa9fb4672612b69dbde310b67b38d6a8b89f1fce6bfa94.solidpiece - only-arches: - - x86_64 - size: 853566 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/b8/b83f3a54294430cc09c35203ded880782fc13ce27154e7ff7abdf49d3ae2e75d.solidpiece - sha256: 7c12a6ee825d31bb511744b0746aa792dd4f5bd3d8103fab1c07f8be0d1f2e09 - filename: b83f3a54294430cc09c35203ded880782fc13ce27154e7ff7abdf49d3ae2e75d.solidpiece - only-arches: - - x86_64 - size: 828121 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/23/23185c2347992a8d0efa59ce0b3504a4030976b4d89b462b33faec1b20fa2cb7.solidpiece - sha256: 5fa6c0a8bdf8aa45f253f05dab6e35992becff14602f239913bb4e9dd35c2e55 - filename: 23185c2347992a8d0efa59ce0b3504a4030976b4d89b462b33faec1b20fa2cb7.solidpiece - only-arches: - - x86_64 - size: 425874 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/72/72f058f10cdc0fda21d0e3617b3d29cd9d0171350629df195cbaff2ed2905d89.solidpiece - sha256: e8eca3ae64b087de75c50a7f8216138fbd6cfbef87f726e0eb21ba87ef373798 - filename: 72f058f10cdc0fda21d0e3617b3d29cd9d0171350629df195cbaff2ed2905d89.solidpiece - only-arches: - - x86_64 - size: 362010 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/60/601c28b65829a68f26de5118aa12d64041a9456587d778aca273085283d426f3.solidpiece - sha256: 9d5c8705acececc0f5fef3828c67ece2ea06713b99f1ba9ca5b24ef706ee8bbb - filename: 601c28b65829a68f26de5118aa12d64041a9456587d778aca273085283d426f3.solidpiece - only-arches: - - x86_64 - size: 1257015 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/ce/ce7d17b61b1e4f844613ebf1e599bb785668eef9e2499d391cff55a6ee51c05f.solidpiece - sha256: 40758c645393b4178e0cf1db901e9f3bc227fc4a35affe9d1853a5f898ae1ab6 - filename: ce7d17b61b1e4f844613ebf1e599bb785668eef9e2499d391cff55a6ee51c05f.solidpiece - only-arches: - - x86_64 - size: 506704 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/55/55b45bf96d729b2458952a65f66fb2371c17843fd00e6fd5c9ddf126f58927c2.solidpiece - sha256: 45ce2c3088153c5e3bd440f6cad24e6d018a4d133605282ac35ab0fe26d71f13 - filename: 55b45bf96d729b2458952a65f66fb2371c17843fd00e6fd5c9ddf126f58927c2.solidpiece - only-arches: - - x86_64 - size: 1433932 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/e6/e6476618c43b6b8a07603fa50e840a4812f19b831c0e63cf0eb9a659414728d4.solidpiece - sha256: 61bd734452488595c60294368b513c97d3a60afa513a0b22aefc455d19823823 - filename: e6476618c43b6b8a07603fa50e840a4812f19b831c0e63cf0eb9a659414728d4.solidpiece - only-arches: - - x86_64 - size: 3712136 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/17/17b79e45db0b8f38ef7ec8e025d15081afa8e80801bf64f287b8e818c08f81d9.solidpiece - sha256: 550bd372f461c2ab95d6cf0fe53a659e38f69adec112d34cd0badca4fc75ebf8 - filename: 17b79e45db0b8f38ef7ec8e025d15081afa8e80801bf64f287b8e818c08f81d9.solidpiece - only-arches: - - x86_64 - size: 3160809 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/cb/cbcc543d3f0eb308697a31951bedea8cba6a7ecfd069661404f0403983c630ee.solidpiece - sha256: b0d0acaca67c00e5f6fca4baa550b0f05a53d788adba43f6d900d76e38103d15 - filename: cbcc543d3f0eb308697a31951bedea8cba6a7ecfd069661404f0403983c630ee.solidpiece - only-arches: - - x86_64 - size: 722524 -- type: extra-data - url: http://jagex-akamai.aws.snxd.com/direct6/launcher-win/pieces/67/67db7232c1387f4145a8267b3a050bb137e9f2850fc2ce5c7349d773d8fa4d49.solidpiece - sha256: 4b6affb96e1812d1c59414305969b109687996895062e378afec59a294d753e8 - filename: 67db7232c1387f4145a8267b3a050bb137e9f2850fc2ce5c7349d773d8fa4d49.solidpiece - only-arches: - - x86_64 - size: 1150720