{-# LANGUAGE OverloadedStrings #-}
module Network.Mime
    ( -- * Lookups
      mimeByExt
    , defaultMimeLookup
      -- * Defaults
    , defaultMimeType
    , defaultMimeMap
      -- * Utilities
    , fileNameExtensions
      -- * Types
    , FileName
    , MimeType
    , MimeMap
    , Extension
    ) where

import Data.Text (Text)
import qualified Data.Text as T
import Data.ByteString (ByteString)
import Data.ByteString.Char8 ()
import qualified Data.Map as Map

-- | Maps extensions to mime types.
type MimeMap = Map.Map Extension MimeType

-- | The filename component of a filepath, leaving off the directory but
-- keeping all extensions.
type FileName = Text

-- | Individual mime type for be served over the wire.
type MimeType = ByteString

-- | Look up a mime type from the given mime map and default mime type.
mimeByExt :: MimeMap
          -> MimeType -- ^ default mime type
          -> FileName
          -> MimeType
mimeByExt mm def =
    go . fileNameExtensions
  where
    go [] = def
    go (e:es) =
        case Map.lookup e mm of
            Nothing -> go es
            Just mt -> mt

-- | @mimeByExt@ applied to @defaultMimeType@ and @defaultMimeMap@.
defaultMimeLookup :: FileName -> MimeType
defaultMimeLookup = mimeByExt defaultMimeMap defaultMimeType

-- | Get a list of all of the file name extensions.
--
-- > fileNameExtensions "foo.tar.gz" == ["tar.gz", "gz"]
fileNameExtensions :: FileName -> [Extension]
fileNameExtensions =
    go . T.toLower . dropToExt
  where
    dropToExt = T.drop 1 . T.dropWhile (/= '.')

    go e
        | T.null e = []
        | otherwise = e : go next
      where
        next = dropToExt e

-- | Path extension. May include multiple components, e.g. tar.gz
type Extension = Text

-- | The default fallback mime type \"application/octet-stream\".
defaultMimeType :: MimeType
defaultMimeType = "application/octet-stream"

-- | A default mapping from filename extension to mime type.
--
-- Generated from the Apache and nginx mime.types files.
defaultMimeMap :: MimeMap
defaultMimeMap = Map.fromAscList [
      ("123", "application/vnd.lotus-1-2-3")
    , ("3dml", "text/vnd.in3d.3dml")
    , ("3ds", "image/x-3ds")
    , ("3g2", "video/3gpp2")
    , ("3gp", "video/3gpp")
    , ("3gpp", "video/3gpp")
    , ("7z", "application/x-7z-compressed")
    , ("aab", "application/x-authorware-bin")
    , ("aac", "audio/x-aac")
    , ("aam", "application/x-authorware-map")
    , ("aas", "application/x-authorware-seg")
    , ("abw", "application/x-abiword")
    , ("ac", "application/pkix-attr-cert")
    , ("acc", "application/vnd.americandynamics.acc")
    , ("ace", "application/x-ace-compressed")
    , ("acu", "application/vnd.acucobol")
    , ("acutc", "application/vnd.acucorp")
    , ("adp", "audio/adpcm")
    , ("aep", "application/vnd.audiograph")
    , ("afm", "application/x-font-type1")
    , ("afp", "application/vnd.ibm.modcap")
    , ("ahead", "application/vnd.ahead.space")
    , ("ai", "application/postscript")
    , ("aif", "audio/x-aiff")
    , ("aifc", "audio/x-aiff")
    , ("aiff", "audio/x-aiff")
    , ("air", "application/vnd.adobe.air-application-installer-package+zip")
    , ("ait", "application/vnd.dvb.ait")
    , ("ami", "application/vnd.amiga.ami")
    , ("apk", "application/vnd.android.package-archive")
    , ("appcache", "text/cache-manifest")
    , ("application", "application/x-ms-application")
    , ("apr", "application/vnd.lotus-approach")
    , ("arc", "application/x-freearc")
    , ("asc", "text/plain")
    , ("asf", "video/x-ms-asf")
    , ("asm", "text/x-asm")
    , ("aso", "application/vnd.accpac.simply.aso")
    , ("asx", "video/x-ms-asf")
    , ("atc", "application/vnd.acucorp")
    , ("atom", "application/atom+xml")
    , ("atomcat", "application/atomcat+xml")
    , ("atomsvc", "application/atomsvc+xml")
    , ("atx", "application/vnd.antix.game-component")
    , ("au", "audio/basic")
    , ("avi", "video/x-msvideo")
    , ("aw", "application/applixware")
    , ("azf", "application/vnd.airzip.filesecure.azf")
    , ("azs", "application/vnd.airzip.filesecure.azs")
    , ("azw", "application/vnd.amazon.ebook")
    , ("bat", "application/x-msdownload")
    , ("bcpio", "application/x-bcpio")
    , ("bdf", "application/x-font-bdf")
    , ("bdm", "application/vnd.syncml.dm+wbxml")
    , ("bed", "application/vnd.realvnc.bed")
    , ("bh2", "application/vnd.fujitsu.oasysprs")
    , ("bin", "application/octet-stream")
    , ("blb", "application/x-blorb")
    , ("blorb", "application/x-blorb")
    , ("bmi", "application/vnd.bmi")
    , ("bmp", "image/bmp")
    , ("book", "application/vnd.framemaker")
    , ("box", "application/vnd.previewsystems.box")
    , ("boz", "application/x-bzip2")
    , ("bpk", "application/octet-stream")
    , ("btif", "image/prs.btif")
    , ("bz", "application/x-bzip")
    , ("bz2", "application/x-bzip")
    , ("c", "text/plain")
    , ("c11amc", "application/vnd.cluetrust.cartomobile-config")
    , ("c11amz", "application/vnd.cluetrust.cartomobile-config-pkg")
    , ("c4d", "application/vnd.clonk.c4group")
    , ("c4f", "application/vnd.clonk.c4group")
    , ("c4g", "application/vnd.clonk.c4group")
    , ("c4p", "application/vnd.clonk.c4group")
    , ("c4u", "application/vnd.clonk.c4group")
    , ("cab", "application/vnd.ms-cab-compressed")
    , ("caf", "audio/x-caf")
    , ("cap", "application/vnd.tcpdump.pcap")
    , ("car", "application/vnd.curl.car")
    , ("cat", "application/vnd.ms-pki.seccat")
    , ("cb7", "application/x-cbr")
    , ("cba", "application/x-cbr")
    , ("cbr", "application/x-cbr")
    , ("cbt", "application/x-cbr")
    , ("cbz", "application/x-cbr")
    , ("cc", "text/x-c")
    , ("cco", "application/x-cocoa")
    , ("cct", "application/x-director")
    , ("ccxml", "application/ccxml+xml")
    , ("cdbcmsg", "application/vnd.contact.cmsg")
    , ("cdf", "application/x-netcdf")
    , ("cdkey", "application/vnd.mediastation.cdkey")
    , ("cdmia", "application/cdmi-capability")
    , ("cdmic", "application/cdmi-container")
    , ("cdmid", "application/cdmi-domain")
    , ("cdmio", "application/cdmi-object")
    , ("cdmiq", "application/cdmi-queue")
    , ("cdx", "chemical/x-cdx")
    , ("cdxml", "application/vnd.chemdraw+xml")
    , ("cdy", "application/vnd.cinderella")
    , ("cer", "application/pkix-cert")
    , ("cfs", "application/x-cfs-compressed")
    , ("cgm", "image/cgm")
    , ("chat", "application/x-chat")
    , ("chm", "application/vnd.ms-htmlhelp")
    , ("chrt", "application/vnd.kde.kchart")
    , ("cif", "chemical/x-cif")
    , ("cii", "application/vnd.anser-web-certificate-issue-initiation")
    , ("cil", "application/vnd.ms-artgalry")
    , ("cla", "application/vnd.claymore")
    , ("class", "application/java-vm")
    , ("clkk", "application/vnd.crick.clicker.keyboard")
    , ("clkp", "application/vnd.crick.clicker.palette")
    , ("clkt", "application/vnd.crick.clicker.template")
    , ("clkw", "application/vnd.crick.clicker.wordbank")
    , ("clkx", "application/vnd.crick.clicker")
    , ("clp", "application/x-msclip")
    , ("cmc", "application/vnd.cosmocaller")
    , ("cmdf", "chemical/x-cmdf")
    , ("cml", "chemical/x-cml")
    , ("cmp", "application/vnd.yellowriver-custom-menu")
    , ("cmx", "image/x-cmx")
    , ("cod", "application/vnd.rim.cod")
    , ("com", "application/x-msdownload")
    , ("conf", "text/plain")
    , ("cpio", "application/x-cpio")
    , ("cpp", "text/plain")
    , ("cpt", "application/mac-compactpro")
    , ("crd", "application/x-mscardfile")
    , ("crl", "application/pkix-crl")
    , ("crt", "application/x-x509-ca-cert")
    , ("cryptonote", "application/vnd.rig.cryptonote")
    , ("csh", "application/x-csh")
    , ("csml", "chemical/x-csml")
    , ("csp", "application/vnd.commonspace")
    , ("css", "text/css")
    , ("cst", "application/x-director")
    , ("csv", "text/csv")
    , ("cu", "application/cu-seeme")
    , ("curl", "text/vnd.curl")
    , ("cww", "application/prs.cww")
    , ("cxt", "application/x-director")
    , ("cxx", "text/plain")
    , ("dae", "model/vnd.collada+xml")
    , ("daf", "application/vnd.mobius.daf")
    , ("dart", "application/vnd.dart")
    , ("dataless", "application/vnd.fdsn.seed")
    , ("davmount", "application/davmount+xml")
    , ("dbk", "application/docbook+xml")
    , ("dcr", "application/x-director")
    , ("dcurl", "text/vnd.curl.dcurl")
    , ("dd2", "application/vnd.oma.dd2+xml")
    , ("ddd", "application/vnd.fujixerox.ddd")
    , ("deb", "application/x-debian-package")
    , ("def", "text/plain")
    , ("deploy", "application/octet-stream")
    , ("der", "application/x-x509-ca-cert")
    , ("dfac", "application/vnd.dreamfactory")
    , ("dgc", "application/x-dgc-compressed")
    , ("dic", "text/x-c")
    , ("dir", "application/x-director")
    , ("dis", "application/vnd.mobius.dis")
    , ("dist", "application/octet-stream")
    , ("distz", "application/octet-stream")
    , ("djv", "image/vnd.djvu")
    , ("djvu", "image/vnd.djvu")
    , ("dll", "application/x-msdownload")
    , ("dmg", "application/x-apple-diskimage")
    , ("dmp", "application/vnd.tcpdump.pcap")
    , ("dms", "application/octet-stream")
    , ("dna", "application/vnd.dna")
    , ("doc", "application/msword")
    , ("docm", "application/vnd.ms-word.document.macroenabled.12")
    , ("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
    , ("dot", "application/msword")
    , ("dotm", "application/vnd.ms-word.template.macroenabled.12")
    , ("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template")
    , ("dp", "application/vnd.osgi.dp")
    , ("dpg", "application/vnd.dpgraph")
    , ("dra", "audio/vnd.dra")
    , ("dsc", "text/prs.lines.tag")
    , ("dssc", "application/dssc+der")
    , ("dtb", "application/x-dtbook+xml")
    , ("dtd", "application/xml-dtd")
    , ("dts", "audio/vnd.dts")
    , ("dtshd", "audio/vnd.dts.hd")
    , ("dump", "application/octet-stream")
    , ("dvb", "video/vnd.dvb.file")
    , ("dvi", "application/x-dvi")
    , ("dwf", "model/vnd.dwf")
    , ("dwg", "image/vnd.dwg")
    , ("dxf", "image/vnd.dxf")
    , ("dxp", "application/vnd.spotfire.dxp")
    , ("dxr", "application/x-director")
    , ("ear", "application/java-archive")
    , ("ecelp4800", "audio/vnd.nuera.ecelp4800")
    , ("ecelp7470", "audio/vnd.nuera.ecelp7470")
    , ("ecelp9600", "audio/vnd.nuera.ecelp9600")
    , ("ecma", "application/ecmascript")
    , ("edm", "application/vnd.novadigm.edm")
    , ("edx", "application/vnd.novadigm.edx")
    , ("efif", "application/vnd.picsel")
    , ("ei6", "application/vnd.pg.osasli")
    , ("elc", "application/octet-stream")
    , ("emf", "application/x-msmetafile")
    , ("eml", "message/rfc822")
    , ("emma", "application/emma+xml")
    , ("emz", "application/x-msmetafile")
    , ("eol", "audio/vnd.digital-winds")
    , ("eot", "application/vnd.ms-fontobject")
    , ("eps", "application/postscript")
    , ("epub", "application/epub+zip")
    , ("es3", "application/vnd.eszigno3+xml")
    , ("esa", "application/vnd.osgi.subsystem")
    , ("esf", "application/vnd.epson.esf")
    , ("et3", "application/vnd.eszigno3+xml")
    , ("etx", "text/x-setext")
    , ("eva", "application/x-eva")
    , ("evy", "application/x-envoy")
    , ("exe", "application/x-msdownload")
    , ("exi", "application/exi")
    , ("ext", "application/vnd.novadigm.ext")
    , ("ez", "application/andrew-inset")
    , ("ez2", "application/vnd.ezpix-album")
    , ("ez3", "application/vnd.ezpix-package")
    , ("f", "text/x-fortran")
    , ("f4v", "video/x-f4v")
    , ("f77", "text/x-fortran")
    , ("f90", "text/x-fortran")
    , ("fbs", "image/vnd.fastbidsheet")
    , ("fcdt", "application/vnd.adobe.formscentral.fcdt")
    , ("fcs", "application/vnd.isac.fcs")
    , ("fdf", "application/vnd.fdf")
    , ("fe_launch", "application/vnd.denovo.fcselayout-link")
    , ("fg5", "application/vnd.fujitsu.oasysgp")
    , ("fgd", "application/x-director")
    , ("fh", "image/x-freehand")
    , ("fh4", "image/x-freehand")
    , ("fh5", "image/x-freehand")
    , ("fh7", "image/x-freehand")
    , ("fhc", "image/x-freehand")
    , ("fig", "application/x-xfig")
    , ("flac", "audio/x-flac")
    , ("fli", "video/x-fli")
    , ("flo", "application/vnd.micrografx.flo")
    , ("flv", "video/x-flv")
    , ("flw", "application/vnd.kde.kivio")
    , ("flx", "text/vnd.fmi.flexstor")
    , ("fly", "text/vnd.fly")
    , ("fm", "application/vnd.framemaker")
    , ("fnc", "application/vnd.frogans.fnc")
    , ("for", "text/x-fortran")
    , ("fpx", "image/vnd.fpx")
    , ("frame", "application/vnd.framemaker")
    , ("fsc", "application/vnd.fsc.weblaunch")
    , ("fst", "image/vnd.fst")
    , ("ftc", "application/vnd.fluxtime.clip")
    , ("fti", "application/vnd.anser-web-funds-transfer-initiation")
    , ("fvt", "video/vnd.fvt")
    , ("fxp", "application/vnd.adobe.fxp")
    , ("fxpl", "application/vnd.adobe.fxp")
    , ("fzs", "application/vnd.fuzzysheet")
    , ("g2w", "application/vnd.geoplan")
    , ("g3", "image/g3fax")
    , ("g3w", "application/vnd.geospace")
    , ("gac", "application/vnd.groove-account")
    , ("gam", "application/x-tads")
    , ("gbr", "application/rpki-ghostbusters")
    , ("gca", "application/x-gca-compressed")
    , ("gdl", "model/vnd.gdl")
    , ("geo", "application/vnd.dynageo")
    , ("gex", "application/vnd.geometry-explorer")
    , ("ggb", "application/vnd.geogebra.file")
    , ("ggt", "application/vnd.geogebra.tool")
    , ("ghf", "application/vnd.groove-help")
    , ("gif", "image/gif")
    , ("gim", "application/vnd.groove-identity-message")
    , ("gml", "application/gml+xml")
    , ("gmx", "application/vnd.gmx")
    , ("gnumeric", "application/x-gnumeric")
    , ("gph", "application/vnd.flographit")
    , ("gpx", "application/gpx+xml")
    , ("gqf", "application/vnd.grafeq")
    , ("gqs", "application/vnd.grafeq")
    , ("gram", "application/srgs")
    , ("gramps", "application/x-gramps-xml")
    , ("gre", "application/vnd.geometry-explorer")
    , ("grv", "application/vnd.groove-injector")
    , ("grxml", "application/srgs+xml")
    , ("gsf", "application/x-font-ghostscript")
    , ("gtar", "application/x-gtar")
    , ("gtm", "application/vnd.groove-tool-message")
    , ("gtw", "model/vnd.gtw")
    , ("gv", "text/vnd.graphviz")
    , ("gxf", "application/gxf")
    , ("gxt", "application/vnd.geonext")
    , ("gz", "application/x-gzip")
    , ("h", "text/x-c")
    , ("h261", "video/h261")
    , ("h263", "video/h263")
    , ("h264", "video/h264")
    , ("hal", "application/vnd.hal+xml")
    , ("hbci", "application/vnd.hbci")
    , ("hdf", "application/x-hdf")
    , ("hh", "text/x-c")
    , ("hlp", "application/winhlp")
    , ("hpgl", "application/vnd.hp-hpgl")
    , ("hpid", "application/vnd.hp-hpid")
    , ("hps", "application/vnd.hp-hps")
    , ("hqx", "application/mac-binhex40")
    , ("hs", "text/plain")
    , ("htc", "text/x-component")
    , ("htke", "application/vnd.kenameaapp")
    , ("htm", "text/html")
    , ("html", "text/html")
    , ("hvd", "application/vnd.yamaha.hv-dic")
    , ("hvp", "application/vnd.yamaha.hv-voice")
    , ("hvs", "application/vnd.yamaha.hv-script")
    , ("i2g", "application/vnd.intergeo")
    , ("icc", "application/vnd.iccprofile")
    , ("ice", "x-conference/x-cooltalk")
    , ("icm", "application/vnd.iccprofile")
    , ("ico", "image/vnd.microsoft.icon")
    , ("ics", "text/calendar")
    , ("ief", "image/ief")
    , ("ifb", "text/calendar")
    , ("ifm", "application/vnd.shana.informed.formdata")
    , ("iges", "model/iges")
    , ("igl", "application/vnd.igloader")
    , ("igm", "application/vnd.insors.igm")
    , ("igs", "model/iges")
    , ("igx", "application/vnd.micrografx.igx")
    , ("iif", "application/vnd.shana.informed.interchange")
    , ("img", "application/octet-stream")
    , ("imp", "application/vnd.accpac.simply.imp")
    , ("ims", "application/vnd.ms-ims")
    , ("in", "text/plain")
    , ("ink", "application/inkml+xml")
    , ("inkml", "application/inkml+xml")
    , ("install", "application/x-install-instructions")
    , ("iota", "application/vnd.astraea-software.iota")
    , ("ipfix", "application/ipfix")
    , ("ipk", "application/vnd.shana.informed.package")
    , ("irm", "application/vnd.ibm.rights-management")
    , ("irp", "application/vnd.irepository.package+xml")
    , ("iso", "application/x-iso9660-image")
    , ("itp", "application/vnd.shana.informed.formtemplate")
    , ("ivp", "application/vnd.immervision-ivp")
    , ("ivu", "application/vnd.immervision-ivu")
    , ("jad", "text/vnd.sun.j2me.app-descriptor")
    , ("jam", "application/vnd.jam")
    , ("jar", "application/java-archive")
    , ("jardiff", "application/x-java-archive-diff")
    , ("java", "text/x-java-source")
    , ("jisp", "application/vnd.jisp")
    , ("jlt", "application/vnd.hp-jlyt")
    , ("jng", "image/x-jng")
    , ("jnlp", "application/x-java-jnlp-file")
    , ("joda", "application/vnd.joost.joda-archive")
    , ("jpe", "image/jpeg")
    , ("jpeg", "image/jpeg")
    , ("jpg", "image/jpeg")
    , ("jpgm", "video/jpm")
    , ("jpgv", "video/jpeg")
    , ("jpm", "video/jpm")
    , ("js", "application/javascript")
    , ("json", "application/json")
    , ("jsonml", "application/jsonml+json")
    , ("kar", "audio/midi")
    , ("karbon", "application/vnd.kde.karbon")
    , ("kfo", "application/vnd.kde.kformula")
    , ("kia", "application/vnd.kidspiration")
    , ("kml", "application/vnd.google-earth.kml+xml")
    , ("kmz", "application/vnd.google-earth.kmz")
    , ("kne", "application/vnd.kinar")
    , ("knp", "application/vnd.kinar")
    , ("kon", "application/vnd.kde.kontour")
    , ("kpr", "application/vnd.kde.kpresenter")
    , ("kpt", "application/vnd.kde.kpresenter")
    , ("kpxx", "application/vnd.ds-keypoint")
    , ("ksp", "application/vnd.kde.kspread")
    , ("ktr", "application/vnd.kahootz")
    , ("ktx", "image/ktx")
    , ("ktz", "application/vnd.kahootz")
    , ("kwd", "application/vnd.kde.kword")
    , ("kwt", "application/vnd.kde.kword")
    , ("lasxml", "application/vnd.las.las+xml")
    , ("latex", "application/x-latex")
    , ("lbd", "application/vnd.llamagraphics.life-balance.desktop")
    , ("lbe", "application/vnd.llamagraphics.life-balance.exchange+xml")
    , ("les", "application/vnd.hhe.lesson-player")

    -- Added after deliberation in PR (https://github.com/yesodweb/wai/pull/534)
    -- Accepted mainly because of StackOverflow (http://stackoverflow.com/questions/7319555/how-to-add-less-to-iis-7-0)
    , ("less", "text/css")

    , ("lha", "application/x-lzh-compressed")
    , ("link66", "application/vnd.route66.link66+xml")
    , ("list", "text/plain")
    , ("list3820", "application/vnd.ibm.modcap")
    , ("listafp", "application/vnd.ibm.modcap")
    , ("lnk", "application/x-ms-shortcut")
    , ("log", "text/plain")
    , ("lostxml", "application/lost+xml")
    , ("lrf", "application/octet-stream")
    , ("lrm", "application/vnd.ms-lrm")
    , ("ltf", "application/vnd.frogans.ltf")
    , ("lvp", "audio/vnd.lucent.voice")
    , ("lwp", "application/vnd.lotus-wordpro")
    , ("lzh", "application/x-lzh-compressed")
    , ("m13", "application/x-msmediaview")
    , ("m14", "application/x-msmediaview")
    , ("m1v", "video/mpeg")
    , ("m21", "application/mp21")
    , ("m2a", "audio/mpeg")
    , ("m2v", "video/mpeg")
    , ("m3a", "audio/mpeg")
    , ("m3u", "audio/x-mpegurl")
    , ("m3u8", "application/vnd.apple.mpegurl")
    , ("m4a", "audio/x-m4a")
    , ("m4u", "video/vnd.mpegurl")
    , ("m4v", "video/x-m4v")
    , ("ma", "application/mathematica")
    , ("mads", "application/mads+xml")
    , ("mag", "application/vnd.ecowin.chart")
    , ("maker", "application/vnd.framemaker")
    , ("man", "text/troff")
    , ("manifest", "text/cache-manifest")
    , ("mar", "application/octet-stream")
    , ("mathml", "application/mathml+xml")
    , ("mb", "application/mathematica")
    , ("mbk", "application/vnd.mobius.mbk")
    , ("mbox", "application/mbox")
    , ("mc1", "application/vnd.medcalcdata")
    , ("mcd", "application/vnd.mcd")
    , ("mcurl", "text/vnd.curl.mcurl")
    , ("mdb", "application/x-msaccess")
    , ("mdi", "image/vnd.ms-modi")
    , ("me", "text/troff")
    , ("mesh", "model/mesh")
    , ("meta4", "application/metalink4+xml")
    , ("metalink", "application/metalink+xml")
    , ("mets", "application/mets+xml")
    , ("mfm", "application/vnd.mfmp")
    , ("mft", "application/rpki-manifest")
    , ("mgp", "application/vnd.osgeo.mapguide.package")
    , ("mgz", "application/vnd.proteus.magazine")
    , ("mid", "audio/midi")
    , ("midi", "audio/midi")
    , ("mie", "application/x-mie")
    , ("mif", "application/vnd.mif")
    , ("mime", "message/rfc822")
    , ("mj2", "video/mj2")
    , ("mjp2", "video/mj2")
    , ("mjs", "application/javascript")
    , ("mk3d", "video/x-matroska")
    , ("mka", "audio/x-matroska")
    , ("mks", "video/x-matroska")
    , ("mkv", "video/x-matroska")
    , ("mlp", "application/vnd.dolby.mlp")
    , ("mmd", "application/vnd.chipnuts.karaoke-mmd")
    , ("mmf", "application/vnd.smaf")
    , ("mml", "text/mathml")
    , ("mmr", "image/vnd.fujixerox.edmics-mmr")
    , ("mng", "video/x-mng")
    , ("mny", "application/x-msmoney")
    , ("mobi", "application/x-mobipocket-ebook")
    , ("mods", "application/mods+xml")
    , ("mov", "video/quicktime")
    , ("movie", "video/x-sgi-movie")
    , ("mp2", "audio/mpeg")
    , ("mp21", "application/mp21")
    , ("mp2a", "audio/mpeg")
    , ("mp3", "audio/mpeg")
    , ("mp4", "video/mp4")
    , ("mp4a", "audio/mp4")
    , ("mp4s", "application/mp4")
    , ("mp4v", "video/mp4")
    , ("mpc", "application/vnd.mophun.certificate")
    , ("mpe", "video/mpeg")
    , ("mpeg", "video/mpeg")
    , ("mpg", "video/mpeg")
    , ("mpg4", "video/mp4")
    , ("mpga", "audio/mpeg")
    , ("mpkg", "application/vnd.apple.installer+xml")
    , ("mpm", "application/vnd.blueice.multipass")
    , ("mpn", "application/vnd.mophun.application")
    , ("mpp", "application/vnd.ms-project")
    , ("mpt", "application/vnd.ms-project")
    , ("mpy", "application/vnd.ibm.minipay")
    , ("mqy", "application/vnd.mobius.mqy")
    , ("mrc", "application/marc")
    , ("mrcx", "application/marcxml+xml")
    , ("ms", "text/troff")
    , ("mscml", "application/mediaservercontrol+xml")
    , ("mseed", "application/vnd.fdsn.mseed")
    , ("mseq", "application/vnd.mseq")
    , ("msf", "application/vnd.epson.msf")
    , ("msh", "model/mesh")
    , ("msi", "application/x-msdownload")
    , ("msl", "application/vnd.mobius.msl")
    , ("msm", "application/octet-stream")
    , ("msp", "application/octet-stream")
    , ("msty", "application/vnd.muvee.style")
    , ("mts", "model/vnd.mts")
    , ("mus", "application/vnd.musician")
    , ("musicxml", "application/vnd.recordare.musicxml+xml")
    , ("mvb", "application/x-msmediaview")
    , ("mwf", "application/vnd.mfer")
    , ("mxf", "application/mxf")
    , ("mxl", "application/vnd.recordare.musicxml")
    , ("mxml", "application/xv+xml")
    , ("mxs", "application/vnd.triscape.mxs")
    , ("mxu", "video/vnd.mpegurl")
    , ("n-gage", "application/vnd.nokia.n-gage.symbian.install")
    , ("n3", "text/n3")
    , ("nb", "application/mathematica")
    , ("nbp", "application/vnd.wolfram.player")
    , ("nc", "application/x-netcdf")
    , ("ncx", "application/x-dtbncx+xml")
    , ("nfo", "text/x-nfo")
    , ("ngdat", "application/vnd.nokia.n-gage.data")
    , ("nitf", "application/vnd.nitf")
    , ("nlu", "application/vnd.neurolanguage.nlu")
    , ("nml", "application/vnd.enliven")
    , ("nnd", "application/vnd.noblenet-directory")
    , ("nns", "application/vnd.noblenet-sealer")
    , ("nnw", "application/vnd.noblenet-web")
    , ("npx", "image/vnd.net-fpx")
    , ("nsc", "application/x-conference")
    , ("nsf", "application/vnd.lotus-notes")
    , ("ntf", "application/vnd.nitf")
    , ("nzb", "application/x-nzb")
    , ("oa2", "application/vnd.fujitsu.oasys2")
    , ("oa3", "application/vnd.fujitsu.oasys3")
    , ("oas", "application/vnd.fujitsu.oasys")
    , ("obd", "application/x-msbinder")
    , ("obj", "application/x-tgif")
    , ("oda", "application/oda")
    , ("odb", "application/vnd.oasis.opendocument.database")
    , ("odc", "application/vnd.oasis.opendocument.chart")
    , ("odf", "application/vnd.oasis.opendocument.formula")
    , ("odft", "application/vnd.oasis.opendocument.formula-template")
    , ("odg", "application/vnd.oasis.opendocument.graphics")
    , ("odi", "application/vnd.oasis.opendocument.image")
    , ("odm", "application/vnd.oasis.opendocument.text-master")
    , ("odp", "application/vnd.oasis.opendocument.presentation")
    , ("ods", "application/vnd.oasis.opendocument.spreadsheet")
    , ("odt", "application/vnd.oasis.opendocument.text")
    , ("oga", "audio/ogg")
    , ("ogg", "audio/ogg")
    , ("ogv", "video/ogg")
    , ("ogx", "application/ogg")
    , ("omdoc", "application/omdoc+xml")
    , ("onepkg", "application/onenote")
    , ("onetmp", "application/onenote")
    , ("onetoc", "application/onenote")
    , ("onetoc2", "application/onenote")
    , ("opf", "application/oebps-package+xml")
    , ("opml", "text/x-opml")
    , ("oprc", "application/vnd.palm")
    , ("org", "application/vnd.lotus-organizer")
    , ("osf", "application/vnd.yamaha.openscoreformat")
    , ("osfpvg", "application/vnd.yamaha.openscoreformat.osfpvg+xml")
    , ("otc", "application/vnd.oasis.opendocument.chart-template")
    , ("otf", "application/x-font-otf")
    , ("otg", "application/vnd.oasis.opendocument.graphics-template")
    , ("oth", "application/vnd.oasis.opendocument.text-web")
    , ("oti", "application/vnd.oasis.opendocument.image-template")
    , ("otp", "application/vnd.oasis.opendocument.presentation-template")
    , ("ots", "application/vnd.oasis.opendocument.spreadsheet-template")
    , ("ott", "application/vnd.oasis.opendocument.text-template")
    , ("oxps", "application/oxps")
    , ("oxt", "application/vnd.openofficeorg.extension")
    , ("p", "text/x-pascal")
    , ("p10", "application/pkcs10")
    , ("p12", "application/x-pkcs12")
    , ("p7b", "application/x-pkcs7-certificates")
    , ("p7c", "application/pkcs7-mime")
    , ("p7m", "application/pkcs7-mime")
    , ("p7r", "application/x-pkcs7-certreqresp")
    , ("p7s", "application/pkcs7-signature")
    , ("p8", "application/pkcs8")
    , ("pac", "application/x-ns-proxy-autoconfig")
    , ("pas", "text/x-pascal")
    , ("paw", "application/vnd.pawaafile")
    , ("pbd", "application/vnd.powerbuilder6")
    , ("pbm", "image/x-portable-bitmap")
    , ("pcap", "application/vnd.tcpdump.pcap")
    , ("pcf", "application/x-font-pcf")
    , ("pcl", "application/vnd.hp-pcl")
    , ("pclxl", "application/vnd.hp-pclxl")
    , ("pct", "image/x-pict")
    , ("pcurl", "application/vnd.curl.pcurl")
    , ("pcx", "image/x-pcx")
    , ("pdb", "application/vnd.palm")
    , ("pdf", "application/pdf")
    , ("pem", "application/x-x509-ca-cert")
    , ("pfa", "application/x-font-type1")
    , ("pfb", "application/x-font-type1")
    , ("pfm", "application/x-font-type1")
    , ("pfr", "application/font-tdpfr")
    , ("pfx", "application/x-pkcs12")
    , ("pgm", "image/x-portable-graymap")
    , ("pgn", "application/x-chess-pgn")
    , ("pgp", "application/pgp-encrypted")
    , ("pic", "image/x-pict")
    , ("pkg", "application/octet-stream")
    , ("pki", "application/pkixcmp")
    , ("pkipath", "application/pkix-pkipath")
    , ("pl", "application/x-perl")
    , ("plb", "application/vnd.3gpp.pic-bw-large")
    , ("plc", "application/vnd.mobius.plc")
    , ("plf", "application/vnd.pocketlearn")
    , ("pls", "application/pls+xml")
    , ("pm", "application/x-perl")
    , ("pml", "application/vnd.ctc-posml")
    , ("png", "image/png")
    , ("pnm", "image/x-portable-anymap")
    , ("portpkg", "application/vnd.macports.portpkg")
    , ("pot", "application/vnd.ms-powerpoint")
    , ("potm", "application/vnd.ms-powerpoint.template.macroenabled.12")
    , ("potx", "application/vnd.openxmlformats-officedocument.presentationml.template")
    , ("ppam", "application/vnd.ms-powerpoint.addin.macroenabled.12")
    , ("ppd", "application/vnd.cups-ppd")
    , ("ppm", "image/x-portable-pixmap")
    , ("pps", "application/vnd.ms-powerpoint")
    , ("ppsm", "application/vnd.ms-powerpoint.slideshow.macroenabled.12")
    , ("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow")
    , ("ppt", "application/vnd.ms-powerpoint")
    , ("pptm", "application/vnd.ms-powerpoint.presentation.macroenabled.12")
    , ("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation")
    , ("pqa", "application/vnd.palm")
    , ("prc", "application/x-mobipocket-ebook")
    , ("pre", "application/vnd.lotus-freelance")
    , ("prf", "application/pics-rules")
    , ("ps", "application/postscript")
    , ("psb", "application/vnd.3gpp.pic-bw-small")
    , ("psd", "image/vnd.adobe.photoshop")
    , ("psf", "application/x-font-linux-psf")
    , ("pskcxml", "application/pskc+xml")
    , ("ptid", "application/vnd.pvi.ptid1")
    , ("pub", "application/x-mspublisher")
    , ("pvb", "application/vnd.3gpp.pic-bw-var")
    , ("pwn", "application/vnd.3m.post-it-notes")
    , ("pya", "audio/vnd.ms-playready.media.pya")
    , ("pyv", "video/vnd.ms-playready.media.pyv")
    , ("qam", "application/vnd.epson.quickanime")
    , ("qbo", "application/vnd.intu.qbo")
    , ("qfx", "application/vnd.intu.qfx")
    , ("qps", "application/vnd.publishare-delta-tree")
    , ("qt", "video/quicktime")
    , ("qwd", "application/vnd.quark.quarkxpress")
    , ("qwt", "application/vnd.quark.quarkxpress")
    , ("qxb", "application/vnd.quark.quarkxpress")
    , ("qxd", "application/vnd.quark.quarkxpress")
    , ("qxl", "application/vnd.quark.quarkxpress")
    , ("qxt", "application/vnd.quark.quarkxpress")
    , ("ra", "audio/x-pn-realaudio")
    , ("ram", "audio/x-pn-realaudio")
    , ("rar", "application/x-rar-compressed")
    , ("ras", "image/x-cmu-raster")
    , ("rcprofile", "application/vnd.ipunplugged.rcprofile")
    , ("rdf", "application/rdf+xml")
    , ("rdz", "application/vnd.data-vision.rdz")
    , ("rep", "application/vnd.businessobjects")
    , ("res", "application/x-dtbresource+xml")
    , ("rgb", "image/x-rgb")
    , ("rif", "application/reginfo+xml")
    , ("rip", "audio/vnd.rip")
    , ("ris", "application/x-research-info-systems")
    , ("rl", "application/resource-lists+xml")
    , ("rlc", "image/vnd.fujixerox.edmics-rlc")
    , ("rld", "application/resource-lists-diff+xml")
    , ("rm", "application/vnd.rn-realmedia")
    , ("rmi", "audio/midi")
    , ("rmp", "audio/x-pn-realaudio-plugin")
    , ("rms", "application/vnd.jcp.javame.midlet-rms")
    , ("rmvb", "application/vnd.rn-realmedia-vbr")
    , ("rnc", "application/relax-ng-compact-syntax")
    , ("roa", "application/rpki-roa")
    , ("roff", "text/troff")
    , ("rp9", "application/vnd.cloanto.rp9")
    , ("rpm", "application/x-redhat-package-manager")
    , ("rpss", "application/vnd.nokia.radio-presets")
    , ("rpst", "application/vnd.nokia.radio-preset")
    , ("rq", "application/sparql-query")
    , ("rs", "application/rls-services+xml")
    , ("rsd", "application/rsd+xml")
    , ("rss", "application/rss+xml")
    , ("rtf", "application/rtf")
    , ("rtx", "text/richtext")
    , ("run", "application/x-makeself")
    , ("s", "text/x-asm")
    , ("s3m", "audio/s3m")
    , ("saf", "application/vnd.yamaha.smaf-audio")
    , ("sbml", "application/sbml+xml")
    , ("sc", "application/vnd.ibm.secure-container")
    , ("scd", "application/x-msschedule")
    , ("scm", "application/vnd.lotus-screencam")
    , ("scq", "application/scvp-cv-request")
    , ("scs", "application/scvp-cv-response")
    , ("scurl", "text/vnd.curl.scurl")
    , ("sda", "application/vnd.stardivision.draw")
    , ("sdc", "application/vnd.stardivision.calc")
    , ("sdd", "application/vnd.stardivision.impress")
    , ("sdkd", "application/vnd.solent.sdkm+xml")
    , ("sdkm", "application/vnd.solent.sdkm+xml")
    , ("sdp", "application/sdp")
    , ("sdw", "application/vnd.stardivision.writer")
    , ("sea", "application/x-sea")
    , ("see", "application/vnd.seemail")
    , ("seed", "application/vnd.fdsn.seed")
    , ("sema", "application/vnd.sema")
    , ("semd", "application/vnd.semd")
    , ("semf", "application/vnd.semf")
    , ("ser", "application/java-serialized-object")
    , ("setpay", "application/set-payment-initiation")
    , ("setreg", "application/set-registration-initiation")
    , ("sfd-hdstx", "application/vnd.hydrostatix.sof-data")
    , ("sfs", "application/vnd.spotfire.sfs")
    , ("sfv", "text/x-sfv")
    , ("sgi", "image/sgi")
    , ("sgl", "application/vnd.stardivision.writer-global")
    , ("sgm", "text/sgml")
    , ("sgml", "text/sgml")
    , ("sh", "application/x-sh")
    , ("shar", "application/x-shar")
    , ("shf", "application/shf+xml")
    , ("shtml", "text/html")
    , ("sid", "image/x-mrsid-image")
    , ("sig", "application/pgp-signature")
    , ("sil", "audio/silk")
    , ("silo", "model/mesh")
    , ("sis", "application/vnd.symbian.install")
    , ("sisx", "application/vnd.symbian.install")
    , ("sit", "application/x-stuffit")
    , ("sitx", "application/x-stuffitx")
    , ("skd", "application/vnd.koan")
    , ("skm", "application/vnd.koan")
    , ("skp", "application/vnd.koan")
    , ("skt", "application/vnd.koan")
    , ("sldm", "application/vnd.ms-powerpoint.slide.macroenabled.12")
    , ("sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide")
    , ("slt", "application/vnd.epson.salt")
    , ("sm", "application/vnd.stepmania.stepchart")
    , ("smf", "application/vnd.stardivision.math")
    , ("smi", "application/smil+xml")
    , ("smil", "application/smil+xml")
    , ("smv", "video/x-smv")
    , ("smzip", "application/vnd.stepmania.package")
    , ("snd", "audio/basic")
    , ("snf", "application/x-font-snf")
    , ("so", "application/octet-stream")
    , ("spc", "application/x-pkcs7-certificates")
    , ("spf", "application/vnd.yamaha.smaf-phrase")
    , ("spl", "application/futuresplash")
    , ("spot", "text/vnd.in3d.spot")
    , ("spp", "application/scvp-vp-response")
    , ("spq", "application/scvp-vp-request")
    , ("spx", "audio/ogg")
    , ("sql", "application/x-sql")
    , ("src", "application/x-wais-source")
    , ("srt", "application/x-subrip")
    , ("sru", "application/sru+xml")
    , ("srx", "application/sparql-results+xml")
    , ("ssdl", "application/ssdl+xml")
    , ("sse", "application/vnd.kodak-descriptor")
    , ("ssf", "application/vnd.epson.ssf")
    , ("ssml", "application/ssml+xml")
    , ("st", "application/vnd.sailingtracker.track")
    , ("stc", "application/vnd.sun.xml.calc.template")
    , ("std", "application/vnd.sun.xml.draw.template")
    , ("stf", "application/vnd.wt.stf")
    , ("sti", "application/vnd.sun.xml.impress.template")
    , ("stk", "application/hyperstudio")
    , ("stl", "application/vnd.ms-pki.stl")
    , ("str", "application/vnd.pg.format")
    , ("stw", "application/vnd.sun.xml.writer.template")
    , ("sub", "text/vnd.dvb.subtitle")
    , ("sus", "application/vnd.sus-calendar")
    , ("susp", "application/vnd.sus-calendar")
    , ("sv4cpio", "application/x-sv4cpio")
    , ("sv4crc", "application/x-sv4crc")
    , ("svc", "application/vnd.dvb.service")
    , ("svd", "application/vnd.svd")
    , ("svg", "image/svg+xml")
    , ("svgz", "image/svg+xml")
    , ("swa", "application/x-director")
    , ("swf", "application/x-shockwave-flash")
    , ("swi", "application/vnd.aristanetworks.swi")
    , ("sxc", "application/vnd.sun.xml.calc")
    , ("sxd", "application/vnd.sun.xml.draw")
    , ("sxg", "application/vnd.sun.xml.writer.global")
    , ("sxi", "application/vnd.sun.xml.impress")
    , ("sxm", "application/vnd.sun.xml.math")
    , ("sxw", "application/vnd.sun.xml.writer")
    , ("t", "text/troff")
    , ("t3", "application/x-t3vm-image")
    , ("taglet", "application/vnd.mynfc")
    , ("tao", "application/vnd.tao.intent-module-archive")
    , ("tar", "application/x-tar")
    , ("tar.bz2", "application/x-bzip-compressed-tar")
    , ("tar.gz", "application/x-tgz")
    , ("tbz", "application/x-bzip-compressed-tar")
    , ("tcap", "application/vnd.3gpp2.tcap")
    , ("tcl", "application/x-tcl")
    , ("teacher", "application/vnd.smart.teacher")
    , ("tei", "application/tei+xml")
    , ("teicorpus", "application/tei+xml")
    , ("tex", "application/x-tex")
    , ("texi", "application/x-texinfo")
    , ("texinfo", "application/x-texinfo")
    , ("text", "text/plain")
    , ("tfi", "application/thraud+xml")
    , ("tfm", "application/x-tex-tfm")
    , ("tga", "image/x-tga")
    , ("tgz", "application/x-tgz")
    , ("thmx", "application/vnd.ms-officetheme")
    , ("tif", "image/tiff")
    , ("tiff", "image/tiff")
    , ("tk", "application/x-tcl")
    , ("tmo", "application/vnd.tmobile-livetv")
    , ("torrent", "application/x-bittorrent")
    , ("tpl", "application/vnd.groove-tool-template")
    , ("tpt", "application/vnd.trid.tpt")
    , ("tr", "text/troff")
    , ("tra", "application/vnd.trueapp")
    , ("trm", "application/x-msterminal")
    , ("tsd", "application/timestamped-data")
    , ("tsv", "text/tab-separated-values")
    , ("ttc", "application/x-font-ttf")
    , ("ttf", "application/x-font-ttf")
    , ("ttl", "text/turtle")
    , ("twd", "application/vnd.simtech-mindmapper")
    , ("twds", "application/vnd.simtech-mindmapper")
    , ("txd", "application/vnd.genomatix.tuxedo")
    , ("txf", "application/vnd.mobius.txf")
    , ("txt", "text/plain")
    , ("u32", "application/x-authorware-bin")
    , ("udeb", "application/x-debian-package")
    , ("ufd", "application/vnd.ufdl")
    , ("ufdl", "application/vnd.ufdl")
    , ("ulx", "application/x-glulx")
    , ("umj", "application/vnd.umajin")
    , ("unityweb", "application/vnd.unity")
    , ("uoml", "application/vnd.uoml+xml")
    , ("uri", "text/uri-list")
    , ("uris", "text/uri-list")
    , ("urls", "text/uri-list")
    , ("ustar", "application/x-ustar")
    , ("utz", "application/vnd.uiq.theme")
    , ("uu", "text/x-uuencode")
    , ("uva", "audio/vnd.dece.audio")
    , ("uvd", "application/vnd.dece.data")
    , ("uvf", "application/vnd.dece.data")
    , ("uvg", "image/vnd.dece.graphic")
    , ("uvh", "video/vnd.dece.hd")
    , ("uvi", "image/vnd.dece.graphic")
    , ("uvm", "video/vnd.dece.mobile")
    , ("uvp", "video/vnd.dece.pd")
    , ("uvs", "video/vnd.dece.sd")
    , ("uvt", "application/vnd.dece.ttml+xml")
    , ("uvu", "video/vnd.uvvu.mp4")
    , ("uvv", "video/vnd.dece.video")
    , ("uvva", "audio/vnd.dece.audio")
    , ("uvvd", "application/vnd.dece.data")
    , ("uvvf", "application/vnd.dece.data")
    , ("uvvg", "image/vnd.dece.graphic")
    , ("uvvh", "video/vnd.dece.hd")
    , ("uvvi", "image/vnd.dece.graphic")
    , ("uvvm", "video/vnd.dece.mobile")
    , ("uvvp", "video/vnd.dece.pd")
    , ("uvvs", "video/vnd.dece.sd")
    , ("uvvt", "application/vnd.dece.ttml+xml")
    , ("uvvu", "video/vnd.uvvu.mp4")
    , ("uvvv", "video/vnd.dece.video")
    , ("uvvx", "application/vnd.dece.unspecified")
    , ("uvvz", "application/vnd.dece.zip")
    , ("uvx", "application/vnd.dece.unspecified")
    , ("uvz", "application/vnd.dece.zip")
    , ("vcard", "text/vcard")
    , ("vcd", "application/x-cdlink")
    , ("vcf", "text/x-vcard")
    , ("vcg", "application/vnd.groove-vcard")
    , ("vcs", "text/x-vcalendar")
    , ("vcx", "application/vnd.vcx")
    , ("vis", "application/vnd.visionary")
    , ("viv", "video/vnd.vivo")
    , ("vob", "video/x-ms-vob")
    , ("vor", "application/vnd.stardivision.writer")
    , ("vox", "application/x-authorware-bin")
    , ("vrml", "model/vrml")
    , ("vsd", "application/vnd.visio")
    , ("vsf", "application/vnd.vsf")
    , ("vss", "application/vnd.visio")
    , ("vst", "application/vnd.visio")
    , ("vsw", "application/vnd.visio")
    , ("vtu", "model/vnd.vtu")
    , ("vxml", "application/voicexml+xml")
    , ("w3d", "application/x-director")
    , ("wad", "application/x-doom")
    , ("war", "application/java-archive")
    , ("wasm", "application/wasm")
    , ("wav", "audio/x-wav")
    , ("wax", "audio/x-ms-wax")
    , ("wbmp", "image/vnd.wap.wbmp")
    , ("wbs", "application/vnd.criticaltools.wbs+xml")
    , ("wbxml", "application/vnd.wap.wbxml")
    , ("wcm", "application/vnd.ms-works")
    , ("wdb", "application/vnd.ms-works")
    , ("wdp", "image/vnd.ms-photo")
    , ("weba", "audio/webm")
    , ("webm", "video/webm")
    , ("webp", "image/webp")
    , ("wg", "application/vnd.pmi.widget")
    , ("wgt", "application/widget")
    , ("wks", "application/vnd.ms-works")
    , ("wm", "video/x-ms-wm")
    , ("wma", "audio/x-ms-wma")
    , ("wmd", "application/x-ms-wmd")
    , ("wmf", "application/x-msmetafile")
    , ("wml", "text/vnd.wap.wml")
    , ("wmlc", "application/vnd.wap.wmlc")
    , ("wmls", "text/vnd.wap.wmlscript")
    , ("wmlsc", "application/vnd.wap.wmlscriptc")
    , ("wmv", "video/x-ms-wmv")
    , ("wmx", "video/x-ms-wmx")
    , ("wmz", "application/x-msmetafile")
    , ("woff", "application/font-woff")
    , ("woff2", "application/font-woff2")
    , ("wpd", "application/vnd.wordperfect")
    , ("wpl", "application/vnd.ms-wpl")
    , ("wps", "application/vnd.ms-works")
    , ("wqd", "application/vnd.wqd")
    , ("wri", "application/x-mswrite")
    , ("wrl", "model/vrml")
    , ("wsdl", "application/wsdl+xml")
    , ("wspolicy", "application/wspolicy+xml")
    , ("wtb", "application/vnd.webturbo")
    , ("wvx", "video/x-ms-wvx")
    , ("x32", "application/x-authorware-bin")
    , ("x3d", "model/x3d+xml")
    , ("x3db", "model/x3d+binary")
    , ("x3dbz", "model/x3d+binary")
    , ("x3dv", "model/x3d+vrml")
    , ("x3dvz", "model/x3d+vrml")
    , ("x3dz", "model/x3d+xml")
    , ("xaml", "application/xaml+xml")
    , ("xap", "application/x-silverlight-app")
    , ("xar", "application/vnd.xara")
    , ("xbap", "application/x-ms-xbap")
    , ("xbd", "application/vnd.fujixerox.docuworks.binder")
    , ("xbm", "image/x-xbitmap")
    , ("xdf", "application/xcap-diff+xml")
    , ("xdm", "application/vnd.syncml.dm+xml")
    , ("xdp", "application/vnd.adobe.xdp+xml")
    , ("xdssc", "application/dssc+xml")
    , ("xdw", "application/vnd.fujixerox.docuworks")
    , ("xenc", "application/xenc+xml")
    , ("xer", "application/patch-ops-error+xml")
    , ("xfdf", "application/vnd.adobe.xfdf")
    , ("xfdl", "application/vnd.xfdl")
    , ("xht", "application/xhtml+xml")
    , ("xhtml", "application/xhtml+xml")
    , ("xhvml", "application/xv+xml")
    , ("xif", "image/vnd.xiff")
    , ("xla", "application/vnd.ms-excel")
    , ("xlam", "application/vnd.ms-excel.addin.macroenabled.12")
    , ("xlc", "application/vnd.ms-excel")
    , ("xlf", "application/x-xliff+xml")
    , ("xlm", "application/vnd.ms-excel")
    , ("xls", "application/vnd.ms-excel")
    , ("xlsb", "application/vnd.ms-excel.sheet.binary.macroenabled.12")
    , ("xlsm", "application/vnd.ms-excel.sheet.macroenabled.12")
    , ("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    , ("xlt", "application/vnd.ms-excel")
    , ("xltm", "application/vnd.ms-excel.template.macroenabled.12")
    , ("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template")
    , ("xlw", "application/vnd.ms-excel")
    , ("xm", "audio/xm")
    , ("xml", "text/xml")
    , ("xo", "application/vnd.olpc-sugar")
    , ("xop", "application/xop+xml")
    , ("xpi", "application/x-xpinstall")
    , ("xpl", "application/xproc+xml")
    , ("xpm", "image/x-xpixmap")
    , ("xpr", "application/vnd.is-xpr")
    , ("xps", "application/vnd.ms-xpsdocument")
    , ("xpw", "application/vnd.intercon.formnet")
    , ("xpx", "application/vnd.intercon.formnet")
    , ("xsl", "application/xml")
    , ("xslt", "application/xslt+xml")
    , ("xsm", "application/vnd.syncml+xml")
    , ("xspf", "application/xspf+xml")
    , ("xul", "application/vnd.mozilla.xul+xml")
    , ("xvm", "application/xv+xml")
    , ("xvml", "application/xv+xml")
    , ("xwd", "image/x-xwindowdump")
    , ("xyz", "chemical/x-xyz")
    , ("xz", "application/x-xz")
    , ("yang", "application/yang")
    , ("yin", "application/yin+xml")
    , ("z1", "application/x-zmachine")
    , ("z2", "application/x-zmachine")
    , ("z3", "application/x-zmachine")
    , ("z4", "application/x-zmachine")
    , ("z5", "application/x-zmachine")
    , ("z6", "application/x-zmachine")
    , ("z7", "application/x-zmachine")
    , ("z8", "application/x-zmachine")
    , ("zaz", "application/vnd.zzazz.deck+xml")
    , ("zip", "application/zip")
    , ("zir", "application/vnd.zul")
    , ("zirz", "application/vnd.zul")
    , ("zmm", "application/vnd.handheld-entertainment+xml")
    ]