Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
119
fork

Configure Feed

Select the types of activity you want to include in your feed.

at a876aae44ea07494ebea9727350aa060b81f317b 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}