Bluesky app fork with some witchin' additions 馃挮
at main 1314 lines 44 kB view raw
1import {type BskyAgent} from '@atproto/api' 2 3import {LINK_META_PROXY} from '#/lib/constants' 4import {getGiphyMetaUri} from '#/lib/strings/embed-player' 5import {parseStarterPackUri} from '#/lib/strings/starter-pack' 6import {isBskyAppUrl} from '../strings/url-helpers' 7 8export enum LikelyType { 9 HTML, 10 Text, 11 Image, 12 Video, 13 Audio, 14 AtpData, 15 Other, 16} 17 18export interface LinkMeta { 19 error?: string 20 likelyType: LikelyType 21 url: string 22 title?: string 23 description?: string 24 image?: string 25} 26 27export async function getLinkMeta( 28 agent: BskyAgent, 29 url: string, 30 timeout = 15e3, 31): Promise<LinkMeta> { 32 if (isBskyAppUrl(url) && !parseStarterPackUri(url)) { 33 return { 34 likelyType: LikelyType.AtpData, 35 url, 36 } 37 } 38 39 let urlp 40 let shouldFollowRedirect = false 41 try { 42 urlp = new URL(url) 43 44 // Get Giphy meta uri if this is any form of giphy link 45 const giphyMetaUri = getGiphyMetaUri(urlp) 46 if (giphyMetaUri) { 47 url = giphyMetaUri 48 urlp = new URL(url) 49 } 50 // follow redirects for soundcloud shortlinks 51 // QUESTION - do we want to follow redirects in other cases? -sfn 52 shouldFollowRedirect = urlp.hostname === 'on.soundcloud.com' 53 } catch (e) { 54 return { 55 error: 'Invalid URL', 56 likelyType: LikelyType.Other, 57 url, 58 } 59 } 60 const likelyType = getLikelyType(urlp) 61 const meta: LinkMeta = { 62 likelyType, 63 url, 64 } 65 const htmlExemptedHostnames: string[] = ['storage.courtlistener.com'] 66 const isExemptedFromHtmlCheck = htmlExemptedHostnames.includes(urlp.hostname) 67 // Skip early return only for hosts exempted from the HTML check 68 if (likelyType !== LikelyType.HTML && !isExemptedFromHtmlCheck) { 69 return meta 70 } 71 72 const controller = new AbortController() 73 const to = setTimeout(() => controller.abort(), timeout || 5e3) 74 75 try { 76 const response = await fetch( 77 `${LINK_META_PROXY(agent.serviceUrl.toString() || '')}${encodeURIComponent( 78 url, 79 )}`, 80 {signal: controller.signal}, 81 ) 82 83 const body = await response.json() 84 85 if (body.error !== '') { 86 throw new Error(body.error) 87 } 88 89 meta.description = body.description 90 meta.image = body.image 91 meta.title = body.title 92 if (shouldFollowRedirect) { 93 meta.url = body.url 94 } 95 } catch (e) { 96 // failed 97 console.error(e) 98 meta.error = e instanceof Error ? e.toString() : 'Failed to fetch link' 99 } finally { 100 clearTimeout(to) 101 } 102 103 return meta 104} 105 106export function getLikelyType(url: URL | string): LikelyType { 107 if (typeof url === 'string') { 108 try { 109 url = new URL(url) 110 } catch (e) { 111 return LikelyType.Other 112 } 113 } 114 115 const ext = url.pathname.split('.').pop() || '' 116 if (ext === 'html' || ext === 'htm' || ext === 'php') { 117 return LikelyType.HTML 118 } 119 const mimeType = EXT_MIME_TYPES[ext] 120 if (!mimeType) { 121 return LikelyType.HTML 122 } 123 if (mimeType.startsWith('text/')) { 124 return LikelyType.Text 125 } 126 if (mimeType.startsWith('image/')) { 127 return LikelyType.Image 128 } 129 if (mimeType.startsWith('video/')) { 130 return LikelyType.Video 131 } 132 if (mimeType.startsWith('audio/')) { 133 return LikelyType.Audio 134 } 135 return LikelyType.Other 136} 137 138const EXT_MIME_TYPES: Record<string, string> = { 139 '123': 'application/vnd.lotus-1-2-3', 140 '1km': 'application/vnd.1000minds.decision-model+xml', 141 '3dml': 'text/vnd.in3d.3dml', 142 '3ds': 'image/x-3ds', 143 '3g2': 'video/3gpp2', 144 '3gp': 'video/3gpp', 145 '3gpp': 'video/3gpp', 146 '3mf': 'model/3mf', 147 '7z': 'application/x-7z-compressed', 148 aab: 'application/x-authorware-bin', 149 aac: 'audio/x-aac', 150 aam: 'application/x-authorware-map', 151 aas: 'application/x-authorware-seg', 152 abw: 'application/x-abiword', 153 ac: 'application/vnd.nokia.n-gage.ac+xml', 154 acc: 'application/vnd.americandynamics.acc', 155 ace: 'application/x-ace-compressed', 156 acu: 'application/vnd.acucobol', 157 acutc: 'application/vnd.acucorp', 158 adp: 'audio/adpcm', 159 aep: 'application/vnd.audiograph', 160 afm: 'application/x-font-type1', 161 afp: 'application/vnd.ibm.modcap', 162 age: 'application/vnd.age', 163 ahead: 'application/vnd.ahead.space', 164 ai: 'application/postscript', 165 aif: 'audio/x-aiff', 166 aifc: 'audio/x-aiff', 167 aiff: 'audio/x-aiff', 168 air: 'application/vnd.adobe.air-application-installer-package+zip', 169 ait: 'application/vnd.dvb.ait', 170 ami: 'application/vnd.amiga.ami', 171 amr: 'audio/amr', 172 apk: 'application/vnd.android.package-archive', 173 apng: 'image/apng', 174 appcache: 'text/cache-manifest', 175 application: 'application/x-ms-application', 176 apr: 'application/vnd.lotus-approach', 177 arc: 'application/x-freearc', 178 arj: 'application/x-arj', 179 asc: 'application/pgp-signature', 180 asf: 'video/x-ms-asf', 181 asm: 'text/x-asm', 182 aso: 'application/vnd.accpac.simply.aso', 183 asx: 'video/x-ms-asf', 184 atc: 'application/vnd.acucorp', 185 atom: 'application/atom+xml', 186 atomcat: 'application/atomcat+xml', 187 atomdeleted: 'application/atomdeleted+xml', 188 atomsvc: 'application/atomsvc+xml', 189 atx: 'application/vnd.antix.game-component', 190 au: 'audio/basic', 191 avi: 'video/x-msvideo', 192 avif: 'image/avif', 193 aw: 'application/applixware', 194 azf: 'application/vnd.airzip.filesecure.azf', 195 azs: 'application/vnd.airzip.filesecure.azs', 196 azv: 'image/vnd.airzip.accelerator.azv', 197 azw: 'application/vnd.amazon.ebook', 198 b16: 'image/vnd.pco.b16', 199 bat: 'application/x-msdownload', 200 bcpio: 'application/x-bcpio', 201 bdf: 'application/x-font-bdf', 202 bdm: 'application/vnd.syncml.dm+wbxml', 203 bdoc: 'application/x-bdoc', 204 bed: 'application/vnd.realvnc.bed', 205 bh2: 'application/vnd.fujitsu.oasysprs', 206 bin: 'application/octet-stream', 207 blb: 'application/x-blorb', 208 blorb: 'application/x-blorb', 209 bmi: 'application/vnd.bmi', 210 bmml: 'application/vnd.balsamiq.bmml+xml', 211 bmp: 'image/x-ms-bmp', 212 book: 'application/vnd.framemaker', 213 box: 'application/vnd.previewsystems.box', 214 boz: 'application/x-bzip2', 215 bpk: 'application/octet-stream', 216 bsp: 'model/vnd.valve.source.compiled-map', 217 btif: 'image/prs.btif', 218 buffer: 'application/octet-stream', 219 bz: 'application/x-bzip', 220 bz2: 'application/x-bzip2', 221 c: 'text/x-c', 222 c11amc: 'application/vnd.cluetrust.cartomobile-config', 223 c11amz: 'application/vnd.cluetrust.cartomobile-config-pkg', 224 c4d: 'application/vnd.clonk.c4group', 225 c4f: 'application/vnd.clonk.c4group', 226 c4g: 'application/vnd.clonk.c4group', 227 c4p: 'application/vnd.clonk.c4group', 228 c4u: 'application/vnd.clonk.c4group', 229 cab: 'application/vnd.ms-cab-compressed', 230 caf: 'audio/x-caf', 231 cap: 'application/vnd.tcpdump.pcap', 232 car: 'application/vnd.curl.car', 233 cat: 'application/vnd.ms-pki.seccat', 234 cb7: 'application/x-cbr', 235 cba: 'application/x-cbr', 236 cbr: 'application/x-cbr', 237 cbt: 'application/x-cbr', 238 cbz: 'application/x-cbr', 239 cc: 'text/x-c', 240 cco: 'application/x-cocoa', 241 cct: 'application/x-director', 242 ccxml: 'application/ccxml+xml', 243 cdbcmsg: 'application/vnd.contact.cmsg', 244 cdf: 'application/x-netcdf', 245 cdfx: 'application/cdfx+xml', 246 cdkey: 'application/vnd.mediastation.cdkey', 247 cdmia: 'application/cdmi-capability', 248 cdmic: 'application/cdmi-container', 249 cdmid: 'application/cdmi-domain', 250 cdmio: 'application/cdmi-object', 251 cdmiq: 'application/cdmi-queue', 252 cdx: 'chemical/x-cdx', 253 cdxml: 'application/vnd.chemdraw+xml', 254 cdy: 'application/vnd.cinderella', 255 cer: 'application/pkix-cert', 256 cfs: 'application/x-cfs-compressed', 257 cgm: 'image/cgm', 258 chat: 'application/x-chat', 259 chm: 'application/vnd.ms-htmlhelp', 260 chrt: 'application/vnd.kde.kchart', 261 cif: 'chemical/x-cif', 262 cii: 'application/vnd.anser-web-certificate-issue-initiation', 263 cil: 'application/vnd.ms-artgalry', 264 cjs: 'application/node', 265 cla: 'application/vnd.claymore', 266 class: 'application/java-vm', 267 clkk: 'application/vnd.crick.clicker.keyboard', 268 clkp: 'application/vnd.crick.clicker.palette', 269 clkt: 'application/vnd.crick.clicker.template', 270 clkw: 'application/vnd.crick.clicker.wordbank', 271 clkx: 'application/vnd.crick.clicker', 272 clp: 'application/x-msclip', 273 cmc: 'application/vnd.cosmocaller', 274 cmdf: 'chemical/x-cmdf', 275 cml: 'chemical/x-cml', 276 cmp: 'application/vnd.yellowriver-custom-menu', 277 cmx: 'image/x-cmx', 278 cod: 'application/vnd.rim.cod', 279 coffee: 'text/coffeescript', 280 com: 'application/x-msdownload', 281 conf: 'text/plain', 282 cpio: 'application/x-cpio', 283 cpp: 'text/x-c', 284 cpt: 'application/mac-compactpro', 285 crd: 'application/x-mscardfile', 286 crl: 'application/pkix-crl', 287 crt: 'application/x-x509-ca-cert', 288 crx: 'application/x-chrome-extension', 289 cryptonote: 'application/vnd.rig.cryptonote', 290 csh: 'application/x-csh', 291 csl: 'application/vnd.citationstyles.style+xml', 292 csml: 'chemical/x-csml', 293 csp: 'application/vnd.commonspace', 294 css: 'text/css', 295 cst: 'application/x-director', 296 csv: 'text/csv', 297 cu: 'application/cu-seeme', 298 curl: 'text/vnd.curl', 299 cww: 'application/prs.cww', 300 cxt: 'application/x-director', 301 cxx: 'text/x-c', 302 dae: 'model/vnd.collada+xml', 303 daf: 'application/vnd.mobius.daf', 304 dart: 'application/vnd.dart', 305 dataless: 'application/vnd.fdsn.seed', 306 davmount: 'application/davmount+xml', 307 dbf: 'application/vnd.dbf', 308 dbk: 'application/docbook+xml', 309 dcr: 'application/x-director', 310 dcurl: 'text/vnd.curl.dcurl', 311 dd2: 'application/vnd.oma.dd2+xml', 312 ddd: 'application/vnd.fujixerox.ddd', 313 ddf: 'application/vnd.syncml.dmddf+xml', 314 dds: 'image/vnd.ms-dds', 315 deb: 'application/x-debian-package', 316 def: 'text/plain', 317 deploy: 'application/octet-stream', 318 der: 'application/x-x509-ca-cert', 319 dfac: 'application/vnd.dreamfactory', 320 dgc: 'application/x-dgc-compressed', 321 dic: 'text/x-c', 322 dir: 'application/x-director', 323 dis: 'application/vnd.mobius.dis', 324 'disposition-notification': 'message/disposition-notification', 325 dist: 'application/octet-stream', 326 distz: 'application/octet-stream', 327 djv: 'image/vnd.djvu', 328 djvu: 'image/vnd.djvu', 329 dll: 'application/x-msdownload', 330 dmg: 'application/x-apple-diskimage', 331 dmp: 'application/vnd.tcpdump.pcap', 332 dms: 'application/octet-stream', 333 dna: 'application/vnd.dna', 334 doc: 'application/msword', 335 docm: 'application/vnd.ms-word.document.macroenabled.12', 336 docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 337 dot: 'application/msword', 338 dotm: 'application/vnd.ms-word.template.macroenabled.12', 339 dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 340 dp: 'application/vnd.osgi.dp', 341 dpg: 'application/vnd.dpgraph', 342 dra: 'audio/vnd.dra', 343 drle: 'image/dicom-rle', 344 dsc: 'text/prs.lines.tag', 345 dssc: 'application/dssc+der', 346 dtb: 'application/x-dtbook+xml', 347 dtd: 'application/xml-dtd', 348 dts: 'audio/vnd.dts', 349 dtshd: 'audio/vnd.dts.hd', 350 dump: 'application/octet-stream', 351 dvb: 'video/vnd.dvb.file', 352 dvi: 'application/x-dvi', 353 dwd: 'application/atsc-dwd+xml', 354 dwf: 'model/vnd.dwf', 355 dwg: 'image/vnd.dwg', 356 dxf: 'image/vnd.dxf', 357 dxp: 'application/vnd.spotfire.dxp', 358 dxr: 'application/x-director', 359 ear: 'application/java-archive', 360 ecelp4800: 'audio/vnd.nuera.ecelp4800', 361 ecelp7470: 'audio/vnd.nuera.ecelp7470', 362 ecelp9600: 'audio/vnd.nuera.ecelp9600', 363 ecma: 'application/ecmascript', 364 edm: 'application/vnd.novadigm.edm', 365 edx: 'application/vnd.novadigm.edx', 366 efif: 'application/vnd.picsel', 367 ei6: 'application/vnd.pg.osasli', 368 elc: 'application/octet-stream', 369 emf: 'image/emf', 370 eml: 'message/rfc822', 371 emma: 'application/emma+xml', 372 emotionml: 'application/emotionml+xml', 373 emz: 'application/x-msmetafile', 374 eol: 'audio/vnd.digital-winds', 375 eot: 'application/vnd.ms-fontobject', 376 eps: 'application/postscript', 377 epub: 'application/epub+zip', 378 es: 'application/ecmascript', 379 es3: 'application/vnd.eszigno3+xml', 380 esa: 'application/vnd.osgi.subsystem', 381 esf: 'application/vnd.epson.esf', 382 et3: 'application/vnd.eszigno3+xml', 383 etx: 'text/x-setext', 384 eva: 'application/x-eva', 385 evy: 'application/x-envoy', 386 exe: 'application/x-msdownload', 387 exi: 'application/exi', 388 exp: 'application/express', 389 exr: 'image/aces', 390 ext: 'application/vnd.novadigm.ext', 391 ez: 'application/andrew-inset', 392 ez2: 'application/vnd.ezpix-album', 393 ez3: 'application/vnd.ezpix-package', 394 f: 'text/x-fortran', 395 f4v: 'video/x-f4v', 396 f77: 'text/x-fortran', 397 f90: 'text/x-fortran', 398 fbs: 'image/vnd.fastbidsheet', 399 fcdt: 'application/vnd.adobe.formscentral.fcdt', 400 fcs: 'application/vnd.isac.fcs', 401 fdf: 'application/vnd.fdf', 402 fdt: 'application/fdt+xml', 403 fe_launch: 'application/vnd.denovo.fcselayout-link', 404 fg5: 'application/vnd.fujitsu.oasysgp', 405 fgd: 'application/x-director', 406 fh: 'image/x-freehand', 407 fh4: 'image/x-freehand', 408 fh5: 'image/x-freehand', 409 fh7: 'image/x-freehand', 410 fhc: 'image/x-freehand', 411 fig: 'application/x-xfig', 412 fits: 'image/fits', 413 flac: 'audio/x-flac', 414 fli: 'video/x-fli', 415 flo: 'application/vnd.micrografx.flo', 416 flv: 'video/x-flv', 417 flw: 'application/vnd.kde.kivio', 418 flx: 'text/vnd.fmi.flexstor', 419 fly: 'text/vnd.fly', 420 fm: 'application/vnd.framemaker', 421 fnc: 'application/vnd.frogans.fnc', 422 fo: 'application/vnd.software602.filler.form+xml', 423 for: 'text/x-fortran', 424 fpx: 'image/vnd.fpx', 425 frame: 'application/vnd.framemaker', 426 fsc: 'application/vnd.fsc.weblaunch', 427 fst: 'image/vnd.fst', 428 ftc: 'application/vnd.fluxtime.clip', 429 fti: 'application/vnd.anser-web-funds-transfer-initiation', 430 fvt: 'video/vnd.fvt', 431 fxp: 'application/vnd.adobe.fxp', 432 fxpl: 'application/vnd.adobe.fxp', 433 fzs: 'application/vnd.fuzzysheet', 434 g2w: 'application/vnd.geoplan', 435 g3: 'image/g3fax', 436 g3w: 'application/vnd.geospace', 437 gac: 'application/vnd.groove-account', 438 gam: 'application/x-tads', 439 gbr: 'application/rpki-ghostbusters', 440 gca: 'application/x-gca-compressed', 441 gdl: 'model/vnd.gdl', 442 gdoc: 'application/vnd.google-apps.document', 443 ged: 'text/vnd.familysearch.gedcom', 444 geo: 'application/vnd.dynageo', 445 geojson: 'application/geo+json', 446 gex: 'application/vnd.geometry-explorer', 447 ggb: 'application/vnd.geogebra.file', 448 ggt: 'application/vnd.geogebra.tool', 449 ghf: 'application/vnd.groove-help', 450 gif: 'image/gif', 451 gim: 'application/vnd.groove-identity-message', 452 glb: 'model/gltf-binary', 453 gltf: 'model/gltf+json', 454 gml: 'application/gml+xml', 455 gmx: 'application/vnd.gmx', 456 gnumeric: 'application/x-gnumeric', 457 gph: 'application/vnd.flographit', 458 gpx: 'application/gpx+xml', 459 gqf: 'application/vnd.grafeq', 460 gqs: 'application/vnd.grafeq', 461 gram: 'application/srgs', 462 gramps: 'application/x-gramps-xml', 463 gre: 'application/vnd.geometry-explorer', 464 grv: 'application/vnd.groove-injector', 465 grxml: 'application/srgs+xml', 466 gsf: 'application/x-font-ghostscript', 467 gsheet: 'application/vnd.google-apps.spreadsheet', 468 gslides: 'application/vnd.google-apps.presentation', 469 gtar: 'application/x-gtar', 470 gtm: 'application/vnd.groove-tool-message', 471 gtw: 'model/vnd.gtw', 472 gv: 'text/vnd.graphviz', 473 gxf: 'application/gxf', 474 gxt: 'application/vnd.geonext', 475 gz: 'application/gzip', 476 h: 'text/x-c', 477 h261: 'video/h261', 478 h263: 'video/h263', 479 h264: 'video/h264', 480 hal: 'application/vnd.hal+xml', 481 hbci: 'application/vnd.hbci', 482 hbs: 'text/x-handlebars-template', 483 hdd: 'application/x-virtualbox-hdd', 484 hdf: 'application/x-hdf', 485 heic: 'image/heic', 486 heics: 'image/heic-sequence', 487 heif: 'image/heif', 488 heifs: 'image/heif-sequence', 489 hej2: 'image/hej2k', 490 held: 'application/atsc-held+xml', 491 hh: 'text/x-c', 492 hjson: 'application/hjson', 493 hlp: 'application/winhlp', 494 hpgl: 'application/vnd.hp-hpgl', 495 hpid: 'application/vnd.hp-hpid', 496 hps: 'application/vnd.hp-hps', 497 hqx: 'application/mac-binhex40', 498 hsj2: 'image/hsj2', 499 htc: 'text/x-component', 500 htke: 'application/vnd.kenameaapp', 501 htm: 'text/html', 502 html: 'text/html', 503 hvd: 'application/vnd.yamaha.hv-dic', 504 hvp: 'application/vnd.yamaha.hv-voice', 505 hvs: 'application/vnd.yamaha.hv-script', 506 i2g: 'application/vnd.intergeo', 507 icc: 'application/vnd.iccprofile', 508 ice: 'x-conference/x-cooltalk', 509 icm: 'application/vnd.iccprofile', 510 ico: 'image/x-icon', 511 ics: 'text/calendar', 512 ief: 'image/ief', 513 ifb: 'text/calendar', 514 ifm: 'application/vnd.shana.informed.formdata', 515 iges: 'model/iges', 516 igl: 'application/vnd.igloader', 517 igm: 'application/vnd.insors.igm', 518 igs: 'model/iges', 519 igx: 'application/vnd.micrografx.igx', 520 iif: 'application/vnd.shana.informed.interchange', 521 img: 'application/octet-stream', 522 imp: 'application/vnd.accpac.simply.imp', 523 ims: 'application/vnd.ms-ims', 524 in: 'text/plain', 525 ini: 'text/plain', 526 ink: 'application/inkml+xml', 527 inkml: 'application/inkml+xml', 528 install: 'application/x-install-instructions', 529 iota: 'application/vnd.astraea-software.iota', 530 ipfix: 'application/ipfix', 531 ipk: 'application/vnd.shana.informed.package', 532 irm: 'application/vnd.ibm.rights-management', 533 irp: 'application/vnd.irepository.package+xml', 534 iso: 'application/x-iso9660-image', 535 itp: 'application/vnd.shana.informed.formtemplate', 536 its: 'application/its+xml', 537 ivp: 'application/vnd.immervision-ivp', 538 ivu: 'application/vnd.immervision-ivu', 539 jad: 'text/vnd.sun.j2me.app-descriptor', 540 jade: 'text/jade', 541 jam: 'application/vnd.jam', 542 jar: 'application/java-archive', 543 jardiff: 'application/x-java-archive-diff', 544 java: 'text/x-java-source', 545 jhc: 'image/jphc', 546 jisp: 'application/vnd.jisp', 547 jls: 'image/jls', 548 jlt: 'application/vnd.hp-jlyt', 549 jng: 'image/x-jng', 550 jnlp: 'application/x-java-jnlp-file', 551 joda: 'application/vnd.joost.joda-archive', 552 jp2: 'image/jp2', 553 jpe: 'image/jpeg', 554 jpeg: 'image/jpeg', 555 jpf: 'image/jpx', 556 jpg: 'image/jpeg', 557 jpg2: 'image/jp2', 558 jpgm: 'video/jpm', 559 jpgv: 'video/jpeg', 560 jph: 'image/jph', 561 jpm: 'video/jpm', 562 jpx: 'image/jpx', 563 js: 'application/javascript', 564 json: 'application/json', 565 json5: 'application/json5', 566 jsonld: 'application/ld+json', 567 jsonml: 'application/jsonml+json', 568 jsx: 'text/jsx', 569 jxr: 'image/jxr', 570 jxra: 'image/jxra', 571 jxrs: 'image/jxrs', 572 jxs: 'image/jxs', 573 jxsc: 'image/jxsc', 574 jxsi: 'image/jxsi', 575 jxss: 'image/jxss', 576 kar: 'audio/midi', 577 karbon: 'application/vnd.kde.karbon', 578 kdbx: 'application/x-keepass2', 579 key: 'application/x-iwork-keynote-sffkey', 580 kfo: 'application/vnd.kde.kformula', 581 kia: 'application/vnd.kidspiration', 582 kml: 'application/vnd.google-earth.kml+xml', 583 kmz: 'application/vnd.google-earth.kmz', 584 kne: 'application/vnd.kinar', 585 knp: 'application/vnd.kinar', 586 kon: 'application/vnd.kde.kontour', 587 kpr: 'application/vnd.kde.kpresenter', 588 kpt: 'application/vnd.kde.kpresenter', 589 kpxx: 'application/vnd.ds-keypoint', 590 ksp: 'application/vnd.kde.kspread', 591 ktr: 'application/vnd.kahootz', 592 ktx: 'image/ktx', 593 ktx2: 'image/ktx2', 594 ktz: 'application/vnd.kahootz', 595 kwd: 'application/vnd.kde.kword', 596 kwt: 'application/vnd.kde.kword', 597 lasxml: 'application/vnd.las.las+xml', 598 latex: 'application/x-latex', 599 lbd: 'application/vnd.llamagraphics.life-balance.desktop', 600 lbe: 'application/vnd.llamagraphics.life-balance.exchange+xml', 601 les: 'application/vnd.hhe.lesson-player', 602 less: 'text/less', 603 lgr: 'application/lgr+xml', 604 lha: 'application/x-lzh-compressed', 605 link66: 'application/vnd.route66.link66+xml', 606 list: 'text/plain', 607 list3820: 'application/vnd.ibm.modcap', 608 listafp: 'application/vnd.ibm.modcap', 609 litcoffee: 'text/coffeescript', 610 lnk: 'application/x-ms-shortcut', 611 log: 'text/plain', 612 lostxml: 'application/lost+xml', 613 lrf: 'application/octet-stream', 614 lrm: 'application/vnd.ms-lrm', 615 ltf: 'application/vnd.frogans.ltf', 616 lua: 'text/x-lua', 617 luac: 'application/x-lua-bytecode', 618 lvp: 'audio/vnd.lucent.voice', 619 lwp: 'application/vnd.lotus-wordpro', 620 lzh: 'application/x-lzh-compressed', 621 m13: 'application/x-msmediaview', 622 m14: 'application/x-msmediaview', 623 m1v: 'video/mpeg', 624 m21: 'application/mp21', 625 m2a: 'audio/mpeg', 626 m2v: 'video/mpeg', 627 m3a: 'audio/mpeg', 628 m3u: 'audio/x-mpegurl', 629 m3u8: 'application/vnd.apple.mpegurl', 630 m4a: 'audio/x-m4a', 631 m4p: 'application/mp4', 632 m4s: 'video/iso.segment', 633 m4u: 'video/vnd.mpegurl', 634 m4v: 'video/x-m4v', 635 ma: 'application/mathematica', 636 mads: 'application/mads+xml', 637 maei: 'application/mmt-aei+xml', 638 mag: 'application/vnd.ecowin.chart', 639 maker: 'application/vnd.framemaker', 640 man: 'text/troff', 641 manifest: 'text/cache-manifest', 642 map: 'application/json', 643 mar: 'application/octet-stream', 644 markdown: 'text/markdown', 645 mathml: 'application/mathml+xml', 646 mb: 'application/mathematica', 647 mbk: 'application/vnd.mobius.mbk', 648 mbox: 'application/mbox', 649 mc1: 'application/vnd.medcalcdata', 650 mcd: 'application/vnd.mcd', 651 mcurl: 'text/vnd.curl.mcurl', 652 md: 'text/markdown', 653 mdb: 'application/x-msaccess', 654 mdi: 'image/vnd.ms-modi', 655 mdx: 'text/mdx', 656 me: 'text/troff', 657 mesh: 'model/mesh', 658 meta4: 'application/metalink4+xml', 659 metalink: 'application/metalink+xml', 660 mets: 'application/mets+xml', 661 mfm: 'application/vnd.mfmp', 662 mft: 'application/rpki-manifest', 663 mgp: 'application/vnd.osgeo.mapguide.package', 664 mgz: 'application/vnd.proteus.magazine', 665 mid: 'audio/midi', 666 midi: 'audio/midi', 667 mie: 'application/x-mie', 668 mif: 'application/vnd.mif', 669 mime: 'message/rfc822', 670 mj2: 'video/mj2', 671 mjp2: 'video/mj2', 672 mjs: 'application/javascript', 673 mk3d: 'video/x-matroska', 674 mka: 'audio/x-matroska', 675 mkd: 'text/x-markdown', 676 mks: 'video/x-matroska', 677 mkv: 'video/x-matroska', 678 mlp: 'application/vnd.dolby.mlp', 679 mmd: 'application/vnd.chipnuts.karaoke-mmd', 680 mmf: 'application/vnd.smaf', 681 mml: 'text/mathml', 682 mmr: 'image/vnd.fujixerox.edmics-mmr', 683 mng: 'video/x-mng', 684 mny: 'application/x-msmoney', 685 mobi: 'application/x-mobipocket-ebook', 686 mods: 'application/mods+xml', 687 mov: 'video/quicktime', 688 movie: 'video/x-sgi-movie', 689 mp2: 'audio/mpeg', 690 mp21: 'application/mp21', 691 mp2a: 'audio/mpeg', 692 mp3: 'audio/mpeg', 693 mp4: 'video/mp4', 694 mp4a: 'audio/mp4', 695 mp4s: 'application/mp4', 696 mp4v: 'video/mp4', 697 mpc: 'application/vnd.mophun.certificate', 698 mpd: 'application/dash+xml', 699 mpe: 'video/mpeg', 700 mpeg: 'video/mpeg', 701 mpg: 'video/mpeg', 702 mpg4: 'video/mp4', 703 mpga: 'audio/mpeg', 704 mpkg: 'application/vnd.apple.installer+xml', 705 mpm: 'application/vnd.blueice.multipass', 706 mpn: 'application/vnd.mophun.application', 707 mpp: 'application/vnd.ms-project', 708 mpt: 'application/vnd.ms-project', 709 mpy: 'application/vnd.ibm.minipay', 710 mqy: 'application/vnd.mobius.mqy', 711 mrc: 'application/marc', 712 mrcx: 'application/marcxml+xml', 713 ms: 'text/troff', 714 mscml: 'application/mediaservercontrol+xml', 715 mseed: 'application/vnd.fdsn.mseed', 716 mseq: 'application/vnd.mseq', 717 msf: 'application/vnd.epson.msf', 718 msg: 'application/vnd.ms-outlook', 719 msh: 'model/mesh', 720 msi: 'application/x-msdownload', 721 msl: 'application/vnd.mobius.msl', 722 msm: 'application/octet-stream', 723 msp: 'application/octet-stream', 724 msty: 'application/vnd.muvee.style', 725 mtl: 'model/mtl', 726 mts: 'model/vnd.mts', 727 mus: 'application/vnd.musician', 728 musd: 'application/mmt-usd+xml', 729 musicxml: 'application/vnd.recordare.musicxml+xml', 730 mvb: 'application/x-msmediaview', 731 mvt: 'application/vnd.mapbox-vector-tile', 732 mwf: 'application/vnd.mfer', 733 mxf: 'application/mxf', 734 mxl: 'application/vnd.recordare.musicxml', 735 mxmf: 'audio/mobile-xmf', 736 mxml: 'application/xv+xml', 737 mxs: 'application/vnd.triscape.mxs', 738 mxu: 'video/vnd.mpegurl', 739 'n-gage': 'application/vnd.nokia.n-gage.symbian.install', 740 n3: 'text/n3', 741 nb: 'application/mathematica', 742 nbp: 'application/vnd.wolfram.player', 743 nc: 'application/x-netcdf', 744 ncx: 'application/x-dtbncx+xml', 745 nfo: 'text/x-nfo', 746 ngdat: 'application/vnd.nokia.n-gage.data', 747 nitf: 'application/vnd.nitf', 748 nlu: 'application/vnd.neurolanguage.nlu', 749 nml: 'application/vnd.enliven', 750 nnd: 'application/vnd.noblenet-directory', 751 nns: 'application/vnd.noblenet-sealer', 752 nnw: 'application/vnd.noblenet-web', 753 npx: 'image/vnd.net-fpx', 754 nq: 'application/n-quads', 755 nsc: 'application/x-conference', 756 nsf: 'application/vnd.lotus-notes', 757 nt: 'application/n-triples', 758 ntf: 'application/vnd.nitf', 759 numbers: 'application/x-iwork-numbers-sffnumbers', 760 nzb: 'application/x-nzb', 761 oa2: 'application/vnd.fujitsu.oasys2', 762 oa3: 'application/vnd.fujitsu.oasys3', 763 oas: 'application/vnd.fujitsu.oasys', 764 obd: 'application/x-msbinder', 765 obgx: 'application/vnd.openblox.game+xml', 766 obj: 'model/obj', 767 oda: 'application/oda', 768 odb: 'application/vnd.oasis.opendocument.database', 769 odc: 'application/vnd.oasis.opendocument.chart', 770 odf: 'application/vnd.oasis.opendocument.formula', 771 odft: 'application/vnd.oasis.opendocument.formula-template', 772 odg: 'application/vnd.oasis.opendocument.graphics', 773 odi: 'application/vnd.oasis.opendocument.image', 774 odm: 'application/vnd.oasis.opendocument.text-master', 775 odp: 'application/vnd.oasis.opendocument.presentation', 776 ods: 'application/vnd.oasis.opendocument.spreadsheet', 777 odt: 'application/vnd.oasis.opendocument.text', 778 oga: 'audio/ogg', 779 ogex: 'model/vnd.opengex', 780 ogg: 'audio/ogg', 781 ogv: 'video/ogg', 782 ogx: 'application/ogg', 783 omdoc: 'application/omdoc+xml', 784 onepkg: 'application/onenote', 785 onetmp: 'application/onenote', 786 onetoc: 'application/onenote', 787 onetoc2: 'application/onenote', 788 opf: 'application/oebps-package+xml', 789 opml: 'text/x-opml', 790 oprc: 'application/vnd.palm', 791 opus: 'audio/ogg', 792 org: 'text/x-org', 793 osf: 'application/vnd.yamaha.openscoreformat', 794 osfpvg: 'application/vnd.yamaha.openscoreformat.osfpvg+xml', 795 osm: 'application/vnd.openstreetmap.data+xml', 796 otc: 'application/vnd.oasis.opendocument.chart-template', 797 otf: 'font/otf', 798 otg: 'application/vnd.oasis.opendocument.graphics-template', 799 oth: 'application/vnd.oasis.opendocument.text-web', 800 oti: 'application/vnd.oasis.opendocument.image-template', 801 otp: 'application/vnd.oasis.opendocument.presentation-template', 802 ots: 'application/vnd.oasis.opendocument.spreadsheet-template', 803 ott: 'application/vnd.oasis.opendocument.text-template', 804 ova: 'application/x-virtualbox-ova', 805 ovf: 'application/x-virtualbox-ovf', 806 owl: 'application/rdf+xml', 807 oxps: 'application/oxps', 808 oxt: 'application/vnd.openofficeorg.extension', 809 p: 'text/x-pascal', 810 p10: 'application/pkcs10', 811 p12: 'application/x-pkcs12', 812 p7b: 'application/x-pkcs7-certificates', 813 p7c: 'application/pkcs7-mime', 814 p7m: 'application/pkcs7-mime', 815 p7r: 'application/x-pkcs7-certreqresp', 816 p7s: 'application/pkcs7-signature', 817 p8: 'application/pkcs8', 818 pac: 'application/x-ns-proxy-autoconfig', 819 pages: 'application/x-iwork-pages-sffpages', 820 pas: 'text/x-pascal', 821 paw: 'application/vnd.pawaafile', 822 pbd: 'application/vnd.powerbuilder6', 823 pbm: 'image/x-portable-bitmap', 824 pcap: 'application/vnd.tcpdump.pcap', 825 pcf: 'application/x-font-pcf', 826 pcl: 'application/vnd.hp-pcl', 827 pclxl: 'application/vnd.hp-pclxl', 828 pct: 'image/x-pict', 829 pcurl: 'application/vnd.curl.pcurl', 830 pcx: 'image/x-pcx', 831 pdb: 'application/x-pilot', 832 pde: 'text/x-processing', 833 pdf: 'application/pdf', 834 pem: 'application/x-x509-ca-cert', 835 pfa: 'application/x-font-type1', 836 pfb: 'application/x-font-type1', 837 pfm: 'application/x-font-type1', 838 pfr: 'application/font-tdpfr', 839 pfx: 'application/x-pkcs12', 840 pgm: 'image/x-portable-graymap', 841 pgn: 'application/x-chess-pgn', 842 pgp: 'application/pgp-encrypted', 843 php: 'application/x-httpd-php', 844 pic: 'image/x-pict', 845 pkg: 'application/octet-stream', 846 pki: 'application/pkixcmp', 847 pkipath: 'application/pkix-pkipath', 848 pkpass: 'application/vnd.apple.pkpass', 849 pl: 'application/x-perl', 850 plb: 'application/vnd.3gpp.pic-bw-large', 851 plc: 'application/vnd.mobius.plc', 852 plf: 'application/vnd.pocketlearn', 853 pls: 'application/pls+xml', 854 pm: 'application/x-perl', 855 pml: 'application/vnd.ctc-posml', 856 png: 'image/png', 857 pnm: 'image/x-portable-anymap', 858 portpkg: 'application/vnd.macports.portpkg', 859 pot: 'application/vnd.ms-powerpoint', 860 potm: 'application/vnd.ms-powerpoint.template.macroenabled.12', 861 potx: 'application/vnd.openxmlformats-officedocument.presentationml.template', 862 ppam: 'application/vnd.ms-powerpoint.addin.macroenabled.12', 863 ppd: 'application/vnd.cups-ppd', 864 ppm: 'image/x-portable-pixmap', 865 pps: 'application/vnd.ms-powerpoint', 866 ppsm: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', 867 ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 868 ppt: 'application/vnd.ms-powerpoint', 869 pptm: 'application/vnd.ms-powerpoint.presentation.macroenabled.12', 870 pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 871 pqa: 'application/vnd.palm', 872 prc: 'application/x-pilot', 873 pre: 'application/vnd.lotus-freelance', 874 prf: 'application/pics-rules', 875 provx: 'application/provenance+xml', 876 ps: 'application/postscript', 877 psb: 'application/vnd.3gpp.pic-bw-small', 878 psd: 'image/vnd.adobe.photoshop', 879 psf: 'application/x-font-linux-psf', 880 pskcxml: 'application/pskc+xml', 881 pti: 'image/prs.pti', 882 ptid: 'application/vnd.pvi.ptid1', 883 pub: 'application/x-mspublisher', 884 pvb: 'application/vnd.3gpp.pic-bw-var', 885 pwn: 'application/vnd.3m.post-it-notes', 886 pya: 'audio/vnd.ms-playready.media.pya', 887 pyv: 'video/vnd.ms-playready.media.pyv', 888 qam: 'application/vnd.epson.quickanime', 889 qbo: 'application/vnd.intu.qbo', 890 qfx: 'application/vnd.intu.qfx', 891 qps: 'application/vnd.publishare-delta-tree', 892 qt: 'video/quicktime', 893 qwd: 'application/vnd.quark.quarkxpress', 894 qwt: 'application/vnd.quark.quarkxpress', 895 qxb: 'application/vnd.quark.quarkxpress', 896 qxd: 'application/vnd.quark.quarkxpress', 897 qxl: 'application/vnd.quark.quarkxpress', 898 qxt: 'application/vnd.quark.quarkxpress', 899 ra: 'audio/x-realaudio', 900 ram: 'audio/x-pn-realaudio', 901 raml: 'application/raml+yaml', 902 rapd: 'application/route-apd+xml', 903 rar: 'application/x-rar-compressed', 904 ras: 'image/x-cmu-raster', 905 rcprofile: 'application/vnd.ipunplugged.rcprofile', 906 rdf: 'application/rdf+xml', 907 rdz: 'application/vnd.data-vision.rdz', 908 relo: 'application/p2p-overlay+xml', 909 rep: 'application/vnd.businessobjects', 910 res: 'application/x-dtbresource+xml', 911 rgb: 'image/x-rgb', 912 rif: 'application/reginfo+xml', 913 rip: 'audio/vnd.rip', 914 ris: 'application/x-research-info-systems', 915 rl: 'application/resource-lists+xml', 916 rlc: 'image/vnd.fujixerox.edmics-rlc', 917 rld: 'application/resource-lists-diff+xml', 918 rm: 'application/vnd.rn-realmedia', 919 rmi: 'audio/midi', 920 rmp: 'audio/x-pn-realaudio-plugin', 921 rms: 'application/vnd.jcp.javame.midlet-rms', 922 rmvb: 'application/vnd.rn-realmedia-vbr', 923 rnc: 'application/relax-ng-compact-syntax', 924 rng: 'application/xml', 925 roa: 'application/rpki-roa', 926 roff: 'text/troff', 927 rp9: 'application/vnd.cloanto.rp9', 928 rpm: 'application/x-redhat-package-manager', 929 rpss: 'application/vnd.nokia.radio-presets', 930 rpst: 'application/vnd.nokia.radio-preset', 931 rq: 'application/sparql-query', 932 rs: 'application/rls-services+xml', 933 rsat: 'application/atsc-rsat+xml', 934 rsd: 'application/rsd+xml', 935 rsheet: 'application/urc-ressheet+xml', 936 rss: 'application/rss+xml', 937 rtf: 'text/rtf', 938 rtx: 'text/richtext', 939 run: 'application/x-makeself', 940 rusd: 'application/route-usd+xml', 941 s: 'text/x-asm', 942 s3m: 'audio/s3m', 943 saf: 'application/vnd.yamaha.smaf-audio', 944 sass: 'text/x-sass', 945 sbml: 'application/sbml+xml', 946 sc: 'application/vnd.ibm.secure-container', 947 scd: 'application/x-msschedule', 948 scm: 'application/vnd.lotus-screencam', 949 scq: 'application/scvp-cv-request', 950 scs: 'application/scvp-cv-response', 951 scss: 'text/x-scss', 952 scurl: 'text/vnd.curl.scurl', 953 sda: 'application/vnd.stardivision.draw', 954 sdc: 'application/vnd.stardivision.calc', 955 sdd: 'application/vnd.stardivision.impress', 956 sdkd: 'application/vnd.solent.sdkm+xml', 957 sdkm: 'application/vnd.solent.sdkm+xml', 958 sdp: 'application/sdp', 959 sdw: 'application/vnd.stardivision.writer', 960 sea: 'application/x-sea', 961 see: 'application/vnd.seemail', 962 seed: 'application/vnd.fdsn.seed', 963 sema: 'application/vnd.sema', 964 semd: 'application/vnd.semd', 965 semf: 'application/vnd.semf', 966 senmlx: 'application/senml+xml', 967 sensmlx: 'application/sensml+xml', 968 ser: 'application/java-serialized-object', 969 setpay: 'application/set-payment-initiation', 970 setreg: 'application/set-registration-initiation', 971 'sfd-hdstx': 'application/vnd.hydrostatix.sof-data', 972 sfs: 'application/vnd.spotfire.sfs', 973 sfv: 'text/x-sfv', 974 sgi: 'image/sgi', 975 sgl: 'application/vnd.stardivision.writer-global', 976 sgm: 'text/sgml', 977 sgml: 'text/sgml', 978 sh: 'application/x-sh', 979 shar: 'application/x-shar', 980 shex: 'text/shex', 981 shf: 'application/shf+xml', 982 shtml: 'text/html', 983 sid: 'image/x-mrsid-image', 984 sieve: 'application/sieve', 985 sig: 'application/pgp-signature', 986 sil: 'audio/silk', 987 silo: 'model/mesh', 988 sis: 'application/vnd.symbian.install', 989 sisx: 'application/vnd.symbian.install', 990 sit: 'application/x-stuffit', 991 sitx: 'application/x-stuffitx', 992 siv: 'application/sieve', 993 skd: 'application/vnd.koan', 994 skm: 'application/vnd.koan', 995 skp: 'application/vnd.koan', 996 skt: 'application/vnd.koan', 997 sldm: 'application/vnd.ms-powerpoint.slide.macroenabled.12', 998 sldx: 'application/vnd.openxmlformats-officedocument.presentationml.slide', 999 slim: 'text/slim', 1000 slm: 'text/slim', 1001 sls: 'application/route-s-tsid+xml', 1002 slt: 'application/vnd.epson.salt', 1003 sm: 'application/vnd.stepmania.stepchart', 1004 smf: 'application/vnd.stardivision.math', 1005 smi: 'application/smil+xml', 1006 smil: 'application/smil+xml', 1007 smv: 'video/x-smv', 1008 smzip: 'application/vnd.stepmania.package', 1009 snd: 'audio/basic', 1010 snf: 'application/x-font-snf', 1011 so: 'application/octet-stream', 1012 spc: 'application/x-pkcs7-certificates', 1013 spdx: 'text/spdx', 1014 spf: 'application/vnd.yamaha.smaf-phrase', 1015 spl: 'application/x-futuresplash', 1016 spot: 'text/vnd.in3d.spot', 1017 spp: 'application/scvp-vp-response', 1018 spq: 'application/scvp-vp-request', 1019 spx: 'audio/ogg', 1020 sql: 'application/x-sql', 1021 src: 'application/x-wais-source', 1022 srt: 'application/x-subrip', 1023 sru: 'application/sru+xml', 1024 srx: 'application/sparql-results+xml', 1025 ssdl: 'application/ssdl+xml', 1026 sse: 'application/vnd.kodak-descriptor', 1027 ssf: 'application/vnd.epson.ssf', 1028 ssml: 'application/ssml+xml', 1029 st: 'application/vnd.sailingtracker.track', 1030 stc: 'application/vnd.sun.xml.calc.template', 1031 std: 'application/vnd.sun.xml.draw.template', 1032 stf: 'application/vnd.wt.stf', 1033 sti: 'application/vnd.sun.xml.impress.template', 1034 stk: 'application/hyperstudio', 1035 stl: 'model/stl', 1036 stpx: 'model/step+xml', 1037 stpxz: 'model/step-xml+zip', 1038 stpz: 'model/step+zip', 1039 str: 'application/vnd.pg.format', 1040 stw: 'application/vnd.sun.xml.writer.template', 1041 styl: 'text/stylus', 1042 stylus: 'text/stylus', 1043 sub: 'text/vnd.dvb.subtitle', 1044 sus: 'application/vnd.sus-calendar', 1045 susp: 'application/vnd.sus-calendar', 1046 sv4cpio: 'application/x-sv4cpio', 1047 sv4crc: 'application/x-sv4crc', 1048 svc: 'application/vnd.dvb.service', 1049 svd: 'application/vnd.svd', 1050 svg: 'image/svg+xml', 1051 svgz: 'image/svg+xml', 1052 swa: 'application/x-director', 1053 swf: 'application/x-shockwave-flash', 1054 swi: 'application/vnd.aristanetworks.swi', 1055 swidtag: 'application/swid+xml', 1056 sxc: 'application/vnd.sun.xml.calc', 1057 sxd: 'application/vnd.sun.xml.draw', 1058 sxg: 'application/vnd.sun.xml.writer.global', 1059 sxi: 'application/vnd.sun.xml.impress', 1060 sxm: 'application/vnd.sun.xml.math', 1061 sxw: 'application/vnd.sun.xml.writer', 1062 t: 'text/troff', 1063 t3: 'application/x-t3vm-image', 1064 t38: 'image/t38', 1065 taglet: 'application/vnd.mynfc', 1066 tao: 'application/vnd.tao.intent-module-archive', 1067 tap: 'image/vnd.tencent.tap', 1068 tar: 'application/x-tar', 1069 tcap: 'application/vnd.3gpp2.tcap', 1070 tcl: 'application/x-tcl', 1071 td: 'application/urc-targetdesc+xml', 1072 teacher: 'application/vnd.smart.teacher', 1073 tei: 'application/tei+xml', 1074 teicorpus: 'application/tei+xml', 1075 tex: 'application/x-tex', 1076 texi: 'application/x-texinfo', 1077 texinfo: 'application/x-texinfo', 1078 text: 'text/plain', 1079 tfi: 'application/thraud+xml', 1080 tfm: 'application/x-tex-tfm', 1081 tfx: 'image/tiff-fx', 1082 tga: 'image/x-tga', 1083 thmx: 'application/vnd.ms-officetheme', 1084 tif: 'image/tiff', 1085 tiff: 'image/tiff', 1086 tk: 'application/x-tcl', 1087 tmo: 'application/vnd.tmobile-livetv', 1088 toml: 'application/toml', 1089 torrent: 'application/x-bittorrent', 1090 tpl: 'application/vnd.groove-tool-template', 1091 tpt: 'application/vnd.trid.tpt', 1092 tr: 'text/troff', 1093 tra: 'application/vnd.trueapp', 1094 trig: 'application/trig', 1095 trm: 'application/x-msterminal', 1096 ts: 'video/mp2t', 1097 tsd: 'application/timestamped-data', 1098 tsv: 'text/tab-separated-values', 1099 ttc: 'font/collection', 1100 ttf: 'font/ttf', 1101 ttl: 'text/turtle', 1102 ttml: 'application/ttml+xml', 1103 twd: 'application/vnd.simtech-mindmapper', 1104 twds: 'application/vnd.simtech-mindmapper', 1105 txd: 'application/vnd.genomatix.tuxedo', 1106 txf: 'application/vnd.mobius.txf', 1107 txt: 'text/plain', 1108 u32: 'application/x-authorware-bin', 1109 u8dsn: 'message/global-delivery-status', 1110 u8hdr: 'message/global-headers', 1111 u8mdn: 'message/global-disposition-notification', 1112 u8msg: 'message/global', 1113 ubj: 'application/ubjson', 1114 udeb: 'application/x-debian-package', 1115 ufd: 'application/vnd.ufdl', 1116 ufdl: 'application/vnd.ufdl', 1117 ulx: 'application/x-glulx', 1118 umj: 'application/vnd.umajin', 1119 unityweb: 'application/vnd.unity', 1120 uoml: 'application/vnd.uoml+xml', 1121 uri: 'text/uri-list', 1122 uris: 'text/uri-list', 1123 urls: 'text/uri-list', 1124 usdz: 'model/vnd.usdz+zip', 1125 ustar: 'application/x-ustar', 1126 utz: 'application/vnd.uiq.theme', 1127 uu: 'text/x-uuencode', 1128 uva: 'audio/vnd.dece.audio', 1129 uvd: 'application/vnd.dece.data', 1130 uvf: 'application/vnd.dece.data', 1131 uvg: 'image/vnd.dece.graphic', 1132 uvh: 'video/vnd.dece.hd', 1133 uvi: 'image/vnd.dece.graphic', 1134 uvm: 'video/vnd.dece.mobile', 1135 uvp: 'video/vnd.dece.pd', 1136 uvs: 'video/vnd.dece.sd', 1137 uvt: 'application/vnd.dece.ttml+xml', 1138 uvu: 'video/vnd.uvvu.mp4', 1139 uvv: 'video/vnd.dece.video', 1140 uvva: 'audio/vnd.dece.audio', 1141 uvvd: 'application/vnd.dece.data', 1142 uvvf: 'application/vnd.dece.data', 1143 uvvg: 'image/vnd.dece.graphic', 1144 uvvh: 'video/vnd.dece.hd', 1145 uvvi: 'image/vnd.dece.graphic', 1146 uvvm: 'video/vnd.dece.mobile', 1147 uvvp: 'video/vnd.dece.pd', 1148 uvvs: 'video/vnd.dece.sd', 1149 uvvt: 'application/vnd.dece.ttml+xml', 1150 uvvu: 'video/vnd.uvvu.mp4', 1151 uvvv: 'video/vnd.dece.video', 1152 uvvx: 'application/vnd.dece.unspecified', 1153 uvvz: 'application/vnd.dece.zip', 1154 uvx: 'application/vnd.dece.unspecified', 1155 uvz: 'application/vnd.dece.zip', 1156 vbox: 'application/x-virtualbox-vbox', 1157 'vbox-extpack': 'application/x-virtualbox-vbox-extpack', 1158 vcard: 'text/vcard', 1159 vcd: 'application/x-cdlink', 1160 vcf: 'text/x-vcard', 1161 vcg: 'application/vnd.groove-vcard', 1162 vcs: 'text/x-vcalendar', 1163 vcx: 'application/vnd.vcx', 1164 vdi: 'application/x-virtualbox-vdi', 1165 vds: 'model/vnd.sap.vds', 1166 vhd: 'application/x-virtualbox-vhd', 1167 vis: 'application/vnd.visionary', 1168 viv: 'video/vnd.vivo', 1169 vmdk: 'application/x-virtualbox-vmdk', 1170 vob: 'video/x-ms-vob', 1171 vor: 'application/vnd.stardivision.writer', 1172 vox: 'application/x-authorware-bin', 1173 vrml: 'model/vrml', 1174 vsd: 'application/vnd.visio', 1175 vsf: 'application/vnd.vsf', 1176 vss: 'application/vnd.visio', 1177 vst: 'application/vnd.visio', 1178 vsw: 'application/vnd.visio', 1179 vtf: 'image/vnd.valve.source.texture', 1180 vtt: 'text/vtt', 1181 vtu: 'model/vnd.vtu', 1182 vxml: 'application/voicexml+xml', 1183 w3d: 'application/x-director', 1184 wad: 'application/x-doom', 1185 wadl: 'application/vnd.sun.wadl+xml', 1186 war: 'application/java-archive', 1187 wasm: 'application/wasm', 1188 wav: 'audio/x-wav', 1189 wax: 'audio/x-ms-wax', 1190 wbmp: 'image/vnd.wap.wbmp', 1191 wbs: 'application/vnd.criticaltools.wbs+xml', 1192 wbxml: 'application/vnd.wap.wbxml', 1193 wcm: 'application/vnd.ms-works', 1194 wdb: 'application/vnd.ms-works', 1195 wdp: 'image/vnd.ms-photo', 1196 weba: 'audio/webm', 1197 webapp: 'application/x-web-app-manifest+json', 1198 webm: 'video/webm', 1199 webmanifest: 'application/manifest+json', 1200 webp: 'image/webp', 1201 wg: 'application/vnd.pmi.widget', 1202 wgt: 'application/widget', 1203 wks: 'application/vnd.ms-works', 1204 wm: 'video/x-ms-wm', 1205 wma: 'audio/x-ms-wma', 1206 wmd: 'application/x-ms-wmd', 1207 wmf: 'image/wmf', 1208 wml: 'text/vnd.wap.wml', 1209 wmlc: 'application/vnd.wap.wmlc', 1210 wmls: 'text/vnd.wap.wmlscript', 1211 wmlsc: 'application/vnd.wap.wmlscriptc', 1212 wmv: 'video/x-ms-wmv', 1213 wmx: 'video/x-ms-wmx', 1214 wmz: 'application/x-msmetafile', 1215 woff: 'font/woff', 1216 woff2: 'font/woff2', 1217 wpd: 'application/vnd.wordperfect', 1218 wpl: 'application/vnd.ms-wpl', 1219 wps: 'application/vnd.ms-works', 1220 wqd: 'application/vnd.wqd', 1221 wri: 'application/x-mswrite', 1222 wrl: 'model/vrml', 1223 wsc: 'message/vnd.wfa.wsc', 1224 wsdl: 'application/wsdl+xml', 1225 wspolicy: 'application/wspolicy+xml', 1226 wtb: 'application/vnd.webturbo', 1227 wvx: 'video/x-ms-wvx', 1228 x32: 'application/x-authorware-bin', 1229 x3d: 'model/x3d+xml', 1230 x3db: 'model/x3d+fastinfoset', 1231 x3dbz: 'model/x3d+binary', 1232 x3dv: 'model/x3d-vrml', 1233 x3dvz: 'model/x3d+vrml', 1234 x3dz: 'model/x3d+xml', 1235 x_b: 'model/vnd.parasolid.transmit.binary', 1236 x_t: 'model/vnd.parasolid.transmit.text', 1237 xaml: 'application/xaml+xml', 1238 xap: 'application/x-silverlight-app', 1239 xar: 'application/vnd.xara', 1240 xav: 'application/xcap-att+xml', 1241 xbap: 'application/x-ms-xbap', 1242 xbd: 'application/vnd.fujixerox.docuworks.binder', 1243 xbm: 'image/x-xbitmap', 1244 xca: 'application/xcap-caps+xml', 1245 xcs: 'application/calendar+xml', 1246 xdf: 'application/xcap-diff+xml', 1247 xdm: 'application/vnd.syncml.dm+xml', 1248 xdp: 'application/vnd.adobe.xdp+xml', 1249 xdssc: 'application/dssc+xml', 1250 xdw: 'application/vnd.fujixerox.docuworks', 1251 xel: 'application/xcap-el+xml', 1252 xenc: 'application/xenc+xml', 1253 xer: 'application/patch-ops-error+xml', 1254 xfdf: 'application/vnd.adobe.xfdf', 1255 xfdl: 'application/vnd.xfdl', 1256 xht: 'application/xhtml+xml', 1257 xhtml: 'application/xhtml+xml', 1258 xhvml: 'application/xv+xml', 1259 xif: 'image/vnd.xiff', 1260 xla: 'application/vnd.ms-excel', 1261 xlam: 'application/vnd.ms-excel.addin.macroenabled.12', 1262 xlc: 'application/vnd.ms-excel', 1263 xlf: 'application/xliff+xml', 1264 xlm: 'application/vnd.ms-excel', 1265 xls: 'application/vnd.ms-excel', 1266 xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12', 1267 xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12', 1268 xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 1269 xlt: 'application/vnd.ms-excel', 1270 xltm: 'application/vnd.ms-excel.template.macroenabled.12', 1271 xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 1272 xlw: 'application/vnd.ms-excel', 1273 xm: 'audio/xm', 1274 xml: 'text/xml', 1275 xns: 'application/xcap-ns+xml', 1276 xo: 'application/vnd.olpc-sugar', 1277 xop: 'application/xop+xml', 1278 xpi: 'application/x-xpinstall', 1279 xpl: 'application/xproc+xml', 1280 xpm: 'image/x-xpixmap', 1281 xpr: 'application/vnd.is-xpr', 1282 xps: 'application/vnd.ms-xpsdocument', 1283 xpw: 'application/vnd.intercon.formnet', 1284 xpx: 'application/vnd.intercon.formnet', 1285 xsd: 'application/xml', 1286 xsl: 'application/xslt+xml', 1287 xslt: 'application/xslt+xml', 1288 xsm: 'application/vnd.syncml+xml', 1289 xspf: 'application/xspf+xml', 1290 xul: 'application/vnd.mozilla.xul+xml', 1291 xvm: 'application/xv+xml', 1292 xvml: 'application/xv+xml', 1293 xwd: 'image/x-xwindowdump', 1294 xyz: 'chemical/x-xyz', 1295 xz: 'application/x-xz', 1296 yaml: 'text/yaml', 1297 yang: 'application/yang', 1298 yin: 'application/yin+xml', 1299 yml: 'text/yaml', 1300 ymp: 'text/x-suse-ymp', 1301 z1: 'application/x-zmachine', 1302 z2: 'application/x-zmachine', 1303 z3: 'application/x-zmachine', 1304 z4: 'application/x-zmachine', 1305 z5: 'application/x-zmachine', 1306 z6: 'application/x-zmachine', 1307 z7: 'application/x-zmachine', 1308 z8: 'application/x-zmachine', 1309 zaz: 'application/vnd.zzazz.deck+xml', 1310 zip: 'application/zip', 1311 zir: 'application/vnd.zul', 1312 zirz: 'application/vnd.zul', 1313 zmm: 'application/vnd.handheld-entertainment+xml', 1314}