SPDXVersion: SPDX-2.1
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: project
DocumentNamespace: http://spdx.org/spdxdocs/spdx-v2.1-76d98736-3055-41df-a81d-010d5028b531
Creator: Person: Anonymous ()
Creator: Organization: Anonymous ()
Creator: Tool: reuse-6.1.0
Created: 2026-07-13T03:29:09Z
CreatorComment: This document was created automatically using available reuse information consistent with REUSE.
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-70c4e49ae133c3567791a0f197a42af1
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b70310b85eab6c8790b273d11fd3a647
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-8fd32224d080851f7b012a645e7ccf93
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a2aa65ddac52a0f4ad63030b7ea92328
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-be8f05ee6a431aa1f8f363d83f31b18a
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-8bf08b10a7fc5feb8468b66211b170d4
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-ae39448ad4229f8f72e4d91136911b90
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-5d587f529e52bef6e824a8787cfa5908
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a0d14ed64c1ab935a52f1b5a0bcf7f3a
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-c83df801fb369d2069dc4a947aeca814
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-1caf0f063cabaaf283696ac1c76a590c
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-5154e5261ee990ce68698f7950b0c98a
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-2dc24d435530b511fda5ff52b78e61d7
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-40fe01f10e3dd07497c2faaad3e77456
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-8effc75368a2206eec88283da89ce38a
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a897454f056f992c091e44fdc30e2c13
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-9cce95baa99480013a87b78a44a07cc5
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-8fc2b4363913a7d8200eaf5c1bb927ad
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b66fb6054c752ac4488be1e24cad7972
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-cd90371a9118b8210686491134d0a0df
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b127233efc892f45688cbc6abd900b09
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-986871ede40c8907a3532fab5c48f9a4
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a4093ef69cb5369c9afb09bbb812ea33
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-7388e1de496e8155498f0658aca2fa1e
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b7f7b86ae8842404047c8143e1841adf
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-0f23cb8196758ad5e1faf77b137d47ca
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a2c3410e93a1e3a15cd0bb550b46358d
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-be3a0b06c9645181945c188616b75d1f
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-9bfdf4ff5d4bf45cc5877a57c54f2d76
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-c25101c081ae60f915f745f36604eece
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b78d309c37ee0a117c5a3538c08754b5
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-095272a217d90187a6e6c047249ac5af
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-dc90f753213afb94c0e30a7075d855c7
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a6ad6254064dd0cd6461c0b29972d966
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-f2fd4a294cfbf2518b6670b7166c8e60
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a0eca3597d576d945aa19a924c3569af
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-959408e6c0e51d1202cbba87e446216f
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-07d7206c26c2d69efd1abbbb3edc2a04
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-19c0a4b9ff8ca6518c273023ebf6d629
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-26a67271a5b22c614469882a56abfce5
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-70cecfb4a62db53b0ec811b44301f3f2
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-77b8d435ac0aabecf98f05cf835c6464
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-6b3ea9c1f704ca62da93335c57a196e3
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-005ef2afab74f11923b56f979213d1b5
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-c51e4f7c958e3a523ccda498197ebb0c
FileName: ./.editorconfig
SPDXID: SPDXRef-70c4e49ae133c3567791a0f197a42af1
FileChecksum: SHA1: c018ef3aa9e572f2153491481b4663f52e30bc57
LicenseConcluded: NOASSERTION
LicenseInfoInFile: WTFPL
FileCopyrightText: Copyright 2021 林博仁(Buo-ren, Lin)
FileName: ./.gitattributes
SPDXID: SPDXRef-b70310b85eab6c8790b273d11fd3a647
FileChecksum: SHA1: 39a5ba58bd41a05355b04d1a900fca405e887ae4
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./.github/workflows/README.md
SPDXID: SPDXRef-8fd32224d080851f7b012a645e7ccf93
FileChecksum: SHA1: 9d151e013d56ae3168718e6851b7aa96259d49f0
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: SPDX-FileCopyrightText: 2026 林博仁(Buo-ren Lin)
FileName: ./.github/workflows/check-potential-problems.yml
SPDXID: SPDXRef-a2aa65ddac52a0f4ad63030b7ea92328
FileChecksum: SHA1: 08a5e2a52176b1c6520cb16c3c8dcb6ae3cb530d
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./.github/workflows/release.yml
SPDXID: SPDXRef-be8f05ee6a431aa1f8f363d83f31b18a
FileChecksum: SHA1: 56df8a84589740641c0840a92232f9078bf5f473
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./.gitignore
SPDXID: SPDXRef-8bf08b10a7fc5feb8468b66211b170d4
FileChecksum: SHA1: 9abb1a3f3188d6f8f372d75a00e813fbdc02a3be
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2022 林博仁(Buo-ren, Lin)
FileName: ./.gitlab-ci.yml
SPDXID: SPDXRef-ae39448ad4229f8f72e4d91136911b90
FileChecksum: SHA1: f81152c4d1b2f53c77688939549215c9ee5cbbfe
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./.gitmodules
SPDXID: SPDXRef-5d587f529e52bef6e824a8787cfa5908
FileChecksum: SHA1: 43e8a5b69882358dd2e499f9ea9c2e2d066b5c2e
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./.markdownlint.yml
SPDXID: SPDXRef-a0d14ed64c1ab935a52f1b5a0bcf7f3a
FileChecksum: SHA1: 22c9ea3e198ec2556d2157d9a49b3f21ee33d71b
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./.pre-commit-config.yaml
SPDXID: SPDXRef-c83df801fb369d2069dc4a947aeca814
FileChecksum: SHA1: db6397097023fe6a16aa5e59754f5c51fa3491fc
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./.shellcheckrc
SPDXID: SPDXRef-1caf0f063cabaaf283696ac1c76a590c
FileChecksum: SHA1: 1a0742d66206611670ccf702f9886b54e4f39dfd
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: Copyright 2025 林博仁(Buo-ren Lin)
FileName: ./.yamllint
SPDXID: SPDXRef-5154e5261ee990ce68698f7950b0c98a
FileChecksum: SHA1: 1e3b97f7ced33a56a979db4f0768416c21c27e12
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2021 林博仁(Buo-ren, Lin)
FileName: ./AGENTS.md
SPDXID: SPDXRef-2dc24d435530b511fda5ff52b78e61d7
FileChecksum: SHA1: 6bbd34cc3a50253d0be4eb76c7cf1c395e6ac5c0
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: SPDX-FileCopyrightText: 2026 林博仁(Buo-ren Lin)
FileName: ./README.md
SPDXID: SPDXRef-40fe01f10e3dd07497c2faaad3e77456
FileChecksum: SHA1: 2ce5cd3750454d913e431afbabe2c3e29173d8bd
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: SPDX-FileCopyrightText: 2026 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/create-gitlab-release.sh
SPDXID: SPDXRef-8effc75368a2206eec88283da89ce38a
FileChecksum: SHA1: 992317a1a170596314d4b7dc00b4386eaa5dc113
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/do-static-analysis.install-system-deps.sh
SPDXID: SPDXRef-a897454f056f992c091e44fdc30e2c13
FileChecksum: SHA1: a3616f24dfd523456000580962b2ee10cb8ac9c3
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/do-static-analysis.sh
SPDXID: SPDXRef-9cce95baa99480013a87b78a44a07cc5
FileChecksum: SHA1: be18c87c2eec1c3a689be3b8f054ce6f94b6b55f
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2025 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/generate-build-artifacts.install-system-deps.sh
SPDXID: SPDXRef-8fc2b4363913a7d8200eaf5c1bb927ad
FileChecksum: SHA1: d3fc826400922ca00e2b36eb4c46c032619f53b2
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/generate-build-artifacts.sh
SPDXID: SPDXRef-b66fb6054c752ac4488be1e24cad7972
FileChecksum: SHA1: ca5ca9f8cce074adbc88c67e333dcc37837d3a35
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2025 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/generate-release-description.sh
SPDXID: SPDXRef-cd90371a9118b8210686491134d0a0df
FileChecksum: SHA1: 040b023f72902c7a94fab4e5544c862a900ce920
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/patch-github-actions-sudo-security-policy.sh
SPDXID: SPDXRef-b127233efc892f45688cbc6abd900b09
FileChecksum: SHA1: 4ceed8f400a54eea2ac98bdbe8e17d3a04ccaa1c
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/sudoers.d/90_allow_github_actions_default_envvars.sudoers
SPDXID: SPDXRef-986871ede40c8907a3532fab5c48f9a4
FileChecksum: SHA1: ab8894fa020fceefab2cd598a796e9ffd6c32302
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/sudoers.d/README.md
SPDXID: SPDXRef-a4093ef69cb5369c9afb09bbb812ea33
FileChecksum: SHA1: bd347f52a5b7d9aa9c592e8f4bbd0d0503717358
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: SPDX-FileCopyrightText: 2026 林博仁(Buo-ren Lin)
FileName: ./continuous-integration/upload-gitlab-generic-packages.sh
SPDXID: SPDXRef-7388e1de496e8155498f0658aca2fa1e
FileChecksum: SHA1: 4c2ca71fa0a1c9afb646fc432828cf360a11cd5e
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2024 林博仁(Buo-ren Lin)
FileName: ./dev-assets/README.md
SPDXID: SPDXRef-b7f7b86ae8842404047c8143e1841adf
FileChecksum: SHA1: ef30dd0668d95e48db6f7aefeb16b60582df6ee6
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: SPDX-FileCopyrightText: 2026 林博仁(Buo-ren Lin)
FileName: ./dev-assets/deploy-development-environment.sh
SPDXID: SPDXRef-0f23cb8196758ad5e1faf77b137d47ca
FileChecksum: SHA1: 70095e0ac39a4406275bb43998629874242474d6
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./functions.sh
SPDXID: SPDXRef-a2c3410e93a1e3a15cd0bb550b46358d
FileChecksum: SHA1: e7b4638a8e657bf8e54e1b1e45a2c8a4892f9243
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: Copyright 2025 林博仁(Buo-ren Lin)
FileName: ./project-initializer.example.toml
SPDXID: SPDXRef-be3a0b06c9645181945c188616b75d1f
FileChecksum: SHA1: 3cc19dcd7fa5bc5fba7fa08909c1507e48b72987
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./pyproject.toml
SPDXID: SPDXRef-9bfdf4ff5d4bf45cc5877a57c54f2d76
FileChecksum: SHA1: 079cf959e9d26ee91512a90fc6254ae7b7fd6bfa
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./specs.md
SPDXID: SPDXRef-c25101c081ae60f915f745f36604eece
FileChecksum: SHA1: a4cb1f91dd23d115a8bf7bb137d6ce5437a5b554
LicenseConcluded: NOASSERTION
LicenseInfoInFile: CC-BY-SA-4.0+
FileCopyrightText: SPDX-FileCopyrightText: 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/__init__.py
SPDXID: SPDXRef-b78d309c37ee0a117c5a3538c08754b5
FileChecksum: SHA1: 07afb26ae6e8fe0aece229ea8b412fa6d7e56b6a
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/automation.py
SPDXID: SPDXRef-095272a217d90187a6e6c047249ac5af
FileChecksum: SHA1: 37cc871307cb55de3f21221aea156b87896e36fe
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/cli.py
SPDXID: SPDXRef-dc90f753213afb94c0e30a7075d855c7
FileChecksum: SHA1: c7f4482a6b1d7281b8391a600b7c7fc1298abfc7
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/config.py
SPDXID: SPDXRef-a6ad6254064dd0cd6461c0b29972d966
FileChecksum: SHA1: b88c9395e443aa134192c8b4be3ae271b0520c7b
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/github_api.py
SPDXID: SPDXRef-f2fd4a294cfbf2518b6670b7166c8e60
FileChecksum: SHA1: 247683969422d09e78f954c361c500f66f5f2404
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/gitlab_api.py
SPDXID: SPDXRef-a0eca3597d576d945aa19a924c3569af
FileChecksum: SHA1: 5aa78b50aac8d64d89a9febe2c7de43cc8e982bb
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/telegram_api.py
SPDXID: SPDXRef-959408e6c0e51d1202cbba87e446216f
FileChecksum: SHA1: 29f73f87862dd6242faa249ddc4f037f8bcae779
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./src/project_initializer/validation.py
SPDXID: SPDXRef-07d7206c26c2d69efd1abbbb3edc2a04
FileChecksum: SHA1: 36682d84c612f70fa598e5038365f2d6e66d57fd
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_automation.py
SPDXID: SPDXRef-19c0a4b9ff8ca6518c273023ebf6d629
FileChecksum: SHA1: 720d81c9b01915f5b2d37fd659b5af0b7435cae6
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_cli.py
SPDXID: SPDXRef-26a67271a5b22c614469882a56abfce5
FileChecksum: SHA1: a6b32ee2a7c12acac3667c8f97bdaed798e77914
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_config.py
SPDXID: SPDXRef-70cecfb4a62db53b0ec811b44301f3f2
FileChecksum: SHA1: 88c716c96415bede6d023af89180c038a2e3c965
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_github_api.py
SPDXID: SPDXRef-77b8d435ac0aabecf98f05cf835c6464
FileChecksum: SHA1: e1ca5da5af95d9d6f469774cc3daac68123fe591
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_gitlab_api.py
SPDXID: SPDXRef-6b3ea9c1f704ca62da93335c57a196e3
FileChecksum: SHA1: 4fcf40836cc8b171942949d8d840adc04ae9390f
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_telegram_api.py
SPDXID: SPDXRef-005ef2afab74f11923b56f979213d1b5
FileChecksum: SHA1: f2587e4fa6ae311f78591918f7d44f2b9bc0d7cb
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)
FileName: ./tests/test_validation.py
SPDXID: SPDXRef-c51e4f7c958e3a523ccda498197ebb0c
FileChecksum: SHA1: 7dfa4770914bcb66d156fe202f4f6b31cc61eccb
LicenseConcluded: NOASSERTION
LicenseInfoInFile: AGPL-3.0-or-later
FileCopyrightText: Copyright 2026 林博仁(Buo-ren Lin)