CHANGES IN VERSION 1.31.5
-------------------------

  o Fixed readControls() building the control data.frame by positional
    assumption. It named the columns with colnames(ctl) <- c('G','R','col',
    'type') over a frame whose signal matrix has four columns, so
    Color_Channel and Type were cbind-ed past the end of that name vector and
    arrived unnamed, while `type` silently took a signal column. Downstream,
    controls(sdf)$Type was a vector of integers, so negControls()'s
    grep("negative", ...) matched nothing and detectionPnegEcdf() failed in
    ecdf() with "'x' must have 1 or more non-missing values" on EPIC and
    HM450 -- the platforms whose controls arrive through readControls() rather
    than as SigDF rows. The columns are now named explicitly.

  o qualityMask() gained `platform` and `mask` arguments, so a custom or
    combined-array mask can be supplied directly instead of being applied as a
    separate addMask() step after the fact.

CHANGES IN VERSION 1.31.4
-------------------------

  o Removed the Google Analytics tag from the vignette header. Vignette
    rendering no longer contacts an external host at build time, and installed
    vignettes no longer load a remote tracking script.

  o Documented sesame-cli, a standalone C implementation of the SeSAMe
    preprocessing workflow (IDAT to betas, QC, differential methylation, copy
    number) for large cohorts and pipeline deployment. Its betas agree with
    this package to within ~1e-3 worst case; the intentional divergences are
    documented in the sesame-cli NUMERICS.md. This package remains the
    reference implementation. See the README and
    https://zwdzwd.github.io/sesame-cli.

CHANGES IN VERSION 1.0.0
-------------------------

  o First submission of SeSAMe package.