{"id":15011008,"url":"https://github.com/pimalaya/mml","last_synced_at":"2026-06-07T22:01:11.474Z","repository":{"id":190148549,"uuid":"682041766","full_name":"pimalaya/mml","owner":"pimalaya","description":"CLI and lib for the Emacs MIME message Meta Language (MML), written in Rust","archived":false,"fork":false,"pushed_at":"2026-05-31T08:32:30.000Z","size":255,"stargazers_count":7,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-31T10:11:39.751Z","etag":null,"topics":["clap","cli","compile","emacs","interpret","lib","message","mime","mml","rfc2045","rust"],"latest_commit_sha":null,"homepage":"https://docs.rs/mime-meta-language/latest/mml","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pimalaya.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"soywod","ko_fi":"soywod","buy_me_a_coffee":"soywod","liberapay":"soywod","thanks_dev":"soywod","custom":"https://www.paypal.com/paypalme/soywod"}},"created_at":"2023-08-23T10:06:24.000Z","updated_at":"2026-05-31T08:32:33.000Z","dependencies_parsed_at":"2024-08-29T09:14:28.712Z","dependency_job_id":"092123f1-3475-46d0-b056-9b76abea15e6","html_url":"https://github.com/pimalaya/mml","commit_stats":{"total_commits":25,"total_committers":2,"mean_commits":12.5,"dds":0.07999999999999996,"last_synced_commit":"5e86e2502af0f4b90944478fef2e13e05df820c5"},"previous_names":["soywod/mml","pimalaya/mml"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/pimalaya/mml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fmml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fmml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fmml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fmml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pimalaya","download_url":"https://codeload.github.com/pimalaya/mml/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pimalaya%2Fmml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34039495,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clap","cli","compile","emacs","interpret","lib","message","mime","mml","rfc2045","rust"],"created_at":"2024-09-24T19:38:23.868Z","updated_at":"2026-06-07T22:01:11.468Z","avatar_url":"https://github.com/pimalaya.png","language":"Rust","funding_links":["https://github.com/sponsors/soywod","https://ko-fi.com/soywod","https://buymeacoffee.com/soywod","https://liberapay.com/soywod","https://thanks.dev/soywod","https://www.paypal.com/paypalme/soywod","https://www.buymeacoffee.com/soywod","https://img.shields.io/badge/-thanks.dev-000000?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQuMDk3IiBoZWlnaHQ9IjE3LjU5NyIgY2xhc3M9InctMzYgbWwtMiBsZzpteC0wIHByaW50Om14LTAgcHJpbnQ6aW52ZXJ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05Ljc4MyAxNy41OTdINy4zOThjLTEuMTY4IDAtMi4wOTItLjI5Ny0yLjc3My0uODktLjY4LS41OTMtMS4wMi0xLjQ2Mi0xLjAyLTIuNjA2di0xLjM0NmMwLTEuMDE4LS4yMjctMS43NS0uNjc4LTIuMTk1LS40NTItLjQ0Ni0xLjIzMi0uNjY5LTIuMzQtLjY2OUgwVjcuNzA1aC41ODdjMS4xMDggMCAxLjg4OC0uMjIyIDIuMzQtLjY2OC40NTEtLjQ0Ni42NzctMS4xNzcuNjc3LTIuMTk1VjMuNDk2YzAtMS4xNDQuMzQtMi4wMTMgMS4wMjEtMi42MDZDNS4zMDUuMjk3IDYuMjMgMCA3LjM5OCAwaDIuMzg1djEuOTg3aC0uOTg1Yy0uMzYxIDAtLjY4OC4wMjctLjk4LjA4MmExLjcxOSAxLjcxOSAwIDAgMC0uNzM2LjMwN2MtLjIwNS4xNTYtLjM1OC4zODQtLjQ2LjY4Mi0uMTAzLjI5OC0uMTU0LjY4Mi0uMTU0IDEuMTUxVjUuMjNjMCAuODY3LS4yNDkgMS41ODYtLjc0NSAyLjE1NS0uNDk3LjU2OS0xLjE1OCAxLjAwNC0xLjk4MyAxLjMwNXYuMjE3Yy44MjUuMyAxLjQ4Ni43MzYgMS45ODMgMS4zMDUuNDk2LjU3Ljc0NSAxLjI4Ny43NDUgMi4xNTR2MS4wMjFjMCAuNDcuMDUxLjg1NC4xNTMgMS4xNTIuMTAzLjI5OC4yNTYuNTI1LjQ2MS42ODIuMTkzLjE1Ny40MzcuMjYuNzMyLjMxMi4yOTUuMDUuNjIzLjA3Ni45ODQuMDc2aC45ODVabTE0LjMxNC03LjcwNmgtLjU4OGMtMS4xMDggMC0xLjg4OC4yMjMtMi4zNC42NjktLjQ1LjQ0NS0uNjc3IDEuMTc3LS42NzcgMi4xOTVWMTQuMWMwIDEuMTQ0LS4zNCAyLjAxMy0xLjAyIDIuNjA2LS42OC41OTMtMS42MDUuODktMi43NzQuODloLTIuMzg0di0xLjk4OGguOTg0Yy4zNjIgMCAuNjg4LS4wMjcuOTgtLjA4LjI5Mi0uMDU1LjUzOC0uMTU3LjczNy0uMzA4LjIwNC0uMTU3LjM1OC0uMzg0LjQ2LS42ODIuMTAzLS4yOTguMTU0LS42ODIuMTU0LTEuMTUydi0xLjAyYzAtLjg2OC4yNDgtMS41ODYuNzQ1LTIuMTU1LjQ5Ny0uNTcgMS4xNTgtMS4wMDQgMS45ODMtMS4zMDV2LS4yMTdjLS44MjUtLjMwMS0xLjQ4Ni0uNzM2LTEuOTgzLTEuMzA1LS40OTctLjU3LS43NDUtMS4yODgtLjc0NS0yLjE1NXYtMS4wMmMwLS40Ny0uMDUxLS44NTQtLjE1NC0xLjE1Mi0uMTAyLS4yOTgtLjI1Ni0uNTI2LS40Ni0uNjgyYTEuNzE5IDEuNzE5IDAgMCAwLS43MzctLjMwNyA1LjM5NSA1LjM5NSAwIDAgMC0uOTgtLjA4MmgtLjk4NFYwaDIuMzg0YzEuMTY5IDAgMi4wOTMuMjk3IDIuNzc0Ljg5LjY4LjU5MyAxLjAyIDEuNDYyIDEuMDIgMi42MDZ2MS4zNDZjMCAxLjAxOC4yMjYgMS43NS42NzggMi4xOTUuNDUxLjQ0NiAxLjIzMS42NjggMi4zNC42NjhoLjU4N3oiIGZpbGw9IiNmZmYiLz48L3N2Zz4="],"categories":[],"sub_categories":[],"readme":"# MML [![Documentation](https://img.shields.io/docsrs/mime-meta-language?style=flat\u0026logo=docs.rs\u0026logoColor=white)](https://docs.rs/mime-meta-language/latest/mml) [![Matrix](https://img.shields.io/badge/chat-%23pimalaya-blue?style=flat\u0026logo=matrix\u0026logoColor=white)](https://matrix.to/#/#pimalaya:matrix.org) [![Mastodon](https://img.shields.io/badge/news-%40pimalaya-blue?style=flat\u0026logo=mastodon\u0026logoColor=white)](https://fosstodon.org/@pimalaya)\n\nCLI and lib for the Emacs MIME message Meta Language ([MML](https://www.gnu.org/software/emacs/manual/html_node/emacs-mime/MML-Definition.html)), written in Rust.\n\nThis repository ships two layers:\n\n- Low-level **library** exposing two pipelines (MML→MIME compiler, MIME→MML interpreter) and a template builder for compose/reply/forward drafts.\n- High-level **CLI** wrapping the library, plus editor-driven `compose` / `reply` / `forward` commands bundling \"template → `$EDITOR` → compile → validate/re-edit/view/abort\", and `interpret` (aliased `read`) for the inverse MIME→MML flow.\n\n## Table of contents\n\n- [Features](#features)\n- [Installation](#installation)\n  - [Pre-built binary](#pre-built-binary)\n  - [Cargo](#cargo)\n  - [Nix](#nix)\n  - [Sources](#sources)\n- [Configuration](#configuration)\n- [Usage](#usage)\n  - [Library](#library)\n  - [CLI](#cli)\n- [FAQ](#faq)\n- [License](#license)\n- [AI disclosure](#ai-disclosure)\n- [Social](#social)\n- [Sponsoring](#sponsoring)\n\n## Features\n\n- **MML → MIME compilation** (requires `compiler` feature):\n  - `\u003c#part\u003e` / `\u003c#multipart\u003e` directives with `type`, `filename`, `disposition`, `encoding`, `description`, `name`, `recipient-filename`, dates, etc.\n  - Inline parts, attached parts, nested multiparts (`alternative`, `mixed`, `related`)\n  - File-path expansion via [`shellexpand`](https://crates.io/crates/shellexpand)\n  - MIME-type detection via [`tree_magic_mini`](https://crates.io/crates/tree_magic_mini)\n  - Parse-error reporting via [`ariadne`](https://crates.io/crates/ariadne) (CLI)\n- **MIME → MML interpretation** (requires `interpreter` feature):\n  - Header include / exclude filters\n  - Part include / exclude filters\n  - HTML → text rendering via [`nanohtml2text`](https://crates.io/crates/nanohtml2text)\n  - Attachment save-to-disk\n  - `mml interpret` (aliased `mml read`): MIME on stdin, MML/text on stdout\n- **Editor-driven flow** (requires `cli` + `compiler` + `interpreter`):\n  - `mml compose` / `mml reply` / `mml forward`: open `$EDITOR`, compile on save, prompt to validate / re-edit / view / abort\n- **TOML configuration** with per-account identities and per-section defaults (`[compose]`, `[reply]`, `[forward]`, `[read]`)\n\n\u003e [!TIP]\n\u003e MML is written in [Rust](https://www.rust-lang.org/) and uses [cargo features](https://doc.rust-lang.org/cargo/reference/features.html) to gate functionality. The default feature set is declared in [Cargo.toml](./Cargo.toml).\n\n## Installation\n\n### Pre-built binary\n\nThe CLI binary `mml` can be installed from the latest [GitHub release](https://github.com/pimalaya/mml/releases) using the install script:\n\n*As root:*\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/pimalaya/mml/master/install.sh | sudo sh\n```\n\n*As a regular user:*\n\n```sh\ncurl -sSL https://raw.githubusercontent.com/pimalaya/mml/master/install.sh | PREFIX=~/.local sh\n```\n\nFor a more up-to-date version, check out the [pre-releases](https://github.com/pimalaya/mml/actions/workflows/pre-releases.yml) GitHub workflow: pick the latest run and grab the artifact matching your OS. These are built from the `master` branch.\n\n\u003e [!NOTE]\n\u003e Pre-built binaries are built with the default cargo features. If you need a different feature set, use another installation method.\n\n### Cargo\n\n```sh\ncargo install mime-meta-language --locked --features cli\n```\n\nYou can also use the git repository for a more up-to-date (but less stable) version:\n\n```sh\ncargo install --locked --git https://github.com/pimalaya/mml.git\n```\n\nTo use `mml` as a library, add it to your `Cargo.toml`:\n\n```toml\n[dependencies]\nmime-meta-language = { version = \"1.1\", default-features = false, features = [\"compiler\", \"interpreter\"] }\n```\n\nDrop `cli` (and pick only `compiler` and/or `interpreter`) for a slim library build with no clap, no ariadne, no editor integration.\n\n### Nix\n\nIf you have the [Flakes](https://nixos.wiki/wiki/Flakes) feature enabled:\n\n```sh\nnix profile install github:pimalaya/mml\n```\n\nOr run without installing:\n\n```sh\nnix run github:pimalaya/mml -- compile \u003c\u003c\u003c'\u003c#part\u003eHello, world!\u003c#/part\u003e'\n```\n\n### Sources\n\n```sh\ngit clone https://github.com/pimalaya/mml\ncd mml\nnix run\n```\n\n## Configuration\n\nA sample [config.sample.toml](./config.sample.toml) is shipped at the repository root. Drop it into one of:\n\n- `$XDG_CONFIG_HOME/mml/config.toml`\n- `$HOME/.config/mml/config.toml`\n- `$HOME/.mmlrc`\n\nOverride the path with `-c \u003cPATH\u003e` or `MML_CONFIG=\u003cPATH\u003e`.\n\nCLI flags always win; config values fill in the blanks. Pick an account with `-a \u003cNAME\u003e`, or flag one entry `default = true`.\n\n## Usage\n\n### Library\n\nCompile MML to MIME:\n\n```rust,ignore\nuse mml::compiler::message::MmlCompilerBuilder;\n\nlet mml = \"\u003c#part\u003eHello, world!\u003c#/part\u003e\";\nlet mime = MmlCompilerBuilder::new()\n    .build(mml)?\n    .compile()?\n    .into_string()?;\n\nprintln!(\"{mime}\");\n```\n\nInterpret MIME back to MML:\n\n```rust,ignore\nuse mml::interpreter::message::MimeInterpreterBuilder;\n\nlet mime = b\"From: a@b\\r\\nTo: c@d\\r\\nSubject: Hi\\r\\n\\r\\nHello!\\r\\n\";\nlet mml = MimeInterpreterBuilder::new()\n    .with_show_only_headers([\"From\", \"To\", \"Subject\"])\n    .build()\n    .from_bytes(mime)?;\n\nprintln!(\"{mml}\");\n```\n\n### CLI\n\nCompile MML on stdin, emit MIME on stdout:\n\n```sh\nmml compile \u003c\u003c\u003c '\u003c#part\u003eHello, world!\u003c#/part\u003e'\n```\n\nInterpret MIME back to MML/text:\n\n```sh\nmml interpret \u003c message.eml\n```\n\nOpen the editor on a fresh compose draft, then emit the compiled MIME message on stdout, or to a file when a path is given:\n\n```sh\nmml compose --from me@example.org\nmml compose --from me@example.org /tmp/draft.eml\n```\n\nReply / forward read the source MIME on stdin (or from a path after `--`) and route the result the same way; the leading positional is the optional output path:\n\n```sh\ncat message.eml | mml reply --all\ncat message.eml | mml forward /tmp/draft.eml\nmml reply --all /tmp/draft.eml -- /tmp/source.eml\n```\n\nPipelines into himalaya v2:\n\n```sh\nmml compose --from me@example.org /tmp/draft.eml \u0026\u0026 himalaya messages send /tmp/draft.eml\nmml compose --from me@example.org \u003e(himalaya messages send)\nhimalaya messages read 42 | mml reply \u003e(himalaya messages send)\n```\n\nThe path-arg or process-substitution forms keep mml's stdout connected to the terminal, so the editor mml spawns sees a real tty. The bare-pipe form `mml compose | himalaya messages send` hangs the editor because mml's stdout (and therefore the editor's inherited stdout) is the pipe to himalaya.\n\nRead (MIME → text), useful for piping through `less` or chaining with himalaya:\n\n```sh\ncat message.eml | mml read --exclude-header Received,DKIM-Signature\n```\n\nGenerate a draft template without opening the editor:\n\n```sh\nmml template compose --from me@example.org\nmml template reply --all \u003c message.eml\nmml template forward \u003c message.eml\n```\n\nPlug `mml` into [himalaya](https://github.com/pimalaya/himalaya) v2 by wiring shell pipelines or aliases against the `messages send` / `messages add` / `messages read` primitives. A typical `.bashrc` snippet:\n\n```sh\nhsend() { local f=$(mktemp --suffix=.eml); mml compose \"$f\" \u0026\u0026 himalaya messages send \"$f\"; rm -f \"$f\"; }\nhreply() { himalaya messages read \"$1\" | mml reply \u003e(himalaya messages send); }\n```\n\n## FAQ\n\n\u003cdetails\u003e\n  \u003csummary\u003eHow to debug the CLI?\u003c/summary\u003e\n\n  Use `--log \u003clevel\u003e` where `\u003clevel\u003e` is one of `off`, `error`, `warn`, `info`, `debug`, `trace`:\n\n  ```sh\n  mml --log trace compile \u003c message.mml\n  ```\n\n  The `RUST_LOG` environment variable, when set, overrides `--log` and supports per-target filters (see the [env_logger](https://docs.rs/env_logger/latest/env_logger/#enabling-logging) documentation). `RUST_BACKTRACE=1` enables full error backtraces, including source lines where the error originated from.\n\n  Logs are written to `stderr`, so they can be redirected easily to a file:\n\n  ```sh\n  mml --log trace compile \u003c message.mml 2\u003e/tmp/mml.log\n  ```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eHow does `mml compose` pick the editor?\u003c/summary\u003e\n\n  The [edit](https://crates.io/crates/edit) crate resolves `$VISUAL` first, then `$EDITOR`, then an OS default. `mml` does not expose a config knob on top: set `VISUAL` / `EDITOR` in your shell rc file.\n\u003c/details\u003e\n\n## License\n\nThis project is licensed under either of:\n\n- [MIT license](LICENSE-MIT)\n- [Apache License, Version 2.0](LICENSE-APACHE)\n\nat your option.\n\n## AI disclosure\n\nThis project is developed with AI assistance. This section documents how, so users and downstream packagers can make informed decisions.\n\n- **Tools**: Claude Code (Anthropic), Opus 4.7, invoked locally with a persistent project-scoped memory and a small set of repo-specific rules.\n\n- **Used for**: Refactors, mechanical multi-file edits, boilerplate (feature gates, error enums, derive macros, trait impls), test scaffolding, doc polish, exploratory design conversations.\n\n- **Not used for**: Engineering, critical code, git manipulation (commit, merge, rebase…), real-world tests.\n\n- **Verification**: Every AI-assisted change is read, compiled, tested, and formatted before commit (`nix develop --command cargo check / cargo test / cargo fmt`). Behavioural correctness is verified against the relevant RFC or upstream spec, not assumed from the model output. Tests are never adjusted to fit AI-generated code; the code is adjusted to fit correct behaviour.\n\n- **Limitations**: AI models occasionally produce code that compiles and passes tests but is subtly wrong: off-by-one errors, missed edge cases, plausible but nonexistent APIs, stale RFC references. The verification workflow catches most of this; it does not catch all of it. Bug reports are welcome and taken seriously.\n\n- **Last reviewed**: 31/05/2026\n\n## Social\n\n- Chat on [Matrix](https://matrix.to/#/#pimalaya:matrix.org)\n- News on [Mastodon](https://fosstodon.org/@pimalaya) or [RSS](https://fosstodon.org/@pimalaya.rss)\n- Mail at [pimalaya.org@posteo.net](mailto:pimalaya.org@posteo.net)\n\n## Sponsoring\n\n[![nlnet](https://nlnet.nl/logo/banner-160x60.png)](https://nlnet.nl/)\n\nSpecial thanks to the [NLnet foundation](https://nlnet.nl/) and the [European Commission](https://www.ngi.eu/) that have been financially supporting the project for years:\n\n- 2022 → 2023: [NGI Assure](https://nlnet.nl/project/Himalaya/)\n- 2023 → 2024: [NGI Zero Entrust](https://nlnet.nl/project/Pimalaya/)\n- 2024 → 2026: [NGI Zero Core](https://nlnet.nl/project/Pimalaya-PIM/)\n- *2027 in preparation…*\n\nIf you appreciate the project, feel free to donate using one of the following providers:\n\n[![GitHub](https://img.shields.io/badge/-GitHub%20Sponsors-fafbfc?logo=GitHub%20Sponsors)](https://github.com/sponsors/soywod)\n[![Ko-fi](https://img.shields.io/badge/-Ko--fi-ff5e5a?logo=Ko-fi\u0026logoColor=ffffff)](https://ko-fi.com/soywod)\n[![Buy Me a Coffee](https://img.shields.io/badge/-Buy%20Me%20a%20Coffee-ffdd00?logo=Buy%20Me%20A%20Coffee\u0026logoColor=000000)](https://www.buymeacoffee.com/soywod)\n[![Liberapay](https://img.shields.io/badge/-Liberapay-f6c915?logo=Liberapay\u0026logoColor=222222)](https://liberapay.com/soywod)\n[![thanks.dev](https://img.shields.io/badge/-thanks.dev-000000?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQuMDk3IiBoZWlnaHQ9IjE3LjU5NyIgY2xhc3M9InctMzYgbWwtMiBsZzpteC0wIHByaW50Om14LTAgcHJpbnQ6aW52ZXJ0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik05Ljc4MyAxNy41OTdINy4zOThjLTEuMTY4IDAtMi4wOTItLjI5Ny0yLjc3My0uODktLjY4LS41OTMtMS4wMi0xLjQ2Mi0xLjAyLTIuNjA2di0xLjM0NmMwLTEuMDE4LS4yMjctMS43NS0uNjc4LTIuMTk1LS40NTItLjQ0Ni0xLjIzMi0uNjY5LTIuMzQtLjY2OUgwVjcuNzA1aC41ODdjMS4xMDggMCAxLjg4OC0uMjIyIDIuMzQtLjY2OC40NTEtLjQ0Ni42NzctMS4xNzcuNjc3LTIuMTk1VjMuNDk2YzAtMS4xNDQuMzQtMi4wMTMgMS4wMjEtMi42MDZDNS4zMDUuMjk3IDYuMjMgMCA3LjM5OCAwaDIuMzg1djEuOTg3aC0uOTg1Yy0uMzYxIDAtLjY4OC4wMjctLjk4LjA4MmExLjcxOSAxLjcxOSAwIDAgMC0uNzM2LjMwN2MtLjIwNS4xNTYtLjM1OC4zODQtLjQ2LjY4Mi0uMTAzLjI5OC0uMTU0LjY4Mi0uMTU0IDEuMTUxVjUuMjNjMCAuODY3LS4yNDkgMS41ODYtLjc0NSAyLjE1NS0uNDk3LjU2OS0xLjE1OCAxLjAwNC0xLjk4MyAxLjMwNXYuMjE3Yy44MjUuMyAxLjQ4Ni43MzYgMS45ODMgMS4zMDUuNDk2LjU3Ljc0NSAxLjI4Ny43NDUgMi4xNTR2MS4wMjFjMCAuNDcuMDUxLjg1NC4xNTMgMS4xNTIuMTAzLjI5OC4yNTYuNTI1LjQ2MS42ODIuMTkzLjE1Ny40MzcuMjYuNzMyLjMxMi4yOTUuMDUuNjIzLjA3Ni45ODQuMDc2aC45ODVabTE0LjMxNC03LjcwNmgtLjU4OGMtMS4xMDggMC0xLjg4OC4yMjMtMi4zNC42NjktLjQ1LjQ0NS0uNjc3IDEuMTc3LS42NzcgMi4xOTVWMTQuMWMwIDEuMTQ0LS4zNCAyLjAxMy0xLjAyIDIuNjA2LS42OC41OTMtMS42MDUuODktMi43NzQuODloLTIuMzg0di0xLjk4OGguOTg0Yy4zNjIgMCAuNjg4LS4wMjcuOTgtLjA4LjI5Mi0uMDU1LjUzOC0uMTU3LjczNy0uMzA4LjIwNC0uMTU3LjM1OC0uMzg0LjQ2LS42ODIuMTAzLS4yOTguMTU0LS42ODIuMTU0LTEuMTUydi0xLjAyYzAtLjg2OC4yNDgtMS41ODYuNzQ1LTIuMTU1LjQ5Ny0uNTcgMS4xNTgtMS4wMDQgMS45ODMtMS4zMDV2LS4yMTdjLS44MjUtLjMwMS0xLjQ4Ni0uNzM2LTEuOTgzLTEuMzA1LS40OTctLjU3LS43NDUtMS4yODgtLjc0NS0yLjE1NXYtMS4wMmMwLS40Ny0uMDUxLS44NTQtLjE1NC0xLjE1Mi0uMTAyLS4yOTgtLjI1Ni0uNTI2LS40Ni0uNjgyYTEuNzE5IDEuNzE5IDAgMCAwLS43MzctLjMwNyA1LjM5NSA1LjM5NSAwIDAgMC0uOTgtLjA4MmgtLjk4NFYwaDIuMzg0YzEuMTY5IDAgMi4wOTMuMjk3IDIuNzc0Ljg5LjY4LjU5MyAxLjAyIDEuNDYyIDEuMDIgMi42MDZ2MS4zNDZjMCAxLjAxOC4yMjYgMS43NS42NzggMi4xOTUuNDUxLjQ0NiAxLjIzMS42NjggMi4zNC42NjhoLjU4N3oiIGZpbGw9IiNmZmYiLz48L3N2Zz4=)](https://thanks.dev/soywod)\n[![PayPal](https://img.shields.io/badge/-PayPal-0079c1?logo=PayPal\u0026logoColor=ffffff)](https://www.paypal.com/paypalme/soywod)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpimalaya%2Fmml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpimalaya%2Fmml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpimalaya%2Fmml/lists"}