{
  "version": 2,
  "note": "CLI(submit_check.py) 와 웹(docs/js/scan.js) 이 함께 읽는 판정 표. 정규식은 파이썬 re 와 JS RegExp 가 똑같이 해석하는 문법만 씁니다 (뒤돌아보기 금지, \\d \\w 대신 문자군, 양쪽 다 ASCII 모드).",

  "families": [
    {
      "id": "anonymity",
      "label": { "en": "Anonymity", "ko": "익명성" },
      "blurb": {
        "en": "Anything that tells a reviewer who wrote this — in the text, and in the parts of the file you cannot see.",
        "ko": "심사자가 저자를 알아낼 수 있는 것. 본문뿐 아니라 눈에 안 보이는 곳까지 봅니다."
      }
    },
    {
      "id": "draft",
      "label": { "en": "Loose ends", "ko": "난 자국" },
      "blurb": {
        "en": "Broken cross-references, notes to self, and template defaults nobody replaced.",
        "ko": "깨진 참조, 자기한테 남긴 메모, 아무도 안 바꾼 템플릿 기본값."
      }
    },
    {
      "id": "format",
      "label": { "en": "Format", "ko": "서식·규격" },
      "blurb": {
        "en": "The things a submission system checks before a human ever opens the file.",
        "ko": "사람이 파일을 열어보기도 전에 제출 시스템이 먼저 보는 것들."
      }
    },
    {
      "id": "assets",
      "label": { "en": "Fonts & figures", "ko": "글꼴·그림" },
      "blurb": {
        "en": "What will go wrong when this is printed rather than read on your screen.",
        "ko": "당신 화면이 아니라 인쇄기를 거칠 때 어긋나는 것들."
      }
    }
  ],

  "fold": [
    ["àáâãäåāăą", "a"], ["ÀÁÂÃÄÅĀĂĄ", "A"],
    ["èéêëēĕėęě", "e"], ["ÈÉÊËĒĔĖĘĚ", "E"],
    ["ìíîïĩīĭį", "i"], ["ÌÍÎÏĨĪĬĮ", "I"],
    ["òóôõöøōŏő", "o"], ["ÒÓÔÕÖØŌŎŐ", "O"],
    ["ùúûüũūŭůű", "u"], ["ÙÚÛÜŨŪŬŮŰ", "U"],
    ["çćĉċč", "c"], ["ÇĆĈĊČ", "C"],
    ["ñńņň", "n"], ["ÑŃŅŇ", "N"],
    ["ýÿŷ", "y"], ["ÝŸŶ", "Y"],
    ["šśşŝ", "s"], ["ŠŚŞŜ", "S"],
    ["žźż", "z"], ["ŽŹŻ", "Z"],
    ["ğĝģ", "g"], ["ĞĜĢ", "G"],
    ["łĺļľ", "l"], ["ŁĹĻĽ", "L"],
    ["đď", "d"], ["ĐĎ", "D"],
    ["ŕŗř", "r"], ["ŔŖŘ", "R"],
    ["ťţ", "t"], ["ŤŢ", "T"],
    ["‘’‚‛′", "'"], ["“”„″", "\""],
    ["‐‑‒–—―−", "-"], ["     ", " "]
  ],

  "refsHeading": "^[ \\t]*(?:[0-9]+[.)]?[ \\t]+|[IVX]+[.)][ \\t]+)?(?:REFERENCES?|References?|Bibliography|BIBLIOGRAPHY|참고[ \\t]*문헌)[ \\t]*$",
  "ackHeading": "^[ \\t]*(?:[0-9]+[.)]?[ \\t]+|[IVX]+[.)][ \\t]+|[A-Z][.)][ \\t]+)?(?:ACKNOWLEDG(?:E?MENTS?|EMENT)|Acknowledg(?:e?ments?|ement)|감사의[ \\t]*글)[ \\t]*$",
  "appendixHeading": "^[ \\t]*(?:[A-Z][.)]?[ \\t]+)?(?:APPENDI(?:X|CES)|Appendi(?:x|ces)|SUPPLEMENT(?:ARY|AL)?[ \\t]*(?:MATERIALS?)?|Supplement(?:ary|al)?[ \\t]*(?:Materials?)?|부록)\\b",
  "abstractHeading": "^[ \\t]*(?:ABSTRACT|Abstract|CCS[ \\t]+CONCEPTS?|CCS[ \\t]+Concepts?|KEYWORDS|Keywords)\\b",

  "figureCaption": "^[ \\t]*(?:Fig(?:ure)?\\.?|FIG(?:URE)?\\.?)[ \\t]*([0-9]{1,3})[ \\t]*[.:)]",
  "tableCaption": "^[ \\t]*(?:Table|TABLE|Tab\\.)[ \\t]*([0-9]{1,3})[ \\t]*[.:)]",
  "figureRef": "\\b(?:Fig(?:ure)?s?\\.?|FIG(?:URE)?S?\\.?)[ \\t]*([0-9]{1,3})\\b",
  "tableRef": "\\b(?:Tables?|TABLES?|Tab\\.)[ \\t]*([0-9]{1,3})\\b",

  "anonMarkers": [
    "\\bAnonymous\\s+Author",
    "\\bANONYMOUS\\s+AUTHOR",
    "\\bAnon\\.",
    "\\bAuthors?\\s+(?:names?\\s+)?(?:omitted|removed|withheld|redacted|anonymi[sz]ed)",
    "\\b(?:Anonymi[sz]ed|Redacted|Blinded)\\s+for\\s+(?:review|submission|peer\\s+review)",
    "\\bfor\\s+(?:double[- ]?)?blind\\s+review\\b",
    "\\bPaper\\s+ID\\b",
    "\\bSubmission\\s+ID\\b",
    "\\[\\s*(?:ANONYMI[SZ]ED|REDACTED|BLINDED|AUTHOR|AUTHORS|NAME|OMITTED)\\s*\\]"
  ],

  "toolNames": [
    "^(?:pdfTeX|XeTeX|LuaTeX|LaTeX|TeX|dvips|Ghostscript|GPL Ghostscript|Distiller|Acrobat|Adobe|Microsoft|Word|PowerPoint|Keynote|Pages|Quartz|macOS|Mac OS|Skia|Chrome|Chromium|Safari|Firefox|Preview|Nitro|Foxit|PDFium|iText|Apache|LibreOffice|OpenOffice|Overleaf|Google|Canva|Figma|Illustrator|InDesign|Photoshop|Scribus|Prince|WeasyPrint|wkhtmltopdf|ReportLab|TCPDF|FPDF|Word for|3-Heights|PScript|Aspose|Ipe|Inkscape|Cairo|cairo|matplotlib|Xpdf|Poppler|Sioyek|Zotero|Mendeley|Typst|Pandoc|Skia/PDF|Producer)"
  ],

  "placeholderNames": [
    "^(?:Trovato|Tobin|Trovato and Tobin|Ben Trovato|G\\. K\\. M\\. Tobin|Lars Th\\u00f8rv\\u00e4ld|Valerie B\\u00e9ranger|Aparna Patel|Huifen Chan|Charles Palmer|John Smith|Jane Doe|John Doe|Author|Authors|Anonymous|Anonymous Author\\(s\\)|Anon|Unknown|User|Administrator|admin|Untitled|None|N/A|-)$"
  ],

  "rawSkipKeys": [
    "Notice", "Copyright", "FontName", "BaseFont", "FullName", "FamilyName",
    "Registry", "Ordering", "Name", "Type", "Subtype", "Filter", "ColorSpace",
    "PatternType", "ShadingType", "ProcSet", "Encoding", "Differences",
    "Version", "Trapped", "OutputCondition", "OutputConditionIdentifier",
    "Info", "RegistryName", "GTS_PDFXVersion", "GTS_PDFXConformance",
    "PDFXVersion", "Marked", "Lang", "S", "P", "K", "A", "O", "V", "R", "U",
    "ID", "Prev", "Root", "Size", "W", "Index", "Length", "N", "First"
  ],

  "base14Fonts": [
    "^(?:[A-Z]{6}\\+)?(?:Times[- ]?(?:Roman|Bold|Italic|BoldItalic)?|Helvetica(?:[- ](?:Bold|Oblique|BoldOblique))?|Courier(?:[- ](?:Bold|Oblique|BoldOblique))?|Symbol|ZapfDingbats|Arial(?:MT|[- ]?(?:Bold|Italic|BoldItalic)MT?)?)$"
  ],

  "structural": [
    {
      "id": "identity", "family": "anonymity", "level": "error",
      "label": { "en": "Your identity", "ko": "내가 준 신원 정보" },
      "advice": {
        "en": "A name, affiliation or handle you supplied appears here verbatim.",
        "ko": "직접 넣어 준 이름·소속·계정이 여기 그대로 있습니다."
      }
    },
    {
      "id": "noanon", "family": "anonymity", "level": "warn",
      "label": { "en": "No anonymity marker", "ko": "익명 표시 없음" },
      "advice": {
        "en": "The author area on page 1 carries no 'Anonymous Author(s)' style marker. Check that you replaced the names rather than just deleting them.",
        "ko": "1쪽 저자 자리에 'Anonymous Author(s)' 같은 표시가 없습니다. 이름을 지우기만 하고 익명 표기를 넣지 않았는지 보세요."
      }
    },
    {
      "id": "namedhead", "family": "anonymity", "level": "error",
      "label": { "en": "Name in the running head", "ko": "머리글에 저자 이름" },
      "advice": {
        "en": "The running head printed on every page still carries a name. Your template's anonymous mode is not switched on.",
        "ko": "쪽마다 찍히는 머리글에 이름이 남아 있습니다. 템플릿의 익명 모드가 안 켜져 있습니다."
      }
    },
    {
      "id": "metaauthor", "family": "anonymity", "level": "error",
      "label": { "en": "Author in the document info", "ko": "문서 정보의 저자" },
      "advice": {
        "en": "A reviewer sees this by opening the file properties. Anonymising the body does nothing while this is still here.",
        "ko": "심사자가 파일 정보만 열어도 보입니다. 본문을 아무리 익명화해도 여기가 남아 있으면 소용없습니다."
      }
    },
    {
      "id": "source", "family": "anonymity", "level": "info",
      "label": { "en": "Source file name", "ko": "원본 파일 이름" },
      "advice": {
        "en": "The source file this was typeset from. Check it carries no name or affiliation.",
        "ko": "조판에 쓴 원본 파일 이름입니다. 이름이나 소속이 들어 있지 않은지 보세요."
      }
    },
    {
      "id": "attachment", "family": "anonymity", "level": "warn",
      "label": { "en": "Embedded file", "ko": "첨부 파일" },
      "advice": {
        "en": "A file is embedded in the PDF. That file carries metadata of its own.",
        "ko": "PDF 안에 파일이 들어 있습니다. 그 파일에도 자기 메타데이터가 있습니다."
      }
    },
    {
      "id": "comment", "family": "anonymity", "level": "error",
      "label": { "en": "Comment author", "ko": "주석 작성자" },
      "advice": {
        "en": "Review comments or sticky notes are still in the file, with the name of whoever wrote them. Re-print (flatten) the PDF to drop them.",
        "ko": "리뷰 코멘트·메모가 작성자 이름과 함께 남아 있습니다. PDF를 다시 인쇄(flatten)해서 지우세요."
      }
    },
    {
      "id": "revision", "family": "anonymity", "level": "info",
      "label": { "en": "Earlier revisions kept", "ko": "이전 판이 남음" },
      "advice": {
        "en": "The file was saved incrementally, so earlier revisions are still inside it — possibly the version from before you anonymised it. Re-print to flatten.",
        "ko": "증분 저장이라 이전 판이 파일 안에 그대로 있습니다. 익명화하기 전 판이 섞여 있을 수 있으니 한 번 다시 인쇄해 판을 정리하세요."
      }
    },
    {
      "id": "timezone", "family": "anonymity", "level": "info",
      "label": { "en": "Time zone", "ko": "표준시간대" },
      "advice": {
        "en": "The saved timestamp carries a UTC offset, which hints at the region. Rarely an issue, but worth knowing.",
        "ko": "저장 시각에 시간대가 붙어 있어 대략의 지역이 드러납니다. 대개 문제 삼지 않지만 알고는 계세요."
      }
    },

    {
      "id": "orphanfig", "family": "draft", "level": "warn",
      "label": { "en": "Figure never referred to", "ko": "본문에서 안 부른 그림" },
      "advice": {
        "en": "The caption exists but no sentence points at it. Reviewers read figures through the text that calls them.",
        "ko": "캡션은 있는데 본문에서 부르는 문장이 없습니다. 심사자는 본문이 부르는 순서로 그림을 봅니다."
      }
    },
    {
      "id": "orphantab", "family": "draft", "level": "warn",
      "label": { "en": "Table never referred to", "ko": "본문에서 안 부른 표" },
      "advice": {
        "en": "The caption exists but no sentence points at it.",
        "ko": "캡션은 있는데 본문에서 부르는 문장이 없습니다."
      }
    },
    {
      "id": "missingfig", "family": "draft", "level": "error",
      "label": { "en": "Figure referred to but missing", "ko": "없는 그림을 부름" },
      "advice": {
        "en": "The text points at a figure number that has no caption in this file. Usually a stale number after re-ordering.",
        "ko": "본문이 부르는 그림 번호에 해당하는 캡션이 이 파일에 없습니다. 그림 순서를 바꾼 뒤 번호가 안 따라온 경우가 많습니다."
      }
    },
    {
      "id": "missingtab", "family": "draft", "level": "error",
      "label": { "en": "Table referred to but missing", "ko": "없는 표를 부름" },
      "advice": {
        "en": "The text points at a table number that has no caption in this file.",
        "ko": "본문이 부르는 표 번호에 해당하는 캡션이 이 파일에 없습니다."
      }
    },

    {
      "id": "encrypted", "family": "format", "level": "error",
      "label": { "en": "Encrypted PDF", "ko": "암호·권한이 걸린 PDF" },
      "advice": {
        "en": "Submission systems reject PDFs with an encryption dictionary, even an empty-password one. Re-print without protection.",
        "ko": "제출 시스템은 암호 사전이 붙은 PDF를 빈 암호라도 거부합니다. 보호를 풀고 다시 인쇄하세요."
      }
    },
    {
      "id": "pagesize", "family": "format", "level": "error",
      "label": { "en": "Mixed page sizes", "ko": "쪽 크기가 섞임" },
      "advice": {
        "en": "Pages are not all the same size. This usually means a figure page was inserted from another document.",
        "ko": "쪽마다 용지 크기가 다릅니다. 대개 다른 문서에서 그림 쪽을 끼워 넣었을 때 생깁니다."
      }
    },
    {
      "id": "paper", "family": "format", "level": "info",
      "label": { "en": "Paper size", "ko": "용지 크기" },
      "advice": {
        "en": "ACM templates are US Letter; most European venues take A4. Check what your venue asks for.",
        "ko": "ACM 양식은 US Letter, 유럽 학회는 대개 A4입니다. 투고 학회가 무엇을 요구하는지 보세요."
      }
    },
    {
      "id": "pagecount", "family": "format", "level": "info",
      "label": { "en": "Length", "ko": "분량" },
      "advice": {
        "en": "Most venues count content pages and exclude references. Compare this with the call for papers.",
        "ko": "대부분의 학회는 참고문헌을 빼고 본문 쪽수를 셉니다. 투고 안내와 견줘 보세요."
      }
    },
    {
      "id": "overlong", "family": "format", "level": "error",
      "label": { "en": "Over the page limit", "ko": "쪽수 초과" },
      "advice": {
        "en": "Content pages exceed the limit you gave. References are not counted.",
        "ko": "일러준 한도를 본문 쪽수가 넘었습니다. 참고문헌은 세지 않았습니다."
      }
    },
    {
      "id": "linenumbers", "family": "format", "level": "warn",
      "label": { "en": "No review line numbers", "ko": "심사용 줄번호 없음" },
      "advice": {
        "en": "Venues that ask for line numbers want the review mode of the template on (\\documentclass[manuscript,review]). Ignore this if yours does not.",
        "ko": "줄번호를 요구하는 학회라면 템플릿의 심사 모드를 켜야 합니다 (\\documentclass[manuscript,review]). 요구하지 않는 학회면 무시하세요."
      }
    },
    {
      "id": "filesize", "family": "format", "level": "warn",
      "label": { "en": "Large file", "ko": "파일이 큼" },
      "advice": {
        "en": "Some submission systems cap the upload. Down-sample the raster figures if you are near a limit.",
        "ko": "제출 시스템마다 올릴 수 있는 크기가 정해져 있습니다. 한도에 가깝다면 그림 해상도를 낮추세요."
      }
    },
    {
      "id": "pdfversion", "family": "format", "level": "info",
      "label": { "en": "PDF version", "ko": "PDF 판" },
      "advice": {
        "en": "For reference. Very old or very new versions occasionally trip an ageing submission system.",
        "ko": "참고용입니다. 너무 옛 판이나 너무 새 판은 오래된 제출 시스템에서 가끔 걸립니다."
      }
    },

    {
      "id": "nonembedded", "family": "assets", "level": "error",
      "label": { "en": "Font not embedded", "ko": "글꼴이 안 박힘" },
      "advice": {
        "en": "A machine without this font substitutes another one, and the layout moves. This is a routine desk-reject reason.",
        "ko": "이 글꼴이 없는 컴퓨터는 다른 글꼴로 바꿔 그리고, 그러면 조판이 밀립니다. 흔한 반려 사유입니다."
      }
    },
    {
      "id": "type3", "family": "assets", "level": "warn",
      "label": { "en": "Type 3 font", "ko": "Type 3 글꼴" },
      "advice": {
        "en": "Type 3 fonts are drawings, not outlines. They print poorly and are usually not searchable. Usually it means the figures went through an old bitmap route.",
        "ko": "Type 3 글꼴은 윤곽선이 아니라 그림입니다. 인쇄가 지저분하고 검색도 안 됩니다. 대개 그림이 옛 비트맵 경로를 거쳤다는 뜻입니다."
      }
    },
    {
      "id": "lowres", "family": "assets", "level": "warn",
      "label": { "en": "Low-resolution figure", "ko": "해상도 낮은 그림" },
      "advice": {
        "en": "At one column wide this prints below 300 dpi and will look soft. Re-export as vector, or at twice the pixel size.",
        "ko": "한 단 너비로 실으면 300 dpi 아래로 떨어져 흐릿하게 인쇄됩니다. 벡터로 다시 뽑거나 픽셀 수를 두 배로 키우세요."
      }
    }
  ],

  "detectors": [
    {
      "id": "email",
      "family": "anonymity",
      "scope": "both",
      "level": "error",
      "label": { "en": "Email address", "ko": "이메일 주소" },
      "advice": {
        "en": "A working email identifies the author outright. Replace it with the anonymous placeholder your venue asks for.",
        "ko": "실제 이메일은 저자를 그대로 드러냅니다. 학회가 요구하는 익명 표기로 바꾸세요."
      },
      "patterns": [
        "[A-Za-z0-9._%+\\-]+@[A-Za-z0-9\\-]+(?:\\.[A-Za-z0-9\\-]+)*\\.[A-Za-z]{2,}"
      ],
      "skip": [
        "^(?:anon|anonymous|author|authors|firstauthor|first|last|name|names|email|e-mail|xxx+|yyy+|abc|foo|bar|user|username|someone|nobody|noreply|no-reply|redacted|blinded|omitted|removed|firstname\\.lastname)[A-Za-z0-9._%+\\-]*@",
        "@(?:example|test|domain|email|mail|anon|anonymous|anonymized|anonymised|blinded|redacted|omitted|institution|university|somewhere|xxx+|yyy+|foo|bar|placeholder|your|company|organization)\\.",
        "^(?:permissions|copyright|info|support|orders|sales|webmaster|postmaster|help|contact|editor|editorial)@(?:acm\\.org|ieee\\.org|springer\\.com|elsevier\\.com|wiley\\.com|usenix\\.org|aaai\\.org|aclweb\\.org|nature\\.com|sagepub\\.com|tandf\\.co\\.uk|taylorandfrancis\\.com)$"
      ]
    },

    {
      "id": "orcid",
      "family": "anonymity",
      "scope": "both",
      "level": "error",
      "label": { "en": "ORCID iD", "ko": "ORCID 번호" },
      "advice": {
        "en": "An ORCID resolves to a named researcher page. Remove it from the submission version.",
        "ko": "ORCID는 곧바로 연구자 개인 페이지로 이어집니다. 심사본에서는 빼세요."
      },
      "patterns": [
        "\\b[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{3}[0-9X]\\b",
        "\\borcid\\.org/[0-9X\\-]{10,}"
      ],
      "skip": ["^0000-0000-0000-000[0X]$"]
    },

    {
      "id": "profile",
      "family": "anonymity",
      "scope": "both",
      "level": "error",
      "label": { "en": "Personal profile link", "ko": "개인 프로필 링크" },
      "advice": {
        "en": "This link opens a page with the author's name on it. Drop it or point at an anonymous mirror.",
        "ko": "누르면 저자 이름이 적힌 페이지가 열립니다. 지우거나 익명 사본을 가리키게 하세요."
      },
      "patterns": [
        "\\b(?:www\\.)?linkedin\\.com/[A-Za-z0-9/_\\-]+",
        "\\b(?:www\\.)?researchgate\\.net/[A-Za-z0-9/._\\-]+",
        "\\bscholar\\.google\\.[a-z.]{2,6}/citations[A-Za-z0-9?=&_\\-]*",
        "\\b(?:www\\.)?academia\\.edu/[A-Za-z0-9/._\\-]*",
        "\\b(?:twitter|x)\\.com/[A-Za-z0-9_]{2,}",
        "\\bsemanticscholar\\.org/author/[A-Za-z0-9/._\\-]+",
        "\\bdblp\\.org/pid/[A-Za-z0-9/._\\-]+",
        "\\bmastodon\\.[A-Za-z0-9.\\-]+/@[A-Za-z0-9_]+"
      ],
      "skip": ["^(?:twitter|x)\\.com/(?:intent|share|home|search|hashtag|i)\\b"]
    },

    {
      "id": "repo",
      "family": "anonymity",
      "scope": "both",
      "level": "warn",
      "label": { "en": "Code or model account", "ko": "코드·모델 계정" },
      "advice": {
        "en": "If this account is yours, the URL names you — use an anonymised mirror (anonymous.4open.science) for review. If it belongs to software you cite, it is fine.",
        "ko": "이 계정이 당신 것이면 주소가 곧 신원입니다 — 심사용으로는 익명 사본(anonymous.4open.science)을 쓰세요. 인용한 소프트웨어의 계정이면 괜찮습니다."
      },
      "patterns": [
        { "re": "\\bgithub\\.com/([A-Za-z0-9](?:[A-Za-z0-9\\-]{0,38}))", "capture": 1 },
        { "re": "\\bgitlab\\.com/([A-Za-z0-9](?:[A-Za-z0-9._\\-]{0,38}))", "capture": 1 },
        { "re": "\\bbitbucket\\.org/([A-Za-z0-9](?:[A-Za-z0-9._\\-]{0,38}))", "capture": 1 },
        { "re": "\\bhuggingface\\.co/([A-Za-z0-9](?:[A-Za-z0-9._\\-]{0,38}))", "capture": 1 },
        { "re": "\\b([A-Za-z0-9][A-Za-z0-9\\-]{0,38})\\.github\\.io\\b", "capture": 1 },
        { "re": "\\b([A-Za-z0-9][A-Za-z0-9\\-]{0,38})\\.gitlab\\.io\\b", "capture": 1 }
      ],
      "skip": [
        "^(?:anon|anonymous|anonymized|anonymised|anon-?authors?|anonymous-?authors?|blinded|redacted|omitted|removed|paper|submission|review|double-?blind|xxx+|yyy+|user|username|your-?name|orgname|organization)",
        "^(?:microsoft|google|googlecreativelab|googleresearch|google-research|google-ai-edge|deepmind|facebook|facebookresearch|meta-llama|openai|anthropics|huggingface|pytorch|tensorflow|keras-team|scikit-learn|numpy|scipy|pandas-dev|matplotlib|jupyter|mozilla|apache|python|nodejs|npm|electron|d3|mrdoob|threejs|opencv|MediaPipe|ultralytics|explosion|allenai|EleutherAI|stability-ai|CompVis|NVIDIA|NVlabs|IBM|apple|adobe|salesforce|amzn|aws|awslabs|Azure|dotnet|rust-lang|golang|llvm|torvalds|features|about|pricing|topics|trending|marketplace|orgs|settings|readme|blog|site|pages|docs|sponsors|login|signup|search)$"
      ]
    },

    {
      "id": "path",
      "family": "anonymity",
      "scope": "both",
      "level": "error",
      "label": { "en": "Local file path", "ko": "내 컴퓨터 경로" },
      "advice": {
        "en": "The account name in the path is the author's. It usually comes in through an included figure or a metadata field.",
        "ko": "경로에 박힌 계정 이름이 곧 저자입니다. 보통 그림을 넣거나 메타데이터를 통해 딸려 들어옵니다."
      },
      "patterns": [
        "/(?:Users|home)/([A-Za-z][A-Za-z0-9._\\- ]{1,32})/",
        "[A-Za-z]:\\\\Users\\\\([A-Za-z][A-Za-z0-9._\\- ]{1,32})",
        "\\bOneDrive\\s*-\\s*([A-Z][A-Za-z0-9 .,&'\\-]{2,48})"
      ],
      "skip": [
        "/(?:Users|home)/(?:user|users|username|anonymous|anon|admin|administrator|guest|root|ubuntu|runner|test|example|shared|Shared|localadmin|student|me|you|name|yourname|xxx+)/",
        "\\\\Users\\\\(?:user|username|anonymous|anon|admin|administrator|guest|test|example|Public|Default)"
      ]
    },

    {
      "id": "selfcite",
      "family": "anonymity",
      "scope": "text",
      "level": "error",
      "label": { "en": "First-person self-citation", "ko": "일인칭 자기 인용" },
      "advice": {
        "en": "Cite your own earlier work in the third person, as you would anyone else's. \"Our previous work [12]\" tells the reviewer exactly who wrote [12].",
        "ko": "자기 논문도 남의 논문처럼 삼인칭으로 인용하세요. \"our previous work [12]\" 는 [12]의 저자가 누구인지 그대로 알려줍니다."
      },
      "patterns": [
        "\\b(?:our|my)\\s+(?:own\\s+)?(?:previous|prior|earlier|recent|past|initial|preliminary|former|companion)\\s+(?:work|works|study|studies|paper|papers|publication|publications|research|system|systems|approach|framework|dataset|datasets|experiment|experiments|analysis|findings|results|prototype|deployment|version|design|tool|toolkit|model)\\b",
        "\\bin\\s+(?:our|my)\\s+(?:previous|prior|earlier|recent|past|other|companion|related|ongoing)\\s",
        "\\bwe\\s+(?:previously|earlier|recently|elsewhere|already)\\s+(?:showed|shown|reported|presented|introduced|proposed|described|found|developed|published|argued|demonstrated|explored|studied|built|designed|released)\\b",
        "\\bwe\\s+(?:have|had)\\s+(?:previously|earlier|elsewhere)\\s",
        "\\b(?:as|which)\\s+we\\s+(?:showed|reported|argued|demonstrated|described|found|noted|discussed)\\s+(?:in|elsewhere|previously)\\b",
        "\\b(?:build|builds|building|built|extend|extends|extending|extended)\\s+(?:directly\\s+)?(?:up)?on\\s+(?:our|my)\\s+(?:own\\s+)?(?:previous|prior|earlier|recent|past)\\b",
        "\\b(?:our|my)\\s+(?:group|team|lab|laboratory)(?:'s|s')?\\s+(?:previous|prior|earlier|recent|work|research)\\b",
        "\\bwe\\s+(?:refer|point)\\s+(?:the\\s+reader\\s+)?to\\s+(?:our|my)\\b"
      ]
    },

    {
      "id": "thanks",
      "family": "anonymity",
      "scope": "text",
      "level": "error",
      "label": { "en": "Acknowledgements", "ko": "감사의 글" },
      "advice": {
        "en": "Most double-blind venues want the acknowledgements removed until camera-ready. The people you thank identify the lab.",
        "ko": "대부분의 이중맹검 학회는 최종본 전까지 감사의 글을 빼라고 합니다. 감사한 사람들이 곧 연구실을 가리킵니다."
      },
      "patterns": [
        "\\bwe\\s+(?:would\\s+like\\s+to\\s+|wish\\s+to\\s+|want\\s+to\\s+|sincerely\\s+)?thank\\b",
        "\\bthe\\s+authors?\\s+(?:would\\s+like\\s+to\\s+)?thank\\b",
        "\\bwe\\s+(?:are|would\\s+like\\s+to\\s+express\\s+our)\\s+(?:deeply\\s+|sincerely\\s+)?(?:grateful|gratitude|thankful|indebted)\\b",
        "\\bthanks?\\s+(?:go\\s+)?to\\s+[A-Z]",
        "\\bwith\\s+(?:the\\s+)?(?:generous\\s+)?(?:help|assistance|support)\\s+of\\s+[A-Z]",
        "\\bwe\\s+(?:also\\s+)?acknowledge\\s+(?:the\\s+)?(?:support|funding|help|assistance|contribution)\\b"
      ]
    },

    {
      "id": "funding",
      "family": "anonymity",
      "scope": "text",
      "level": "error",
      "label": { "en": "Funding or grant number", "ko": "연구비·과제번호" },
      "advice": {
        "en": "A grant number resolves to a named PI in a public award database. Remove funding statements from the submission version.",
        "ko": "과제번호는 공개된 과제 DB에서 연구책임자 이름으로 이어집니다. 심사본에서는 연구비 문장을 빼세요."
      },
      "patterns": [
        "\\b(?:Grant|Award|Contract|Project)\\s+(?:No\\.?|Number|ID|#)\\s*[:#]?\\s*[A-Z0-9][A-Z0-9./\\-]{3,}",
        "\\bunder\\s+(?:the\\s+)?(?:Grant|Award|Contract)\\b",
        "\\b(?:funded|financed)\\s+(?:in\\s+part\\s+)?by\\b",
        "\\bsupported\\s+(?:in\\s+part\\s+)?by\\s+(?:the\\s+)?(?:National|Ministry|Korea|Korean|European|Japan|Japanese|Chinese|China|Swiss|German|Deutsche|Research\\s+Council|a\\s+grant|grants?|award|NSF|NIH|NRF|DARPA|ERC|EPSRC|JSPS|NSFC|IITP|MSIT|ONR|AFOSR|ARL|Wellcome|Sloan|Google|Microsoft|Meta|Samsung|Hyundai|Naver|Kakao|LG|SK|Amazon|Adobe|Toyota)\\b",
        "\\bNRF-[0-9]{4}[A-Za-z0-9]+",
        "\\bRS-[0-9]{4}-[A-Z]{2}[0-9]{5,}",
        "\\bIITP-[0-9]{4}-[A-Za-z0-9\\-]+",
        "\\b(?:NSF|NIH|DARPA|ERC|EPSRC|JSPS|NSFC|ONR|AFOSR)\\s+(?:grant|award|Grant|Award|No\\.|#)",
        "\\b(?:National\\s+Research\\s+Foundation|National\\s+Science\\s+Foundation|Institute\\s+of\\s+Information\\s+(?:&|and)\\s+Communications\\s+Technology)\\b"
      ]
    },

    {
      "id": "affiliation",
      "family": "anonymity",
      "scope": "both",
      "level": "warn",
      "caseSensitive": true,
      "label": { "en": "Institution name", "ko": "기관 이름" },
      "advice": {
        "en": "Check whose institution this is. Yours has to go; someone else's — a cited system, a study site you may name — is fine.",
        "ko": "어느 기관인지 보세요. 저자 소속이면 지워야 하고, 인용한 시스템이나 밝혀도 되는 조사 대상이면 괜찮습니다."
      },
      "patterns": [
        "\\b(?:[A-Z][A-Za-z'\\u2019\\-]+\\s+){1,3}(?:University|Universit\\u00e4t|Universiteit|Universit\\u00e9|Universit\\u00e0|Universidad|Universidade)\\b",
        "\\bUniversity\\s+(?:of|at|in)\\s+[A-Z][A-Za-z\\-]+(?:\\s+[A-Z][A-Za-z\\-]+)?",
        "\\b(?:[A-Z][A-Za-z'\\u2019\\-]+\\s+){1,3}(?:Institute\\s+of\\s+Technology|Polytechnic(?:\\s+University|\\s+Institute)?)\\b",
        "\\b[A-Z][A-Za-z'\\u2019\\-]+\\s+(?:College|Laborator(?:y|ies))\\b",
        "\\b(?:KAIST|POSTECH|UNIST|GIST|DGIST|KENTECH|SNU|Yonsei|Sungkyunkwan|Hanyang|Kyung\\s?Hee|Ewha|Sogang|Chung-?Ang|Konkuk|Sejong|Ajou|Inha|KIST|ETRI|KISTI)\\b",
        "\\b(?:MIT|Caltech|CMU|Carnegie\\s+Mellon|Stanford|Berkeley|UCLA|UCSD|UCSB|UIUC|Georgia\\s+Tech|Virginia\\s+Tech|Purdue|Cornell|Harvard|Princeton|Yale|Columbia|Northwestern|UT\\s+Austin|Texas\\s+A\\s?&\\s?M)\\b",
        "\\b(?:ETH\\s?Z(?:\\u00fc|u)rich|EPFL|TU\\s?(?:Delft|Munich|M\\u00fcnchen|Berlin|Wien|Darmstadt|Dresden|Graz|Eindhoven)|KTH|DTU|Chalmers|Aalto|NTNU|Max\\s+Planck|Fraunhofer|INRIA|CNRS|Sorbonne|Imperial\\s+College)\\b",
        "\\b(?:Tsinghua|Peking\\s+University|Fudan|Zhejiang\\s+University|Shanghai\\s+Jiao\\s?Tong|NUS|HKUST|CUHK|Waseda|Keio|RIKEN|AIST|NAIST|Tokyo\\s+Tech)\\b",
        "\\b(?:Google|Microsoft|Meta|Facebook|Apple|Adobe|Samsung|Naver|Kakao|IBM|NVIDIA|Amazon|Sony|Toyota|Honda|Bosch|Siemens|Huawei|Baidu|Tencent|Alibaba|ByteDance|Snap|Spotify|Netflix|Autodesk|Unity|Disney)\\s+(?:Research|Labs?|Laboratory|AI|DeepMind|Brain|Reality\\s+Labs?)\\b"
      ],
      "skip": [
        "\\b(?:University|College|Institute)\\s+students?\\b"
      ]
    },

    {
      "id": "irb",
      "family": "anonymity",
      "scope": "text",
      "level": "warn",
      "label": { "en": "Ethics approval", "ko": "IRB·연구윤리 승인" },
      "advice": {
        "en": "Saying the study was approved is expected and not flagged. Naming the board, or quoting the protocol number, is — both trace straight back to the institution.",
        "ko": "승인을 받았다고만 쓰는 것은 잡지 않습니다. 어느 위원회인지, 승인번호가 몇 번인지 쓰면 기관이 그대로 드러납니다."
      },
      "caseSensitive": true,
      "patterns": [
        "\\b(?:[A-Z][A-Za-z'\\u2019\\-]+[ \\t]+){1,4}(?:IRB|Institutional[ \\t]+Review[ \\t]+Board|Ethics[ \\t]+(?:Committee|Board|Review[ \\t]+Board))\\b",
        "\\b(?:IRB|Ethics|ethics)[ \\t]+(?:approval[ \\t]+)?(?:No\\.?|Number|ID|#|protocol)[ \\t]*[:#]?[ \\t]*[A-Z0-9][A-Z0-9./\\-]{2,}",
        "\\b(?:approval|protocol|IRB)[ \\t]+(?:No\\.?|Number|ID|#)[ \\t]*[:#]?[ \\t]*[A-Z0-9][A-Z0-9./\\-]{2,}",
        "\\b(?:ethics|Ethics)[ \\t]+(?:committee|Committee|board|Board)[ \\t]+(?:at|of)[ \\t]+(?:the[ \\t]+)?[A-Z]",
        {
          "re": "\\bapproved[ \\t]+by[ \\t]+(?:the[ \\t]+)?[A-Z][A-Za-z]+",
          "skip": ["\\bapproved[ \\t]+by[ \\t]+(?:the[ \\t]+)?(?:IRB|Institutional|Ethics|Research|Author|Anonymous|A[ \\t])"]
        }
      ]
    },

    {
      "id": "hosting",
      "family": "anonymity",
      "scope": "both",
      "level": "warn",
      "label": { "en": "Account-owned file link", "ko": "계정이 드러나는 파일 링크" },
      "advice": {
        "en": "These pages show the owning account to whoever opens them. Re-upload the material somewhere that does not, or leave it out of the submission.",
        "ko": "이런 페이지는 누르는 사람에게 소유 계정을 보여줍니다. 계정이 안 드러나는 곳에 다시 올리거나 심사본에서 빼세요."
      },
      "patterns": [
        "\\b(?:drive|docs|sites|colab\\.research)\\.google\\.com/[A-Za-z0-9/?=&._\\-]*",
        "\\b(?:www\\.)?dropbox\\.com/[A-Za-z0-9/?=&._\\-]*",
        "\\b[A-Za-z0-9\\-]*\\.?notion\\.(?:site|so)/[A-Za-z0-9/?=&._\\-]*",
        "\\b(?:www\\.)?youtube\\.com/(?:channel|c|user|@)[A-Za-z0-9/_\\-]*",
        "\\byoutu\\.be/[A-Za-z0-9_\\-]+",
        "\\b(?:www\\.)?vimeo\\.com/[0-9]+",
        "\\b(?:www\\.)?figshare\\.com/[A-Za-z0-9/?=&._\\-]*",
        "\\bzenodo\\.org/record[s]?/[0-9]+",
        "\\b(?:www\\.)?flickr\\.com/photos/[A-Za-z0-9@_\\-]+",
        "\\bbox\\.com/[sv]/[A-Za-z0-9]+",
        "\\b(?:1drv\\.ms|onedrive\\.live\\.com)/[A-Za-z0-9/?=&._\\-]*"
      ]
    },

    {
      "id": "osf",
      "family": "anonymity",
      "scope": "both",
      "level": "warn",
      "label": { "en": "Non-anonymous OSF link", "ko": "익명화 안 된 OSF 링크" },
      "advice": {
        "en": "A plain osf.io project page lists its contributors. Create an anonymised view-only link (…/?view_only=…) for review.",
        "ko": "그냥 osf.io 프로젝트 페이지에는 참여자 이름이 그대로 뜹니다. 심사용으로 익명 보기 링크(…/?view_only=…)를 만드세요."
      },
      "patterns": [
        "\\bosf\\.io/[A-Za-z0-9/?=&._\\-]+",
        "\\baspredicted\\.org/[A-Za-z0-9/?=&._\\-]+"
      ],
      "skip": ["view_only="]
    },

    {
      "id": "ourplace",
      "family": "anonymity",
      "scope": "text",
      "level": "info",
      "label": { "en": "\"our institution\"", "ko": "\"우리 기관\" 표현" },
      "advice": {
        "en": "Usually allowed. Read the sentence around it — the city, the participant pool, or the department often gets named right next to it.",
        "ko": "보통은 허용됩니다. 다만 앞뒤 문장에 도시 이름·참여자 모집처·학과 이름이 붙어 있는지 보세요."
      },
      "patterns": [
        "\\b(?:our|my)\\s+(?:university|institution|institute|lab|laboratory|department|campus|company|organi[sz]ation|school|faculty|research\\s+group)\\b",
        "\\bat\\s+(?:a|our)\\s+(?:large\\s+|major\\s+|local\\s+)?(?:university|research\\s+institution)\\s+in\\s+[A-Z]"
      ]
    },

    {
      "id": "brokenref",
      "family": "draft",
      "scope": "text",
      "level": "error",
      "label": { "en": "Broken cross-reference", "ko": "깨진 참조" },
      "advice": {
        "en": "LaTeX prints ?? when \\ref points at a label that does not exist. Re-run until the references settle.",
        "ko": "\\ref 가 없는 label 을 가리키면 LaTeX 이 ?? 를 찍습니다. 참조가 안정될 때까지 다시 컴파일하세요."
      },
      "patterns": [
        "\\b(?:Fig(?:ure)?s?|Table|Tab|Section|Sec|Appendix|App|Equation|Eq|Algorithm|Alg|Listing|Chapter)\\.?\\s*\\?\\?",
        "\\?\\?\\s*(?:and|,)\\s*\\?\\?",
        "\\[\\s*\\?\\s*\\]",
        "\\(\\s*\\?\\?\\s*\\)"
      ]
    },

    {
      "id": "todo",
      "family": "draft",
      "scope": "both",
      "level": "error",
      "caseSensitive": true,
      "label": { "en": "Note to self", "ko": "나한테 남긴 메모" },
      "advice": {
        "en": "A marker you left for yourself is still printed in the PDF.",
        "ko": "자기한테 남겨둔 표시가 PDF에 그대로 찍혀 있습니다."
      },
      "patterns": [
        "\\bTODO\\b",
        "\\bFIXME\\b",
        "\\bTBD\\b",
        "\\bXXX+\\b",
        "\\\\todo\\{",
        "\\[\\s*citation\\s+needed\\s*\\]",
        "\\bLorem\\s+ipsum\\b",
        "\\bplaceholder\\s+text\\b",
        "\\bREWRITE\\b",
        "\\bCITE\\b"
      ],
      "skip": ["\\bTBD\\b\\s*\\(", "^XXX+$"]
    },

    {
      "id": "template",
      "family": "draft",
      "scope": "both",
      "level": "info",
      "label": { "en": "Template placeholder", "ko": "템플릿 자리표시" },
      "advice": {
        "en": "Sample text that ships with the ACM template. Normal in a submission — you have no DOI or ISBN yet, and the rights text comes later. This is a camera-ready to-do, not a submission problem.",
        "ko": "ACM 템플릿에 예시로 들어 있는 문구입니다. 심사본에서는 정상입니다 — 아직 DOI도 ISBN도 없으니까요. 최종본 만들 때 채우면 되는 자리이지, 제출을 막을 것은 아닙니다."
      },
      "patterns": [
        "\\bWoodstock\\b",
        "\\bconference'1[0-9]\\b",
        "\\b978-[01]-4503-XXXX-X\\b",
        "\\bXXXXXXX\\.XXXXXXX\\b",
        "\\b10\\.1145/nnnnnnn\\.nnnnnnn\\b",
        "\\bTrovato\\b",
        "\\bG\\.\\s*K\\.\\s*M\\.\\s*Tobin\\b",
        "\\bJune\\s+0?3[\\u2013\\u2014\\-]{1,2}0?5,\\s*2018\\b",
        "\\bThe\\s+Thirty-?Seventh\\s+Conference\\b",
        "\\bYour\\s+Institution\\b",
        "\\byour\\s+institution\\s+name\\b",
        "\\bacmart\\s+sample\\b"
      ]
    },

    {
      "id": "dupword",
      "family": "draft",
      "scope": "text",
      "level": "info",
      "caseSensitive": true,
      "label": { "en": "Doubled word", "ko": "겹친 낱말" },
      "advice": {
        "en": "The same word twice in a row. Usually a leftover from an edit.",
        "ko": "같은 낱말이 잇달아 두 번 나옵니다. 대개 고쳐 쓰다 남은 것입니다."
      },
      "patterns": [
        "\\b([a-z]{3,})[ \\t]+\\1\\b(?![ \\t]*[0-9])"
      ],
      "skip": [
        "^(?:that|had|very|long|far)[ \\t]"
      ]
    }
  ]
}
