An Open-source book with Modern CUDA learning Notes for Beginners - BF16/FP8/FP4, HGEMM, CuTe, Flash-Attention, etc.
This report summarizes scanner evidence for xlite-dev/LeetCUDA, a Cuda project with 12,056 GitHub stars. SynthScan examined 51,566 lines of code across 368 source files, recording 162 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 6.0 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 93 finding(s).
Are imports declared and package/API names verified? 29 finding(s).
Are wrappers, guards, and repeated structures necessary? 57 finding(s).
Which changes need focused human review? 162 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 162 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 48 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 55 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 56 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 60 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 69 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 78 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 87 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 96 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 48 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 55 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 56 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 60 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 69 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 78 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 87 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 96 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 48 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 55 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 56 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 60 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 69 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 78 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 87 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | kernels/swizzle/print_swizzle_layout.py | 96 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | kernels/openai-triton/vector-add/triton_vector_add.py | 21 | # -------------- | COMMENT |
| MEDIUM | kernels/cutlass/cute_dsl/sgemm/pipelining.py | 63 | # ========================================================================== | COMMENT |
| MEDIUM | kernels/cutlass/cute_dsl/sgemm/pipelining.py | 65 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | kernels/cutlass/cute_dsl/sgemm/pipelining.py | 118 | # ====================================================================== | COMMENT |
| MEDIUM | kernels/cutlass/cute_dsl/sgemm/pipelining.py | 173 | # =================================================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/hgemm/hgemm.py | 362 | CODE | |
| LOW | kernels/hgemm/tools/print_swizzle_layout.py | 40 | CODE | |
| LOW | kernels/flash-attn/flash_attn_mma.py | 286 | CODE | |
| LOW | kernels/flash-attn/tools/print_swizzle_layout.py | 40 | CODE | |
| LOW | …view/book/figures/drawio/fig-23-2-tma-copy-flow/gen.py | 46 | CODE | |
| LOW | kernels/interview/book/scripts/check_overlap.py | 9 | CODE | |
| LOW | kernels/swizzle/print_swizzle_layout.py | 40 | CODE | |
| LOW | kernels/cutlass/cute_dsl/sgemm/pipelining.py | 17 | CODE | |
| LOW | …hers/pytorch/distributed/test_all_to_all_single_ray.py | 49 | CODE | |
| LOW | others/pytorch/distributed/test_all_to_all_single.py | 16 | CODE | |
| LOW | docs/readthedocs/tools/code_dict.py | 103 | CODE | |
| LOW | docs/readthedocs/tools/visual_check.py | 194 | CODE | |
| LOW | docs/readthedocs/convert/labels.py | 245 | CODE | |
| LOW | docs/readthedocs/convert/figtext.py | 131 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 755 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 944 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 1202 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 1333 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 1394 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 1439 | CODE | |
| LOW | docs/readthedocs/convert/postprocess.py | 857 | CODE | |
| LOW | docs/readthedocs/convert/postprocess.py | 1201 | CODE | |
| LOW | docs/readthedocs/convert/postprocess.py | 1275 | CODE | |
| LOW | docs/readthedocs/convert/postprocess.py | 399 | CODE | |
| LOW | docs/readthedocs/convert/postprocess.py | 430 | CODE | |
| LOW | docs/readthedocs/convert/texutil.py | 35 | CODE | |
| LOW | docs/readthedocs/convert/texutil.py | 64 | CODE | |
| LOW | docs/readthedocs/convert/texutil.py | 186 | CODE | |
| LOW | docs/readthedocs/convert/texutil.py | 289 | CODE | |
| LOW | docs/readthedocs/convert/texutil.py | 370 | CODE | |
| LOW | docs/readthedocs/convert/verify.py | 440 | CODE | |
| LOW | docs/readthedocs/convert/verify.py | 483 | CODE | |
| LOW | docs/readthedocs/convert/verify.py | 659 | CODE | |
| LOW | docs/readthedocs/convert/tikz2svg.py | 184 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/readthedocs/tools/visual_check.py | 13 | 依赖(可选,不进站点构建):``pip install playwright && python -m playwright install | STRING |
| HIGH | docs/readthedocs/tools/visual_check.py | 54 | if (!element.offsetParent && element.tagName !== 'BODY') return true; | CODE |
| HIGH | docs/readthedocs/tools/visual_check.py | 61 | parts.push(child.nodeValue); | CODE |
| HIGH | docs/readthedocs/tools/visual_check.py | 96 | if (!content) return null; | CODE |
| HIGH | docs/readthedocs/tools/visual_check.py | 105 | if (sidebar && content_column) { | CODE |
| HIGH | docs/readthedocs/tools/visual_check.py | 119 | if (rect.width <= column.width + 1 && offCenter(rect)) out.tables_off_center += 1; | CODE |
| HIGH | docs/readthedocs/convert/__main__.py | 5 | cd docs/readthedocs && python -m convert | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/hgemm/bench/prof.py | 1 | import time | COMMENT |
| LOW | kernels/hgemm/bench/prof.py | 81 | # run_benchmark(lib.hgemm_sliced_k_f16, a, b, "f16(sk)", c) | COMMENT |
| LOW | kernels/hgemm/tools/print_swizzle_layout.py | 41 | rows: int = 16, | COMMENT |
| LOW | kernels/hgemm/tools/print_swizzle_layout.py | 61 | # |bank |b 0~3 |b 4~7 |b 0~3 |b 4~7 |b 0~3 |b 4~7 |b 0~3 |b 4~7 | | COMMENT |
| LOW | kernels/hgemm/tools/print_swizzle_layout.py | 81 | # |bank |b 8~11|b12~15|b 8~11|b12~15|b 8~11|b12~15|b 8~11|b12~15| | COMMENT |
| LOW | kernels/hgemm/tools/utils.py | 41 | ) | COMMENT |
| LOW | kernels/flash-attn/tools/print_swizzle_layout.py | 41 | rows: int = 16, | COMMENT |
| LOW | kernels/flash-attn/tools/print_swizzle_layout.py | 61 | # |bank |b 0~3 |b 4~7 |b 0~3 |b 4~7 |b 0~3 |b 4~7 |b 0~3 |b 4~7 | | COMMENT |
| LOW | kernels/flash-attn/tools/print_swizzle_layout.py | 81 | # |bank |b 8~11|b12~15|b 8~11|b12~15|b 8~11|b12~15|b 8~11|b12~15| | COMMENT |
| LOW | kernels/flash-attn/utils/utils.h | 1 | #include <algorithm> | COMMENT |
| LOW | kernels/flash-attn/utils/utils.h | 21 | #define DEVICE_INLINE __device__ inline | COMMENT |
| LOW | kernels/interview/build.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …view/book/references/fulltext/zhuxijiachu-tiled-mma.md | 261 | // (M,N,...) | COMMENT |
| LOW | …interview/book/references/fulltext/reed-simple-gemm.md | 21 | COMMENT | |
| LOW | kernels/interview/book/tests/common_test.h | 1 | #pragma once | COMMENT |
| LOW | …nterview/book/cute-zhihu/sources/zhuxi-02-tiled-mma.md | 261 | auto thr_tensor = make_tensor(static_cast<CTensor&&>(ctensor).data(), this->thrfrg_C(ctensor.layout())); | COMMENT |
| LOW | kernels/swizzle/print_swizzle_layout.py | 41 | rows: int = 16, | COMMENT |
| LOW | kernels/swizzle/print_swizzle_layout.py | 61 | # |bank |b 0~3 |b 4~7 |b 0~3 |b 4~7 |b 0~3 |b 4~7 |b 0~3 |b 4~7 | | COMMENT |
| LOW | kernels/swizzle/print_swizzle_layout.py | 81 | # |bank |b 8~11|b12~15|b 8~11|b12~15|b 8~11|b12~15|b 8~11|b12~15| | COMMENT |
| LOW | kernels/softmax/softmax.py | 61 | out_val = [f"{v:<12}" for v in out_val] | COMMENT |
| LOW | kernels/openai-triton/vector-add/triton_vector_add.py | 41 | # This program will process inputs that are offset from the initial data. | COMMENT |
| LOW | others/tensorrt/fmha/fmha_pattern_match_ops.py | 41 | V = V.permute(0, 2, 1, 3) # [B, S, N, h] -> [B, N, S, h] | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/interview/bench/deprecated/bench_sdpa.py | 11 | CODE | |
| LOW | kernels/interview/bench/deprecated/bench_sdpa.py | 15 | CODE | |
| LOW | docs/readthedocs/conf.py | 6 | CODE | |
| LOW | docs/readthedocs/tools/translate_figures.py | 15 | CODE | |
| LOW | docs/readthedocs/tools/code_dict.py | 22 | CODE | |
| LOW | docs/readthedocs/tools/visual_check.py | 19 | CODE | |
| LOW | docs/readthedocs/tools/build_cover_en.py | 24 | CODE | |
| LOW | docs/readthedocs/convert/labels.py | 9 | CODE | |
| LOW | docs/readthedocs/convert/figtext.py | 12 | CODE | |
| LOW | docs/readthedocs/convert/readme.py | 7 | CODE | |
| LOW | docs/readthedocs/convert/preprocess.py | 20 | CODE | |
| LOW | docs/readthedocs/convert/postprocess.py | 10 | CODE | |
| LOW | docs/readthedocs/convert/__init__.py | 11 | CODE | |
| LOW | docs/readthedocs/convert/tokens.py | 10 | CODE | |
| LOW | docs/readthedocs/convert/texutil.py | 6 | CODE | |
| LOW | docs/readthedocs/convert/booktree.py | 6 | CODE | |
| LOW | docs/readthedocs/convert/macros.py | 11 | CODE | |
| LOW | docs/readthedocs/convert/cjk_nodes.py | 8 | CODE | |
| LOW | docs/readthedocs/convert/verify.py | 17 | CODE | |
| LOW | docs/readthedocs/convert/tikz2svg.py | 14 | CODE | |
| LOW | docs/readthedocs/convert/tikz2svg.py | 18 | CODE | |
| LOW | docs/readthedocs/convert/__main__.py | 9 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | kernels/hgemm/tools/print_swizzle_layout.py | 0 | ---------------------------------------------------------------- [info] assert smem store layout col_stride <= 16, prefe | STRING |
| HIGH | kernels/flash-attn/tools/print_swizzle_layout.py | 0 | ---------------------------------------------------------------- [info] assert smem store layout col_stride <= 16, prefe | STRING |
| HIGH | kernels/swizzle/print_swizzle_layout.py | 0 | ---------------------------------------------------------------- [info] assert smem store layout col_stride <= 16, prefe | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/hgemm/hgemm.py | 198 | def make_block_swizzle_stride(N: int, K: int, swizzle_factor: float = None): | CODE |
| LOW | kernels/hgemm/setup.py | 23 | def get_cuda_bare_metal_version(cuda_dir): | CODE |
| LOW⚡ | kernels/hgemm/tools/print_swizzle_layout.py | 40 | def print_smem_swizzle_layout( | CODE |
| LOW⚡ | kernels/flash-attn/tools/print_swizzle_layout.py | 40 | def print_smem_swizzle_layout( | CODE |
| LOW⚡ | kernels/swizzle/print_swizzle_layout.py | 40 | def print_smem_swizzle_layout( | CODE |
| LOW | …i-triton/merge-attn-states/triton_merge_attn_states.py | 119 | def merge_attn_states_kernel_opt( | CODE |
| LOW | docs/readthedocs/convert/preprocess.py | 1045 | def _isolate_display_brackets(text: str) -> str: | CODE |
| LOW | docs/readthedocs/convert/preprocess.py | 1481 | def _normalize_math_primitives(text: str) -> str: | CODE |
| LOW | docs/readthedocs/convert/postprocess.py | 662 | def _clean_heading_attributes(md_text: str) -> str: | CODE |
| LOW | docs/readthedocs/convert/postprocess.py | 825 | def _collapse_math_blank_lines(md_text: str) -> str: | CODE |
| LOW | docs/readthedocs/convert/verify.py | 206 | def check_table_counts_per_chapter( | CODE |
| LOW | docs/readthedocs/convert/verify.py | 312 | def check_table_inline_markdown(md_texts: dict[str, str]) -> tuple[bool, str]: | CODE |
| LOW | docs/readthedocs/convert/verify.py | 567 | def check_math_foreign_markup(texts: dict[str, str]) -> tuple[bool, str]: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/interview/build.sh | 218 | # Step 1: 并行编译全部 TU(wait -n 限流,失败即终止并杀掉其余 job 及其 nvcc 子进程) | COMMENT |
| LOW | kernels/interview/build.sh | 247 | # Step 2: weaken base.cuh 派生的重复强符号(base.o 为规范定义) | COMMENT |
| LOW | kernels/interview/build.sh | 258 | # Step 3: link(显式 TU 列表,防 stale .o 混入;weaken 后 base.o 的强符号恒胜弱符号) | COMMENT |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 64 | "// Step 1: max 归一化(与 safe softmax 同理,防 exp 溢出)": "// Step 1: max normalization (same idea as safe softmax, prevents ex | CODE |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 66 | "// Step 4: 逐元素加权合并 O = alpha * O_1 + beta * O_2": "// Step 4: element-wise weighted merge O = alpha * O_1 + beta * O_2 | CODE |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 358 | "// Step 1: 加载 Q[Br, d] 到 shared memory(整个外循环只加载一次)": "// Step 1: load Q[Br, d] into shared memory (loaded only once ac | CODE |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 359 | "// Step 2: 预加载前 (kStagesK-1) 个 K tile(多 stage pipeline 预热)": "// Step 2: preload the first (kStagesK-1) K tiles (warm- | CODE |
| LOW | docs/readthedocs/_static/code-en.json | 386 | "// Step 4: 最终 rescale — O_final = (1/l_final) * O_final": "// Step 4: final rescale — O_final = (1/l_final) * O_final" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/interview/build.sh | 218 | # Step 1: 并行编译全部 TU(wait -n 限流,失败即终止并杀掉其余 job 及其 nvcc 子进程) | COMMENT |
| LOW | kernels/interview/build.sh | 247 | # Step 2: weaken base.cuh 派生的重复强符号(base.o 为规范定义) | COMMENT |
| LOW | kernels/interview/build.sh | 258 | # Step 3: link(显式 TU 列表,防 stale .o 混入;weaken 后 base.o 的强符号恒胜弱符号) | COMMENT |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 64 | "// Step 1: max 归一化(与 safe softmax 同理,防 exp 溢出)": "// Step 1: max normalization (same idea as safe softmax, prevents ex | CODE |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 66 | "// Step 4: 逐元素加权合并 O = alpha * O_1 + beta * O_2": "// Step 4: element-wise weighted merge O = alpha * O_1 + beta * O_2 | CODE |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 358 | "// Step 1: 加载 Q[Br, d] 到 shared memory(整个外循环只加载一次)": "// Step 1: load Q[Br, d] into shared memory (loaded only once ac | CODE |
| LOW⚡ | docs/readthedocs/_static/code-en.json | 359 | "// Step 2: 预加载前 (kStagesK-1) 个 K tile(多 stage pipeline 预热)": "// Step 2: preload the first (kStagesK-1) K tiles (warm- | CODE |
| LOW | docs/readthedocs/_static/code-en.json | 386 | "// Step 4: 最终 rescale — O_final = (1/l_final) * O_final": "// Step 4: final rescale — O_final = (1/l_final) * O_final" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/hgemm/tools/utils.py | 134 | except Exception: | CODE |
| LOW | …hers/pytorch/distributed/test_all_to_all_single_ray.py | 116 | except Exception as e: | CODE |
| MEDIUM | …hers/pytorch/distributed/test_all_to_all_single_ray.py | 49 | def run(self) -> torch.Tensor: | CODE |
| LOW | others/pytorch/distributed/test_all_to_all_single.py | 85 | except Exception as e: | CODE |
| LOW | others/pytorch/distributed/test_dist_all.py | 180 | except Exception as e: | CODE |
| LOW | docs/readthedocs/tools/visual_check.py | 245 | except Exception: # MathJax 报错时 promise 不会 resolve,这里不该中断验收 | STRING |
| LOW | docs/readthedocs/convert/__main__.py | 198 | except Exception: # cairosvg 对个别格式敏感,跳过即可,不影响站点 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ls/openai-triton/fused-softmax/triton_fused_softmax.py | 144 | # Create a number of persistent programs. | COMMENT |
| MEDIUM | kernels/openai-triton/vector-add/triton_vector_add.py | 47 | # Create a mask to guard memory operations against out-of-bounds accesses. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/readthedocs/tools/visual_check.py | 245 | except Exception: # MathJax 报错时 promise 不会 resolve,这里不该中断验收 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/hgemm/hgemm.py | 212 | CODE | |
| LOW | …view/book/figures/drawio/fig-23-2-tma-copy-flow/gen.py | 12 | CODE | |
| LOW | …ls/openai-triton/fused-softmax/triton_fused_softmax.py | 29 | CODE | |
| LOW | others/tensorrt/fmha/fmha_pattern_match_ops.py | 62 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/interview/build.sh | 16 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | kernels/openai-triton/vector-add/triton_vector_add.py | 75 | # - Don't forget to pass meta-parameters as keywords arguments. | COMMENT |