##// END OF EJS Templates
file-store: use our own logic for setting content-type. This solves a problem...
marcink -
r4237:490fbd1d stable
parent child Browse files
Show More
@@ -1,177 +1,195 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2019 RhodeCode GmbH
3 # Copyright (C) 2016-2019 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 import logging
20 import logging
21
21
22 from pyramid.view import view_config
22 from pyramid.view import view_config
23 from pyramid.response import FileResponse
23 from pyramid.response import FileResponse
24 from pyramid.httpexceptions import HTTPFound, HTTPNotFound
24 from pyramid.httpexceptions import HTTPFound, HTTPNotFound
25
25
26 from rhodecode.apps._base import BaseAppView
26 from rhodecode.apps._base import BaseAppView
27 from rhodecode.apps.file_store import utils
27 from rhodecode.apps.file_store import utils
28 from rhodecode.apps.file_store.exceptions import (
28 from rhodecode.apps.file_store.exceptions import (
29 FileNotAllowedException, FileOverSizeException)
29 FileNotAllowedException, FileOverSizeException)
30
30
31 from rhodecode.lib import helpers as h
31 from rhodecode.lib import helpers as h
32 from rhodecode.lib import audit_logger
32 from rhodecode.lib import audit_logger
33 from rhodecode.lib.auth import (
33 from rhodecode.lib.auth import (
34 CSRFRequired, NotAnonymous, HasRepoPermissionAny, HasRepoGroupPermissionAny,
34 CSRFRequired, NotAnonymous, HasRepoPermissionAny, HasRepoGroupPermissionAny,
35 LoginRequired)
35 LoginRequired)
36 from rhodecode.lib.vcs.conf.mtypes import get_mimetypes_db
36 from rhodecode.model.db import Session, FileStore, UserApiKeys
37 from rhodecode.model.db import Session, FileStore, UserApiKeys
37
38
38 log = logging.getLogger(__name__)
39 log = logging.getLogger(__name__)
39
40
40
41
41 class FileStoreView(BaseAppView):
42 class FileStoreView(BaseAppView):
42 upload_key = 'store_file'
43 upload_key = 'store_file'
43
44
44 def load_default_context(self):
45 def load_default_context(self):
45 c = self._get_local_tmpl_context()
46 c = self._get_local_tmpl_context()
46 self.storage = utils.get_file_storage(self.request.registry.settings)
47 self.storage = utils.get_file_storage(self.request.registry.settings)
47 return c
48 return c
48
49
50 def _guess_type(self, file_name):
51 """
52 Our own type guesser for mimetypes using the rich DB
53 """
54 if not hasattr(self, 'db'):
55 self.db = get_mimetypes_db()
56 _content_type, _encoding = self.db.guess_type(file_name, strict=False)
57 return _content_type, _encoding
58
49 def _serve_file(self, file_uid):
59 def _serve_file(self, file_uid):
50
60
51 if not self.storage.exists(file_uid):
61 if not self.storage.exists(file_uid):
52 store_path = self.storage.store_path(file_uid)
62 store_path = self.storage.store_path(file_uid)
53 log.debug('File with FID:%s not found in the store under `%s`',
63 log.debug('File with FID:%s not found in the store under `%s`',
54 file_uid, store_path)
64 file_uid, store_path)
55 raise HTTPNotFound()
65 raise HTTPNotFound()
56
66
57 db_obj = FileStore().query().filter(FileStore.file_uid == file_uid).scalar()
67 db_obj = FileStore().query().filter(FileStore.file_uid == file_uid).scalar()
58 if not db_obj:
68 if not db_obj:
59 raise HTTPNotFound()
69 raise HTTPNotFound()
60
70
61 # private upload for user
71 # private upload for user
62 if db_obj.check_acl and db_obj.scope_user_id:
72 if db_obj.check_acl and db_obj.scope_user_id:
63 log.debug('Artifact: checking scope access for bound artifact user: `%s`',
73 log.debug('Artifact: checking scope access for bound artifact user: `%s`',
64 db_obj.scope_user_id)
74 db_obj.scope_user_id)
65 user = db_obj.user
75 user = db_obj.user
66 if self._rhodecode_db_user.user_id != user.user_id:
76 if self._rhodecode_db_user.user_id != user.user_id:
67 log.warning('Access to file store object forbidden')
77 log.warning('Access to file store object forbidden')
68 raise HTTPNotFound()
78 raise HTTPNotFound()
69
79
70 # scoped to repository permissions
80 # scoped to repository permissions
71 if db_obj.check_acl and db_obj.scope_repo_id:
81 if db_obj.check_acl and db_obj.scope_repo_id:
72 log.debug('Artifact: checking scope access for bound artifact repo: `%s`',
82 log.debug('Artifact: checking scope access for bound artifact repo: `%s`',
73 db_obj.scope_repo_id)
83 db_obj.scope_repo_id)
74 repo = db_obj.repo
84 repo = db_obj.repo
75 perm_set = ['repository.read', 'repository.write', 'repository.admin']
85 perm_set = ['repository.read', 'repository.write', 'repository.admin']
76 has_perm = HasRepoPermissionAny(*perm_set)(repo.repo_name, 'FileStore check')
86 has_perm = HasRepoPermissionAny(*perm_set)(repo.repo_name, 'FileStore check')
77 if not has_perm:
87 if not has_perm:
78 log.warning('Access to file store object `%s` forbidden', file_uid)
88 log.warning('Access to file store object `%s` forbidden', file_uid)
79 raise HTTPNotFound()
89 raise HTTPNotFound()
80
90
81 # scoped to repository group permissions
91 # scoped to repository group permissions
82 if db_obj.check_acl and db_obj.scope_repo_group_id:
92 if db_obj.check_acl and db_obj.scope_repo_group_id:
83 log.debug('Artifact: checking scope access for bound artifact repo group: `%s`',
93 log.debug('Artifact: checking scope access for bound artifact repo group: `%s`',
84 db_obj.scope_repo_group_id)
94 db_obj.scope_repo_group_id)
85 repo_group = db_obj.repo_group
95 repo_group = db_obj.repo_group
86 perm_set = ['group.read', 'group.write', 'group.admin']
96 perm_set = ['group.read', 'group.write', 'group.admin']
87 has_perm = HasRepoGroupPermissionAny(*perm_set)(repo_group.group_name, 'FileStore check')
97 has_perm = HasRepoGroupPermissionAny(*perm_set)(repo_group.group_name, 'FileStore check')
88 if not has_perm:
98 if not has_perm:
89 log.warning('Access to file store object `%s` forbidden', file_uid)
99 log.warning('Access to file store object `%s` forbidden', file_uid)
90 raise HTTPNotFound()
100 raise HTTPNotFound()
91
101
92 FileStore.bump_access_counter(file_uid)
102 FileStore.bump_access_counter(file_uid)
93
103
94 file_path = self.storage.store_path(file_uid)
104 file_path = self.storage.store_path(file_uid)
95 return FileResponse(file_path)
105 content_type = 'application/octet-stream'
106 content_encoding = None
107
108 _content_type, _encoding = self._guess_type(file_path)
109 if _content_type:
110 content_type = _content_type
111
96 # For file store we don't submit any session data, this logic tells the
112 # For file store we don't submit any session data, this logic tells the
97 # Session lib to skip it
113 # Session lib to skip it
98 setattr(self.request, '_file_response', True)
114 setattr(self.request, '_file_response', True)
115 return FileResponse(file_path, request=self.request,
116 content_type=content_type, content_encoding=content_encoding)
99
117
100 @LoginRequired()
118 @LoginRequired()
101 @NotAnonymous()
119 @NotAnonymous()
102 @CSRFRequired()
120 @CSRFRequired()
103 @view_config(route_name='upload_file', request_method='POST', renderer='json_ext')
121 @view_config(route_name='upload_file', request_method='POST', renderer='json_ext')
104 def upload_file(self):
122 def upload_file(self):
105 self.load_default_context()
123 self.load_default_context()
106 file_obj = self.request.POST.get(self.upload_key)
124 file_obj = self.request.POST.get(self.upload_key)
107
125
108 if file_obj is None:
126 if file_obj is None:
109 return {'store_fid': None,
127 return {'store_fid': None,
110 'access_path': None,
128 'access_path': None,
111 'error': '{} data field is missing'.format(self.upload_key)}
129 'error': '{} data field is missing'.format(self.upload_key)}
112
130
113 if not hasattr(file_obj, 'filename'):
131 if not hasattr(file_obj, 'filename'):
114 return {'store_fid': None,
132 return {'store_fid': None,
115 'access_path': None,
133 'access_path': None,
116 'error': 'filename cannot be read from the data field'}
134 'error': 'filename cannot be read from the data field'}
117
135
118 filename = file_obj.filename
136 filename = file_obj.filename
119
137
120 metadata = {
138 metadata = {
121 'user_uploaded': {'username': self._rhodecode_user.username,
139 'user_uploaded': {'username': self._rhodecode_user.username,
122 'user_id': self._rhodecode_user.user_id,
140 'user_id': self._rhodecode_user.user_id,
123 'ip': self._rhodecode_user.ip_addr}}
141 'ip': self._rhodecode_user.ip_addr}}
124 try:
142 try:
125 store_uid, metadata = self.storage.save_file(
143 store_uid, metadata = self.storage.save_file(
126 file_obj.file, filename, extra_metadata=metadata)
144 file_obj.file, filename, extra_metadata=metadata)
127 except FileNotAllowedException:
145 except FileNotAllowedException:
128 return {'store_fid': None,
146 return {'store_fid': None,
129 'access_path': None,
147 'access_path': None,
130 'error': 'File {} is not allowed.'.format(filename)}
148 'error': 'File {} is not allowed.'.format(filename)}
131
149
132 except FileOverSizeException:
150 except FileOverSizeException:
133 return {'store_fid': None,
151 return {'store_fid': None,
134 'access_path': None,
152 'access_path': None,
135 'error': 'File {} is exceeding allowed limit.'.format(filename)}
153 'error': 'File {} is exceeding allowed limit.'.format(filename)}
136
154
137 try:
155 try:
138 entry = FileStore.create(
156 entry = FileStore.create(
139 file_uid=store_uid, filename=metadata["filename"],
157 file_uid=store_uid, filename=metadata["filename"],
140 file_hash=metadata["sha256"], file_size=metadata["size"],
158 file_hash=metadata["sha256"], file_size=metadata["size"],
141 file_description=u'upload attachment',
159 file_description=u'upload attachment',
142 check_acl=False, user_id=self._rhodecode_user.user_id
160 check_acl=False, user_id=self._rhodecode_user.user_id
143 )
161 )
144 Session().add(entry)
162 Session().add(entry)
145 Session().commit()
163 Session().commit()
146 log.debug('Stored upload in DB as %s', entry)
164 log.debug('Stored upload in DB as %s', entry)
147 except Exception:
165 except Exception:
148 log.exception('Failed to store file %s', filename)
166 log.exception('Failed to store file %s', filename)
149 return {'store_fid': None,
167 return {'store_fid': None,
150 'access_path': None,
168 'access_path': None,
151 'error': 'File {} failed to store in DB.'.format(filename)}
169 'error': 'File {} failed to store in DB.'.format(filename)}
152
170
153 return {'store_fid': store_uid,
171 return {'store_fid': store_uid,
154 'access_path': h.route_path('download_file', fid=store_uid)}
172 'access_path': h.route_path('download_file', fid=store_uid)}
155
173
156 # ACL is checked by scopes, if no scope the file is accessible to all
174 # ACL is checked by scopes, if no scope the file is accessible to all
157 @view_config(route_name='download_file')
175 @view_config(route_name='download_file')
158 def download_file(self):
176 def download_file(self):
159 self.load_default_context()
177 self.load_default_context()
160 file_uid = self.request.matchdict['fid']
178 file_uid = self.request.matchdict['fid']
161 log.debug('Requesting FID:%s from store %s', file_uid, self.storage)
179 log.debug('Requesting FID:%s from store %s', file_uid, self.storage)
162 return self._serve_file(file_uid)
180 return self._serve_file(file_uid)
163
181
164 # in addition to @LoginRequired ACL is checked by scopes
182 # in addition to @LoginRequired ACL is checked by scopes
165 @LoginRequired(auth_token_access=[UserApiKeys.ROLE_ARTIFACT_DOWNLOAD])
183 @LoginRequired(auth_token_access=[UserApiKeys.ROLE_ARTIFACT_DOWNLOAD])
166 @NotAnonymous()
184 @NotAnonymous()
167 @view_config(route_name='download_file_by_token')
185 @view_config(route_name='download_file_by_token')
168 def download_file_by_token(self):
186 def download_file_by_token(self):
169 """
187 """
170 Special view that allows to access the download file by special URL that
188 Special view that allows to access the download file by special URL that
171 is stored inside the URL.
189 is stored inside the URL.
172
190
173 http://example.com/_file_store/token-download/TOKEN/FILE_UID
191 http://example.com/_file_store/token-download/TOKEN/FILE_UID
174 """
192 """
175 self.load_default_context()
193 self.load_default_context()
176 file_uid = self.request.matchdict['fid']
194 file_uid = self.request.matchdict['fid']
177 return self._serve_file(file_uid)
195 return self._serve_file(file_uid)
@@ -1,1206 +1,1221 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2014-2019 RhodeCode GmbH
3 # Copyright (C) 2014-2019 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 DEFAULTS = {
22 'encodings_map': {'.gz': 'gzip',
23 '.Z': 'compress',
24 '.bz2': 'bzip2',
25 '.xz': 'xz'},
26 'suffix_map': {'.svgz': '.svg.gz',
27 '.tgz': '.tar.gz',
28 '.taz': '.tar.gz',
29 '.tz': '.tar.gz',
30 '.tbz2': '.tar.bz2',
31 '.txz': '.tar.xz'},
32 }
33
21 TYPES_MAP = [
34 TYPES_MAP = [
22 {'.jpg': 'image/jpg',
35 {'.jpg': 'image/jpg',
23 '.mid': 'audio/midi',
36 '.mid': 'audio/midi',
24 '.midi': 'audio/midi',
37 '.midi': 'audio/midi',
25 '.pct': 'image/pict',
38 '.pct': 'image/pict',
26 '.pic': 'image/pict',
39 '.pic': 'image/pict',
27 '.pict': 'image/pict',
40 '.pict': 'image/pict',
28 '.rtf': 'application/rtf',
41 '.rtf': 'application/rtf',
29 '.xul': 'text/xul'},
42 '.xul': 'text/xul'},
30 {'.123': 'application/vnd.lotus-1-2-3',
43 {'.123': 'application/vnd.lotus-1-2-3',
31 '.3dml': 'text/vnd.in3d.3dml',
44 '.3dml': 'text/vnd.in3d.3dml',
32 '.3g2': 'video/3gpp2',
45 '.3g2': 'video/3gpp2',
33 '.3gp': 'video/3gpp',
46 '.3gp': 'video/3gpp',
34 '.7z': 'application/x-7z-compressed',
47 '.7z': 'application/x-7z-compressed',
35 '.ASM': 'text/x-nasm',
48 '.ASM': 'text/x-nasm',
36 '.C': 'text/x-c++hdr',
49 '.C': 'text/x-c++hdr',
37 '.COB': 'text/x-cobol',
50 '.COB': 'text/x-cobol',
38 '.CPP': 'text/x-c++hdr',
51 '.CPP': 'text/x-c++hdr',
39 '.CPY': 'text/x-cobol',
52 '.CPY': 'text/x-cobol',
40 '.F': 'text/x-fortran',
53 '.F': 'text/x-fortran',
41 '.F90': 'text/x-fortran',
54 '.F90': 'text/x-fortran',
42 '.H': 'text/x-c++hdr',
55 '.H': 'text/x-c++hdr',
43 '.R': 'text/S-plus',
56 '.R': 'text/S-plus',
44 '.Rd': 'text/x-r-doc',
57 '.Rd': 'text/x-r-doc',
45 '.S': 'text/S-plus',
58 '.S': 'text/S-plus',
46 '.[1234567]': 'application/x-troff',
59 '.[1234567]': 'application/x-troff',
47 '.a': 'application/octet-stream',
60 '.a': 'application/octet-stream',
48 '.aab': 'application/x-authorware-bin',
61 '.aab': 'application/x-authorware-bin',
49 '.aac': 'audio/x-aac',
62 '.aac': 'audio/x-aac',
50 '.aam': 'application/x-authorware-map',
63 '.aam': 'application/x-authorware-map',
51 '.aas': 'application/x-authorware-seg',
64 '.aas': 'application/x-authorware-seg',
52 '.abap': 'text/x-abap',
65 '.abap': 'text/x-abap',
53 '.abw': 'application/x-abiword',
66 '.abw': 'application/x-abiword',
54 '.ac': 'application/pkix-attr-cert',
67 '.ac': 'application/pkix-attr-cert',
55 '.acc': 'application/vnd.americandynamics.acc',
68 '.acc': 'application/vnd.americandynamics.acc',
56 '.ace': 'application/x-ace-compressed',
69 '.ace': 'application/x-ace-compressed',
57 '.acu': 'application/vnd.acucobol',
70 '.acu': 'application/vnd.acucobol',
58 '.acutc': 'application/vnd.acucorp',
71 '.acutc': 'application/vnd.acucorp',
59 '.ada': 'text/x-ada',
72 '.ada': 'text/x-ada',
60 '.adb': 'text/x-ada',
73 '.adb': 'text/x-ada',
61 '.adp': 'audio/adpcm',
74 '.adp': 'audio/adpcm',
62 '.ads': 'text/x-ada',
75 '.ads': 'text/x-ada',
63 '.aep': 'application/vnd.audiograph',
76 '.aep': 'application/vnd.audiograph',
64 '.afm': 'application/x-font-type1',
77 '.afm': 'application/x-font-type1',
65 '.afp': 'application/vnd.ibm.modcap',
78 '.afp': 'application/vnd.ibm.modcap',
66 '.ahead': 'application/vnd.ahead.space',
79 '.ahead': 'application/vnd.ahead.space',
67 '.ahk': 'text/x-autohotkey',
80 '.ahk': 'text/x-autohotkey',
68 '.ahkl': 'text/x-autohotkey',
81 '.ahkl': 'text/x-autohotkey',
69 '.ai': 'application/postscript',
82 '.ai': 'application/postscript',
70 '.aif': 'audio/x-aiff',
83 '.aif': 'audio/x-aiff',
71 '.aifc': 'audio/x-aiff',
84 '.aifc': 'audio/x-aiff',
72 '.aiff': 'audio/x-aiff',
85 '.aiff': 'audio/x-aiff',
73 '.air': 'application/vnd.adobe.air-application-installer-package+zip',
86 '.air': 'application/vnd.adobe.air-application-installer-package+zip',
74 '.ait': 'application/vnd.dvb.ait',
87 '.ait': 'application/vnd.dvb.ait',
75 '.aj': 'text/x-aspectj',
88 '.aj': 'text/x-aspectj',
76 '.ami': 'application/vnd.amiga.ami',
89 '.ami': 'application/vnd.amiga.ami',
77 '.apk': 'application/vnd.android.package-archive',
90 '.apk': 'application/vnd.android.package-archive',
78 '.application': 'application/x-ms-application',
91 '.application': 'application/x-ms-application',
79 '.apr': 'application/vnd.lotus-approach',
92 '.apr': 'application/vnd.lotus-approach',
80 '.as': 'application/x-actionscript3',
93 '.as': 'application/x-actionscript3',
81 '.asc': 'application/pgp-signature',
94 '.asc': 'application/pgp-signature',
82 '.asf': 'video/x-ms-asf',
95 '.asf': 'video/x-ms-asf',
83 '.asm': 'text/x-asm',
96 '.asm': 'text/x-asm',
84 '.aso': 'application/vnd.accpac.simply.aso',
97 '.aso': 'application/vnd.accpac.simply.aso',
85 '.aspx': 'application/x-aspx',
98 '.aspx': 'application/x-aspx',
86 '.asx': 'video/x-ms-asf',
99 '.asx': 'video/x-ms-asf',
87 '.asy': 'text/x-asymptote',
100 '.asy': 'text/x-asymptote',
88 '.atc': 'application/vnd.acucorp',
101 '.atc': 'application/vnd.acucorp',
89 '.atom': 'application/atom+xml',
102 '.atom': 'application/atom+xml',
90 '.atomcat': 'application/atomcat+xml',
103 '.atomcat': 'application/atomcat+xml',
91 '.atomsvc': 'application/atomsvc+xml',
104 '.atomsvc': 'application/atomsvc+xml',
92 '.atx': 'application/vnd.antix.game-component',
105 '.atx': 'application/vnd.antix.game-component',
93 '.au': 'audio/basic',
106 '.au': 'audio/basic',
94 '.au3': 'text/x-autoit',
107 '.au3': 'text/x-autoit',
95 '.aux': 'text/x-tex',
108 '.aux': 'text/x-tex',
96 '.avi': 'video/x-msvideo',
109 '.avi': 'video/x-msvideo',
97 '.aw': 'application/applixware',
110 '.aw': 'application/applixware',
98 '.awk': 'application/x-awk',
111 '.awk': 'application/x-awk',
99 '.azf': 'application/vnd.airzip.filesecure.azf',
112 '.azf': 'application/vnd.airzip.filesecure.azf',
100 '.azs': 'application/vnd.airzip.filesecure.azs',
113 '.azs': 'application/vnd.airzip.filesecure.azs',
101 '.azw': 'application/vnd.amazon.ebook',
114 '.azw': 'application/vnd.amazon.ebook',
102 '.b': 'application/x-brainfuck',
115 '.b': 'application/x-brainfuck',
103 '.bas': 'text/x-vbnet',
116 '.bas': 'text/x-vbnet',
104 '.bash': 'text/x-sh',
117 '.bash': 'text/x-sh',
105 '.bat': 'application/x-msdownload',
118 '.bat': 'application/x-msdownload',
106 '.bcpio': 'application/x-bcpio',
119 '.bcpio': 'application/x-bcpio',
107 '.bdf': 'application/x-font-bdf',
120 '.bdf': 'application/x-font-bdf',
108 '.bdm': 'application/vnd.syncml.dm+wbxml',
121 '.bdm': 'application/vnd.syncml.dm+wbxml',
109 '.bed': 'application/vnd.realvnc.bed',
122 '.bed': 'application/vnd.realvnc.bed',
110 '.befunge': 'application/x-befunge',
123 '.befunge': 'application/x-befunge',
111 '.bf': 'application/x-brainfuck',
124 '.bf': 'application/x-brainfuck',
112 '.bh2': 'application/vnd.fujitsu.oasysprs',
125 '.bh2': 'application/vnd.fujitsu.oasysprs',
113 '.bin': 'application/octet-stream',
126 '.bin': 'application/octet-stream',
114 '.bmi': 'application/vnd.bmi',
127 '.bmi': 'application/vnd.bmi',
115 '.bmp': 'image/bmp',
128 '.bmp': 'image/bmp',
116 '.bmx': 'text/x-bmx',
129 '.bmx': 'text/x-bmx',
117 '.boo': 'text/x-boo',
130 '.boo': 'text/x-boo',
118 '.book': 'application/vnd.framemaker',
131 '.book': 'application/vnd.framemaker',
119 '.box': 'application/vnd.previewsystems.box',
132 '.box': 'application/vnd.previewsystems.box',
120 '.boz': 'application/x-bzip2',
133 '.boz': 'application/x-bzip2',
121 '.bpk': 'application/octet-stream',
134 '.bpk': 'application/octet-stream',
122 '.btif': 'image/prs.btif',
135 '.btif': 'image/prs.btif',
123 '.bz': 'application/x-bzip',
136 '.bz': 'application/x-bzip',
124 '.bz2': 'application/x-bzip2',
137 '.bz2': 'application/x-bzip2',
125 '.c': 'text/x-c',
138 '.c': 'text/x-c',
126 '.c++': 'text/x-c++hdr',
139 '.c++': 'text/x-c++hdr',
127 '.c++-objdump': 'text/x-cpp-objdump',
140 '.c++-objdump': 'text/x-cpp-objdump',
128 '.c-objdump': 'text/x-c-objdump',
141 '.c-objdump': 'text/x-c-objdump',
129 '.c11amc': 'application/vnd.cluetrust.cartomobile-config',
142 '.c11amc': 'application/vnd.cluetrust.cartomobile-config',
130 '.c11amz': 'application/vnd.cluetrust.cartomobile-config-pkg',
143 '.c11amz': 'application/vnd.cluetrust.cartomobile-config-pkg',
131 '.c4d': 'application/vnd.clonk.c4group',
144 '.c4d': 'application/vnd.clonk.c4group',
132 '.c4f': 'application/vnd.clonk.c4group',
145 '.c4f': 'application/vnd.clonk.c4group',
133 '.c4g': 'application/vnd.clonk.c4group',
146 '.c4g': 'application/vnd.clonk.c4group',
134 '.c4p': 'application/vnd.clonk.c4group',
147 '.c4p': 'application/vnd.clonk.c4group',
135 '.c4u': 'application/vnd.clonk.c4group',
148 '.c4u': 'application/vnd.clonk.c4group',
136 '.cab': 'application/vnd.ms-cab-compressed',
149 '.cab': 'application/vnd.ms-cab-compressed',
137 '.car': 'application/vnd.curl.car',
150 '.car': 'application/vnd.curl.car',
138 '.cat': 'application/vnd.ms-pki.seccat',
151 '.cat': 'application/vnd.ms-pki.seccat',
139 '.cc': 'text/x-c',
152 '.cc': 'text/x-c',
140 '.cct': 'application/x-director',
153 '.cct': 'application/x-director',
141 '.ccxml': 'application/ccxml+xml',
154 '.ccxml': 'application/ccxml+xml',
142 '.cdbcmsg': 'application/vnd.contact.cmsg',
155 '.cdbcmsg': 'application/vnd.contact.cmsg',
143 '.cdf': 'application/x-netcdf',
156 '.cdf': 'application/x-netcdf',
144 '.cdkey': 'application/vnd.mediastation.cdkey',
157 '.cdkey': 'application/vnd.mediastation.cdkey',
145 '.cdmia': 'application/cdmi-capability',
158 '.cdmia': 'application/cdmi-capability',
146 '.cdmic': 'application/cdmi-container',
159 '.cdmic': 'application/cdmi-container',
147 '.cdmid': 'application/cdmi-domain',
160 '.cdmid': 'application/cdmi-domain',
148 '.cdmio': 'application/cdmi-object',
161 '.cdmio': 'application/cdmi-object',
149 '.cdmiq': 'application/cdmi-queue',
162 '.cdmiq': 'application/cdmi-queue',
150 '.cdx': 'chemical/x-cdx',
163 '.cdx': 'chemical/x-cdx',
151 '.cdxml': 'application/vnd.chemdraw+xml',
164 '.cdxml': 'application/vnd.chemdraw+xml',
152 '.cdy': 'application/vnd.cinderella',
165 '.cdy': 'application/vnd.cinderella',
153 '.cer': 'application/pkix-cert',
166 '.cer': 'application/pkix-cert',
154 '.ceylon': 'text/x-ceylon',
167 '.ceylon': 'text/x-ceylon',
155 '.cfc': 'application/x-coldfusion',
168 '.cfc': 'application/x-coldfusion',
156 '.cfg': 'text/x-ini',
169 '.cfg': 'text/x-ini',
157 '.cfm': 'application/x-coldfusion',
170 '.cfm': 'application/x-coldfusion',
158 '.cfml': 'application/x-coldfusion',
171 '.cfml': 'application/x-coldfusion',
159 '.cgm': 'image/cgm',
172 '.cgm': 'image/cgm',
160 '.chat': 'application/x-chat',
173 '.chat': 'application/x-chat',
161 '.chm': 'application/vnd.ms-htmlhelp',
174 '.chm': 'application/vnd.ms-htmlhelp',
162 '.chrt': 'application/vnd.kde.kchart',
175 '.chrt': 'application/vnd.kde.kchart',
163 '.cif': 'chemical/x-cif',
176 '.cif': 'chemical/x-cif',
164 '.cii': 'application/vnd.anser-web-certificate-issue-initiation',
177 '.cii': 'application/vnd.anser-web-certificate-issue-initiation',
165 '.cil': 'application/vnd.ms-artgalry',
178 '.cil': 'application/vnd.ms-artgalry',
166 '.cl': 'text/x-common-lisp',
179 '.cl': 'text/x-common-lisp',
167 '.cla': 'application/vnd.claymore',
180 '.cla': 'application/vnd.claymore',
168 '.class': 'application/java-vm',
181 '.class': 'application/java-vm',
169 '.clj': 'text/x-clojure',
182 '.clj': 'text/x-clojure',
170 '.clkk': 'application/vnd.crick.clicker.keyboard',
183 '.clkk': 'application/vnd.crick.clicker.keyboard',
171 '.clkp': 'application/vnd.crick.clicker.palette',
184 '.clkp': 'application/vnd.crick.clicker.palette',
172 '.clkt': 'application/vnd.crick.clicker.template',
185 '.clkt': 'application/vnd.crick.clicker.template',
173 '.clkw': 'application/vnd.crick.clicker.wordbank',
186 '.clkw': 'application/vnd.crick.clicker.wordbank',
174 '.clkx': 'application/vnd.crick.clicker',
187 '.clkx': 'application/vnd.crick.clicker',
175 '.clp': 'application/x-msclip',
188 '.clp': 'application/x-msclip',
176 '.cls': 'text/x-openedge',
189 '.cls': 'text/x-openedge',
177 '.cmake': 'text/x-cmake',
190 '.cmake': 'text/x-cmake',
178 '.cmc': 'application/vnd.cosmocaller',
191 '.cmc': 'application/vnd.cosmocaller',
179 '.cmd': 'application/x-dos-batch',
192 '.cmd': 'application/x-dos-batch',
180 '.cmdf': 'chemical/x-cmdf',
193 '.cmdf': 'chemical/x-cmdf',
181 '.cml': 'chemical/x-cml',
194 '.cml': 'chemical/x-cml',
182 '.cmp': 'application/vnd.yellowriver-custom-menu',
195 '.cmp': 'application/vnd.yellowriver-custom-menu',
183 '.cmx': 'image/x-cmx',
196 '.cmx': 'image/x-cmx',
184 '.cob': 'text/x-cobol',
197 '.cob': 'text/x-cobol',
185 '.cod': 'application/vnd.rim.cod',
198 '.cod': 'application/vnd.rim.cod',
186 '.coffee': 'text/coffeescript',
199 '.coffee': 'text/coffeescript',
187 '.com': 'application/x-msdownload',
200 '.com': 'application/x-msdownload',
188 '.conf': 'text/plain',
201 '.conf': 'text/plain',
189 '.cp': 'text/x-c++hdr',
202 '.cp': 'text/x-c++hdr',
190 '.cpio': 'application/x-cpio',
203 '.cpio': 'application/x-cpio',
191 '.cpp': 'text/x-c',
204 '.cpp': 'text/x-c',
192 '.cpp-objdump': 'text/x-cpp-objdump',
205 '.cpp-objdump': 'text/x-cpp-objdump',
193 '.cpt': 'application/mac-compactpro',
206 '.cpt': 'application/mac-compactpro',
194 '.cpy': 'text/x-cobol',
207 '.cpy': 'text/x-cobol',
195 '.crd': 'application/x-mscardfile',
208 '.crd': 'application/x-mscardfile',
196 '.crl': 'application/pkix-crl',
209 '.crl': 'application/pkix-crl',
197 '.croc': 'text/x-crocsrc',
210 '.croc': 'text/x-crocsrc',
198 '.crt': 'application/x-x509-ca-cert',
211 '.crt': 'application/x-x509-ca-cert',
199 '.cryptonote': 'application/vnd.rig.cryptonote',
212 '.cryptonote': 'application/vnd.rig.cryptonote',
200 '.cs': 'text/x-csharp',
213 '.cs': 'text/x-csharp',
201 '.csh': 'application/x-csh',
214 '.csh': 'application/x-csh',
202 '.csml': 'chemical/x-csml',
215 '.csml': 'chemical/x-csml',
203 '.csp': 'application/vnd.commonspace',
216 '.csp': 'application/vnd.commonspace',
204 '.css': 'text/css',
217 '.css': 'text/css',
205 '.cst': 'application/x-director',
218 '.cst': 'application/x-director',
206 '.csv': 'text/csv',
219 '.csv': 'text/csv',
207 '.cu': 'application/cu-seeme',
220 '.cu': 'application/cu-seeme',
208 '.cuh': 'text/x-cuda',
221 '.cuh': 'text/x-cuda',
209 '.curl': 'text/vnd.curl',
222 '.curl': 'text/vnd.curl',
210 '.cww': 'application/prs.cww',
223 '.cww': 'application/prs.cww',
211 '.cxt': 'application/x-director',
224 '.cxt': 'application/x-director',
212 '.cxx': 'text/x-c',
225 '.cxx': 'text/x-c',
213 '.cxx-objdump': 'text/x-cpp-objdump',
226 '.cxx-objdump': 'text/x-cpp-objdump',
214 '.d': 'text/x-dsrc',
227 '.d': 'text/x-dsrc',
215 '.d-objdump': 'text/x-d-objdump',
228 '.d-objdump': 'text/x-d-objdump',
216 '.dae': 'model/vnd.collada+xml',
229 '.dae': 'model/vnd.collada+xml',
217 '.daf': 'application/vnd.mobius.daf',
230 '.daf': 'application/vnd.mobius.daf',
218 '.dart': 'text/x-dart',
231 '.dart': 'text/x-dart',
219 '.dataless': 'application/vnd.fdsn.seed',
232 '.dataless': 'application/vnd.fdsn.seed',
220 '.davmount': 'application/davmount+xml',
233 '.davmount': 'application/davmount+xml',
221 '.dcr': 'application/x-director',
234 '.dcr': 'application/x-director',
222 '.dcurl': 'text/vnd.curl.dcurl',
235 '.dcurl': 'text/vnd.curl.dcurl',
223 '.dd2': 'application/vnd.oma.dd2+xml',
236 '.dd2': 'application/vnd.oma.dd2+xml',
224 '.ddd': 'application/vnd.fujixerox.ddd',
237 '.ddd': 'application/vnd.fujixerox.ddd',
225 '.deb': 'application/x-debian-package',
238 '.deb': 'application/x-debian-package',
226 '.def': 'text/plain',
239 '.def': 'text/plain',
227 '.deploy': 'application/octet-stream',
240 '.deploy': 'application/octet-stream',
228 '.der': 'application/x-x509-ca-cert',
241 '.der': 'application/x-x509-ca-cert',
229 '.dfac': 'application/vnd.dreamfactory',
242 '.dfac': 'application/vnd.dreamfactory',
230 '.dg': 'text/x-dg',
243 '.dg': 'text/x-dg',
231 '.di': 'text/x-dsrc',
244 '.di': 'text/x-dsrc',
232 '.dic': 'text/x-c',
245 '.dic': 'text/x-c',
233 '.dif': 'video/x-dv',
246 '.dif': 'video/x-dv',
234 '.diff': 'text/x-diff',
247 '.diff': 'text/x-diff',
235 '.dir': 'application/x-director',
248 '.dir': 'application/x-director',
236 '.dis': 'application/vnd.mobius.dis',
249 '.dis': 'application/vnd.mobius.dis',
237 '.dist': 'application/octet-stream',
250 '.dist': 'application/octet-stream',
238 '.distz': 'application/octet-stream',
251 '.distz': 'application/octet-stream',
239 '.djv': 'image/vnd.djvu',
252 '.djv': 'image/vnd.djvu',
240 '.djvu': 'image/vnd.djvu',
253 '.djvu': 'image/vnd.djvu',
241 '.dll': 'application/x-msdownload',
254 '.dll': 'application/x-msdownload',
242 '.dmg': 'application/octet-stream',
255 '.dmg': 'application/octet-stream',
243 '.dms': 'application/octet-stream',
256 '.dms': 'application/octet-stream',
244 '.dna': 'application/vnd.dna',
257 '.dna': 'application/vnd.dna',
245 '.doc': 'application/msword',
258 '.doc': 'application/msword',
246 '.docm': 'application/vnd.ms-word.document.macroenabled.12',
259 '.docm': 'application/vnd.ms-word.document.macroenabled.12',
247 '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
260 '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
248 '.dot': 'application/msword',
261 '.dot': 'application/msword',
249 '.dotm': 'application/vnd.ms-word.template.macroenabled.12',
262 '.dotm': 'application/vnd.ms-word.template.macroenabled.12',
250 '.dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
263 '.dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
251 '.dp': 'application/vnd.osgi.dp',
264 '.dp': 'application/vnd.osgi.dp',
252 '.dpg': 'application/vnd.dpgraph',
265 '.dpg': 'application/vnd.dpgraph',
253 '.dra': 'audio/vnd.dra',
266 '.dra': 'audio/vnd.dra',
254 '.dsc': 'text/prs.lines.tag',
267 '.dsc': 'text/prs.lines.tag',
255 '.dssc': 'application/dssc+der',
268 '.dssc': 'application/dssc+der',
256 '.dtb': 'application/x-dtbook+xml',
269 '.dtb': 'application/x-dtbook+xml',
257 '.dtd': 'application/xml-dtd',
270 '.dtd': 'application/xml-dtd',
258 '.dts': 'audio/vnd.dts',
271 '.dts': 'audio/vnd.dts',
259 '.dtshd': 'audio/vnd.dts.hd',
272 '.dtshd': 'audio/vnd.dts.hd',
260 '.duby': 'text/x-ruby',
273 '.duby': 'text/x-ruby',
261 '.duel': 'text/x-duel',
274 '.duel': 'text/x-duel',
262 '.dump': 'application/octet-stream',
275 '.dump': 'application/octet-stream',
263 '.dv': 'video/x-dv',
276 '.dv': 'video/x-dv',
264 '.dvi': 'application/x-dvi',
277 '.dvi': 'application/x-dvi',
265 '.dwf': 'model/vnd.dwf',
278 '.dwf': 'model/vnd.dwf',
266 '.dwg': 'image/vnd.dwg',
279 '.dwg': 'image/vnd.dwg',
267 '.dxf': 'image/vnd.dxf',
280 '.dxf': 'image/vnd.dxf',
268 '.dxp': 'application/vnd.spotfire.dxp',
281 '.dxp': 'application/vnd.spotfire.dxp',
269 '.dxr': 'application/x-director',
282 '.dxr': 'application/x-director',
270 '.dyl': 'text/x-dylan',
283 '.dyl': 'text/x-dylan',
271 '.dylan': 'text/x-dylan',
284 '.dylan': 'text/x-dylan',
272 '.dylan-console': 'text/x-dylan-console',
285 '.dylan-console': 'text/x-dylan-console',
273 '.ebuild': 'text/x-sh',
286 '.ebuild': 'text/x-sh',
274 '.ec': 'text/x-echdr',
287 '.ec': 'text/x-echdr',
275 '.ecelp4800': 'audio/vnd.nuera.ecelp4800',
288 '.ecelp4800': 'audio/vnd.nuera.ecelp4800',
276 '.ecelp7470': 'audio/vnd.nuera.ecelp7470',
289 '.ecelp7470': 'audio/vnd.nuera.ecelp7470',
277 '.ecelp9600': 'audio/vnd.nuera.ecelp9600',
290 '.ecelp9600': 'audio/vnd.nuera.ecelp9600',
278 '.ecl': 'text/x-ecl',
291 '.ecl': 'text/x-ecl',
279 '.eclass': 'text/x-sh',
292 '.eclass': 'text/x-sh',
280 '.ecma': 'application/ecmascript',
293 '.ecma': 'application/ecmascript',
281 '.edm': 'application/vnd.novadigm.edm',
294 '.edm': 'application/vnd.novadigm.edm',
282 '.edx': 'application/vnd.novadigm.edx',
295 '.edx': 'application/vnd.novadigm.edx',
283 '.efif': 'application/vnd.picsel',
296 '.efif': 'application/vnd.picsel',
284 '.eh': 'text/x-echdr',
297 '.eh': 'text/x-echdr',
285 '.ei6': 'application/vnd.pg.osasli',
298 '.ei6': 'application/vnd.pg.osasli',
286 '.el': 'text/x-common-lisp',
299 '.el': 'text/x-common-lisp',
287 '.elc': 'application/octet-stream',
300 '.elc': 'application/octet-stream',
288 '.eml': 'message/rfc822',
301 '.eml': 'message/rfc822',
289 '.emma': 'application/emma+xml',
302 '.emma': 'application/emma+xml',
290 '.eol': 'audio/vnd.digital-winds',
303 '.eol': 'audio/vnd.digital-winds',
291 '.eot': 'application/vnd.ms-fontobject',
304 '.eot': 'application/vnd.ms-fontobject',
292 '.eps': 'application/postscript',
305 '.eps': 'application/postscript',
293 '.epub': 'application/epub+zip',
306 '.epub': 'application/epub+zip',
294 '.erl': 'text/x-erlang',
307 '.erl': 'text/x-erlang',
295 '.erl-sh': 'text/x-erl-shellsession',
308 '.erl-sh': 'text/x-erl-shellsession',
296 '.es': 'text/x-erlang',
309 '.es': 'text/x-erlang',
297 '.es3': 'application/vnd.eszigno3+xml',
310 '.es3': 'application/vnd.eszigno3+xml',
298 '.escript': 'text/x-erlang',
311 '.escript': 'text/x-erlang',
299 '.esf': 'application/vnd.epson.esf',
312 '.esf': 'application/vnd.epson.esf',
300 '.et3': 'application/vnd.eszigno3+xml',
313 '.et3': 'application/vnd.eszigno3+xml',
301 '.etx': 'text/x-setext',
314 '.etx': 'text/x-setext',
302 '.evoque': 'application/x-evoque',
315 '.evoque': 'application/x-evoque',
303 '.ex': 'text/x-elixir',
316 '.ex': 'text/x-elixir',
304 '.exe': 'application/x-msdownload',
317 '.exe': 'application/x-msdownload',
305 '.exi': 'application/exi',
318 '.exi': 'application/exi',
306 '.exs': 'text/x-elixir',
319 '.exs': 'text/x-elixir',
307 '.ext': 'application/vnd.novadigm.ext',
320 '.ext': 'application/vnd.novadigm.ext',
308 '.ez': 'application/andrew-inset',
321 '.ez': 'application/andrew-inset',
309 '.ez2': 'application/vnd.ezpix-album',
322 '.ez2': 'application/vnd.ezpix-album',
310 '.ez3': 'application/vnd.ezpix-package',
323 '.ez3': 'application/vnd.ezpix-package',
311 '.f': 'text/x-fortran',
324 '.f': 'text/x-fortran',
312 '.f4v': 'video/x-f4v',
325 '.f4v': 'video/x-f4v',
313 '.f77': 'text/x-fortran',
326 '.f77': 'text/x-fortran',
314 '.f90': 'text/x-fortran',
327 '.f90': 'text/x-fortran',
315 '.factor': 'text/x-factor',
328 '.factor': 'text/x-factor',
316 '.fan': 'application/x-fantom',
329 '.fan': 'application/x-fantom',
317 '.fancypack': 'text/x-fancysrc',
330 '.fancypack': 'text/x-fancysrc',
318 '.fbs': 'image/vnd.fastbidsheet',
331 '.fbs': 'image/vnd.fastbidsheet',
319 '.fcs': 'application/vnd.isac.fcs',
332 '.fcs': 'application/vnd.isac.fcs',
320 '.fdf': 'application/vnd.fdf',
333 '.fdf': 'application/vnd.fdf',
321 '.fe_launch': 'application/vnd.denovo.fcselayout-link',
334 '.fe_launch': 'application/vnd.denovo.fcselayout-link',
322 '.feature': 'text/x-gherkin',
335 '.feature': 'text/x-gherkin',
323 '.fg5': 'application/vnd.fujitsu.oasysgp',
336 '.fg5': 'application/vnd.fujitsu.oasysgp',
324 '.fgd': 'application/x-director',
337 '.fgd': 'application/x-director',
325 '.fh': 'image/x-freehand',
338 '.fh': 'image/x-freehand',
326 '.fh4': 'image/x-freehand',
339 '.fh4': 'image/x-freehand',
327 '.fh5': 'image/x-freehand',
340 '.fh5': 'image/x-freehand',
328 '.fh7': 'image/x-freehand',
341 '.fh7': 'image/x-freehand',
329 '.fhc': 'image/x-freehand',
342 '.fhc': 'image/x-freehand',
330 '.fig': 'application/x-xfig',
343 '.fig': 'application/x-xfig',
331 '.fli': 'video/x-fli',
344 '.fli': 'video/x-fli',
332 '.flo': 'application/vnd.micrografx.flo',
345 '.flo': 'application/vnd.micrografx.flo',
333 '.flv': 'video/x-flv',
346 '.flv': 'video/x-flv',
334 '.flw': 'application/vnd.kde.kivio',
347 '.flw': 'application/vnd.kde.kivio',
335 '.flx': 'text/vnd.fmi.flexstor',
348 '.flx': 'text/vnd.fmi.flexstor',
336 '.flxh': 'text/x-felix',
349 '.flxh': 'text/x-felix',
337 '.fly': 'text/vnd.fly',
350 '.fly': 'text/vnd.fly',
338 '.fm': 'application/vnd.framemaker',
351 '.fm': 'application/vnd.framemaker',
339 '.fnc': 'application/vnd.frogans.fnc',
352 '.fnc': 'application/vnd.frogans.fnc',
340 '.for': 'text/x-fortran',
353 '.for': 'text/x-fortran',
341 '.fpx': 'image/vnd.fpx',
354 '.fpx': 'image/vnd.fpx',
342 '.frag': 'text/x-glslsrc',
355 '.frag': 'text/x-glslsrc',
343 '.frame': 'application/vnd.framemaker',
356 '.frame': 'application/vnd.framemaker',
344 '.fs': 'text/x-fsharp',
357 '.fs': 'text/x-fsharp',
345 '.fsc': 'application/vnd.fsc.weblaunch',
358 '.fsc': 'application/vnd.fsc.weblaunch',
346 '.fsi': 'text/x-fsharp',
359 '.fsi': 'text/x-fsharp',
347 '.fst': 'image/vnd.fst',
360 '.fst': 'image/vnd.fst',
348 '.ftc': 'application/vnd.fluxtime.clip',
361 '.ftc': 'application/vnd.fluxtime.clip',
349 '.fti': 'application/vnd.anser-web-funds-transfer-initiation',
362 '.fti': 'application/vnd.anser-web-funds-transfer-initiation',
350 '.fun': 'text/x-standardml',
363 '.fun': 'text/x-standardml',
351 '.fvt': 'video/vnd.fvt',
364 '.fvt': 'video/vnd.fvt',
352 '.fxp': 'application/vnd.adobe.fxp',
365 '.fxp': 'application/vnd.adobe.fxp',
353 '.fxpl': 'application/vnd.adobe.fxp',
366 '.fxpl': 'application/vnd.adobe.fxp',
354 '.fy': 'text/x-fancysrc',
367 '.fy': 'text/x-fancysrc',
355 '.fzs': 'application/vnd.fuzzysheet',
368 '.fzs': 'application/vnd.fuzzysheet',
356 '.g2w': 'application/vnd.geoplan',
369 '.g2w': 'application/vnd.geoplan',
357 '.g3': 'image/g3fax',
370 '.g3': 'image/g3fax',
358 '.g3w': 'application/vnd.geospace',
371 '.g3w': 'application/vnd.geospace',
359 '.gac': 'application/vnd.groove-account',
372 '.gac': 'application/vnd.groove-account',
360 '.gdc': 'text/x-gooddata-cl',
373 '.gdc': 'text/x-gooddata-cl',
361 '.gdl': 'model/vnd.gdl',
374 '.gdl': 'model/vnd.gdl',
362 '.gemspec': 'text/x-ruby',
375 '.gemspec': 'text/x-ruby',
363 '.geo': 'application/vnd.dynageo',
376 '.geo': 'application/vnd.dynageo',
364 '.gex': 'application/vnd.geometry-explorer',
377 '.gex': 'application/vnd.geometry-explorer',
365 '.ggb': 'application/vnd.geogebra.file',
378 '.ggb': 'application/vnd.geogebra.file',
366 '.ggt': 'application/vnd.geogebra.tool',
379 '.ggt': 'application/vnd.geogebra.tool',
367 '.ghf': 'application/vnd.groove-help',
380 '.ghf': 'application/vnd.groove-help',
368 '.gif': 'image/gif',
381 '.gif': 'image/gif',
369 '.gim': 'application/vnd.groove-identity-message',
382 '.gim': 'application/vnd.groove-identity-message',
370 '.gmx': 'application/vnd.gmx',
383 '.gmx': 'application/vnd.gmx',
371 '.gnumeric': 'application/x-gnumeric',
384 '.gnumeric': 'application/x-gnumeric',
372 '.go': 'text/x-gosrc',
385 '.go': 'text/x-gosrc',
373 '.gph': 'application/vnd.flographit',
386 '.gph': 'application/vnd.flographit',
374 '.gqf': 'application/vnd.grafeq',
387 '.gqf': 'application/vnd.grafeq',
375 '.gqs': 'application/vnd.grafeq',
388 '.gqs': 'application/vnd.grafeq',
376 '.gram': 'application/srgs',
389 '.gram': 'application/srgs',
377 '.gre': 'application/vnd.geometry-explorer',
390 '.gre': 'application/vnd.geometry-explorer',
378 '.groovy': 'text/x-groovy',
391 '.groovy': 'text/x-groovy',
379 '.grv': 'application/vnd.groove-injector',
392 '.grv': 'application/vnd.groove-injector',
380 '.grxml': 'application/srgs+xml',
393 '.grxml': 'application/srgs+xml',
381 '.gs': 'text/x-gosu',
394 '.gs': 'text/x-gosu',
382 '.gsf': 'application/x-font-ghostscript',
395 '.gsf': 'application/x-font-ghostscript',
383 '.gsp': 'text/x-gosu',
396 '.gsp': 'text/x-gosu',
384 '.gst': 'text/x-gosu-template',
397 '.gst': 'text/x-gosu-template',
385 '.gsx': 'text/x-gosu',
398 '.gsx': 'text/x-gosu',
386 '.gtar': 'application/x-gtar',
399 '.gtar': 'application/x-gtar',
387 '.gtm': 'application/vnd.groove-tool-message',
400 '.gtm': 'application/vnd.groove-tool-message',
388 '.gtw': 'model/vnd.gtw',
401 '.gtw': 'model/vnd.gtw',
389 '.gv': 'text/vnd.graphviz',
402 '.gv': 'text/vnd.graphviz',
390 '.gxt': 'application/vnd.geonext',
403 '.gxt': 'application/vnd.geonext',
391 '.h': 'text/x-c',
404 '.h': 'text/x-c',
392 '.h++': 'text/x-c++hdr',
405 '.h++': 'text/x-c++hdr',
393 '.h261': 'video/h261',
406 '.h261': 'video/h261',
394 '.h263': 'video/h263',
407 '.h263': 'video/h263',
395 '.h264': 'video/h264',
408 '.h264': 'video/h264',
396 '.hal': 'application/vnd.hal+xml',
409 '.hal': 'application/vnd.hal+xml',
397 '.haml': 'text/x-haml',
410 '.haml': 'text/x-haml',
398 '.hbci': 'application/vnd.hbci',
411 '.hbci': 'application/vnd.hbci',
399 '.hdf': 'application/x-hdf',
412 '.hdf': 'application/x-hdf',
400 '.hdp': 'text/x-dylan-lid',
413 '.hdp': 'text/x-dylan-lid',
401 '.hh': 'text/x-c',
414 '.hh': 'text/x-c',
402 '.hlp': 'application/winhlp',
415 '.hlp': 'application/winhlp',
403 '.hpgl': 'application/vnd.hp-hpgl',
416 '.hpgl': 'application/vnd.hp-hpgl',
404 '.hpid': 'application/vnd.hp-hpid',
417 '.hpid': 'application/vnd.hp-hpid',
405 '.hpp': 'text/x-c++hdr',
418 '.hpp': 'text/x-c++hdr',
406 '.hps': 'application/vnd.hp-hps',
419 '.hps': 'application/vnd.hp-hps',
407 '.hqx': 'application/mac-binhex40',
420 '.hqx': 'application/mac-binhex40',
408 '.hrl': 'text/x-erlang',
421 '.hrl': 'text/x-erlang',
409 '.hs': 'text/x-haskell',
422 '.hs': 'text/x-haskell',
410 '.htke': 'application/vnd.kenameaapp',
423 '.htke': 'application/vnd.kenameaapp',
411 '.htm': 'text/html',
424 '.htm': 'text/html',
412 '.html': 'text/html',
425 '.html': 'text/html',
413 '.hvd': 'application/vnd.yamaha.hv-dic',
426 '.hvd': 'application/vnd.yamaha.hv-dic',
414 '.hvp': 'application/vnd.yamaha.hv-voice',
427 '.hvp': 'application/vnd.yamaha.hv-voice',
415 '.hvs': 'application/vnd.yamaha.hv-script',
428 '.hvs': 'application/vnd.yamaha.hv-script',
416 '.hx': 'text/haxe',
429 '.hx': 'text/haxe',
417 '.hxx': 'text/x-c++hdr',
430 '.hxx': 'text/x-c++hdr',
418 '.hy': 'text/x-hybris',
431 '.hy': 'text/x-hybris',
419 '.hyb': 'text/x-hybris',
432 '.hyb': 'text/x-hybris',
420 '.i2g': 'application/vnd.intergeo',
433 '.i2g': 'application/vnd.intergeo',
421 '.icc': 'application/vnd.iccprofile',
434 '.icc': 'application/vnd.iccprofile',
422 '.ice': 'x-conference/x-cooltalk',
435 '.ice': 'x-conference/x-cooltalk',
423 '.icm': 'application/vnd.iccprofile',
436 '.icm': 'application/vnd.iccprofile',
424 '.ico': 'image/x-icon',
437 '.ico': 'image/x-icon',
425 '.ics': 'text/calendar',
438 '.ics': 'text/calendar',
426 '.idc': 'text/x-chdr',
439 '.idc': 'text/x-chdr',
427 '.ief': 'image/ief',
440 '.ief': 'image/ief',
428 '.ifb': 'text/calendar',
441 '.ifb': 'text/calendar',
429 '.ifm': 'application/vnd.shana.informed.formdata',
442 '.ifm': 'application/vnd.shana.informed.formdata',
430 '.iges': 'model/iges',
443 '.iges': 'model/iges',
431 '.igl': 'application/vnd.igloader',
444 '.igl': 'application/vnd.igloader',
432 '.igm': 'application/vnd.insors.igm',
445 '.igm': 'application/vnd.insors.igm',
433 '.igs': 'model/iges',
446 '.igs': 'model/iges',
434 '.igx': 'application/vnd.micrografx.igx',
447 '.igx': 'application/vnd.micrografx.igx',
435 '.iif': 'application/vnd.shana.informed.interchange',
448 '.iif': 'application/vnd.shana.informed.interchange',
436 '.ik': 'text/x-iokesrc',
449 '.ik': 'text/x-iokesrc',
437 '.imp': 'application/vnd.accpac.simply.imp',
450 '.imp': 'application/vnd.accpac.simply.imp',
438 '.ims': 'application/vnd.ms-ims',
451 '.ims': 'application/vnd.ms-ims',
439 '.in': 'text/plain',
452 '.in': 'text/plain',
440 '.inc': 'text/x-povray',
453 '.inc': 'text/x-povray',
441 '.ini': 'text/x-ini',
454 '.ini': 'text/x-ini',
442 '.intr': 'text/x-dylan',
455 '.intr': 'text/x-dylan',
443 '.io': 'text/x-iosrc',
456 '.io': 'text/x-iosrc',
444 '.ipfix': 'application/ipfix',
457 '.ipfix': 'application/ipfix',
445 '.ipk': 'application/vnd.shana.informed.package',
458 '.ipk': 'application/vnd.shana.informed.package',
446 '.irm': 'application/vnd.ibm.rights-management',
459 '.irm': 'application/vnd.ibm.rights-management',
447 '.irp': 'application/vnd.irepository.package+xml',
460 '.irp': 'application/vnd.irepository.package+xml',
448 '.iso': 'application/octet-stream',
461 '.iso': 'application/octet-stream',
449 '.itp': 'application/vnd.shana.informed.formtemplate',
462 '.itp': 'application/vnd.shana.informed.formtemplate',
450 '.ivp': 'application/vnd.immervision-ivp',
463 '.ivp': 'application/vnd.immervision-ivp',
451 '.ivu': 'application/vnd.immervision-ivu',
464 '.ivu': 'application/vnd.immervision-ivu',
452 '.j': 'text/x-objective-j',
465 '.j': 'text/x-objective-j',
453 '.jad': 'text/vnd.sun.j2me.app-descriptor',
466 '.jad': 'text/vnd.sun.j2me.app-descriptor',
454 '.jade': 'text/x-jade',
467 '.jade': 'text/x-jade',
455 '.jam': 'application/vnd.jam',
468 '.jam': 'application/vnd.jam',
456 '.jar': 'application/java-archive',
469 '.jar': 'application/java-archive',
457 '.java': 'text/x-java-source',
470 '.java': 'text/x-java-source',
458 '.jbst': 'text/x-duel',
471 '.jbst': 'text/x-duel',
459 '.jisp': 'application/vnd.jisp',
472 '.jisp': 'application/vnd.jisp',
460 '.jl': 'text/x-julia',
473 '.jl': 'text/x-julia',
461 '.jlt': 'application/vnd.hp-jlyt',
474 '.jlt': 'application/vnd.hp-jlyt',
462 '.jnlp': 'application/x-java-jnlp-file',
475 '.jnlp': 'application/x-java-jnlp-file',
463 '.joda': 'application/vnd.joost.joda-archive',
476 '.joda': 'application/vnd.joost.joda-archive',
464 '.jp2': 'image/jp2',
477 '.jp2': 'image/jp2',
465 '.jpe': 'image/jpeg',
478 '.jpe': 'image/jpeg',
466 '.jpeg': 'image/jpeg',
479 '.jpeg': 'image/jpeg',
467 '.jpg': 'image/jpeg',
480 '.jpg': 'image/jpeg',
468 '.jpgm': 'video/jpm',
481 '.jpgm': 'video/jpm',
469 '.jpgv': 'video/jpeg',
482 '.jpgv': 'video/jpeg',
470 '.jpm': 'video/jpm',
483 '.jpm': 'video/jpm',
471 '.js': 'application/javascript',
484 '.js': 'application/javascript',
472 '.json': 'application/json',
485 '.json': 'application/json',
473 '.jsp': 'application/x-jsp',
486 '.jsp': 'application/x-jsp',
474 '.kar': 'audio/midi',
487 '.kar': 'audio/midi',
475 '.karbon': 'application/vnd.kde.karbon',
488 '.karbon': 'application/vnd.kde.karbon',
476 '.kfo': 'application/vnd.kde.kformula',
489 '.kfo': 'application/vnd.kde.kformula',
477 '.kia': 'application/vnd.kidspiration',
490 '.kia': 'application/vnd.kidspiration',
478 '.kid': 'application/x-genshi',
491 '.kid': 'application/x-genshi',
479 '.kk': 'text/x-koka',
492 '.kk': 'text/x-koka',
480 '.kki': 'text/x-koka',
493 '.kki': 'text/x-koka',
481 '.kml': 'application/vnd.google-earth.kml+xml',
494 '.kml': 'application/vnd.google-earth.kml+xml',
482 '.kmz': 'application/vnd.google-earth.kmz',
495 '.kmz': 'application/vnd.google-earth.kmz',
483 '.kne': 'application/vnd.kinar',
496 '.kne': 'application/vnd.kinar',
484 '.knp': 'application/vnd.kinar',
497 '.knp': 'application/vnd.kinar',
485 '.kon': 'application/vnd.kde.kontour',
498 '.kon': 'application/vnd.kde.kontour',
486 '.kpr': 'application/vnd.kde.kpresenter',
499 '.kpr': 'application/vnd.kde.kpresenter',
487 '.kpt': 'application/vnd.kde.kpresenter',
500 '.kpt': 'application/vnd.kde.kpresenter',
488 '.ksh': 'text/plain',
501 '.ksh': 'text/plain',
489 '.ksp': 'application/vnd.kde.kspread',
502 '.ksp': 'application/vnd.kde.kspread',
490 '.kt': 'text/x-kotlin',
503 '.kt': 'text/x-kotlin',
491 '.ktr': 'application/vnd.kahootz',
504 '.ktr': 'application/vnd.kahootz',
492 '.ktx': 'image/ktx',
505 '.ktx': 'image/ktx',
493 '.ktz': 'application/vnd.kahootz',
506 '.ktz': 'application/vnd.kahootz',
494 '.kwd': 'application/vnd.kde.kword',
507 '.kwd': 'application/vnd.kde.kword',
495 '.kwt': 'application/vnd.kde.kword',
508 '.kwt': 'application/vnd.kde.kword',
496 '.lasso': 'text/x-lasso',
509 '.lasso': 'text/x-lasso',
497 '.lasso[89]': 'text/x-lasso',
510 '.lasso[89]': 'text/x-lasso',
498 '.lasxml': 'application/vnd.las.las+xml',
511 '.lasxml': 'application/vnd.las.las+xml',
499 '.latex': 'application/x-latex',
512 '.latex': 'application/x-latex',
500 '.lbd': 'application/vnd.llamagraphics.life-balance.desktop',
513 '.lbd': 'application/vnd.llamagraphics.life-balance.desktop',
501 '.lbe': 'application/vnd.llamagraphics.life-balance.exchange+xml',
514 '.lbe': 'application/vnd.llamagraphics.life-balance.exchange+xml',
502 '.les': 'application/vnd.hhe.lesson-player',
515 '.les': 'application/vnd.hhe.lesson-player',
503 '.less': 'text/x-less',
516 '.less': 'text/x-less',
504 '.lgt': 'text/x-logtalk',
517 '.lgt': 'text/x-logtalk',
505 '.lha': 'application/octet-stream',
518 '.lha': 'application/octet-stream',
506 '.lhs': 'text/x-literate-haskell',
519 '.lhs': 'text/x-literate-haskell',
507 '.lid': 'text/x-dylan-lid',
520 '.lid': 'text/x-dylan-lid',
508 '.link66': 'application/vnd.route66.link66+xml',
521 '.link66': 'application/vnd.route66.link66+xml',
509 '.lisp': 'text/x-common-lisp',
522 '.lisp': 'text/x-common-lisp',
510 '.list': 'text/plain',
523 '.list': 'text/plain',
511 '.list3820': 'application/vnd.ibm.modcap',
524 '.list3820': 'application/vnd.ibm.modcap',
512 '.listafp': 'application/vnd.ibm.modcap',
525 '.listafp': 'application/vnd.ibm.modcap',
513 '.ll': 'text/x-llvm',
526 '.ll': 'text/x-llvm',
514 '.log': 'text/plain',
527 '.log': 'text/plain',
515 '.lostxml': 'application/lost+xml',
528 '.lostxml': 'application/lost+xml',
516 '.lrf': 'application/octet-stream',
529 '.lrf': 'application/octet-stream',
517 '.lrm': 'application/vnd.ms-lrm',
530 '.lrm': 'application/vnd.ms-lrm',
518 '.ls': 'text/x-livescript',
531 '.ls': 'text/x-livescript',
519 '.lsp': 'text/x-newlisp',
532 '.lsp': 'text/x-newlisp',
520 '.ltf': 'application/vnd.frogans.ltf',
533 '.ltf': 'application/vnd.frogans.ltf',
521 '.ltx': 'text/x-latex',
534 '.ltx': 'text/x-latex',
522 '.lua': 'text/x-lua',
535 '.lua': 'text/x-lua',
523 '.lvp': 'audio/vnd.lucent.voice',
536 '.lvp': 'audio/vnd.lucent.voice',
524 '.lwp': 'application/vnd.lotus-wordpro',
537 '.lwp': 'application/vnd.lotus-wordpro',
525 '.lzh': 'application/octet-stream',
538 '.lzh': 'application/octet-stream',
526 '.m': 'text/octave',
539 '.m': 'text/octave',
527 '.m13': 'application/x-msmediaview',
540 '.m13': 'application/x-msmediaview',
528 '.m14': 'application/x-msmediaview',
541 '.m14': 'application/x-msmediaview',
529 '.m1v': 'video/mpeg',
542 '.m1v': 'video/mpeg',
530 '.m21': 'application/mp21',
543 '.m21': 'application/mp21',
531 '.m2a': 'audio/mpeg',
544 '.m2a': 'audio/mpeg',
532 '.m2v': 'video/mpeg',
545 '.m2v': 'video/mpeg',
533 '.m3a': 'audio/mpeg',
546 '.m3a': 'audio/mpeg',
534 '.m3u': 'audio/x-mpegurl',
547 '.m3u': 'audio/x-mpegurl',
535 '.m3u8': 'application/x-mpegurl',
548 '.m3u8': 'application/x-mpegurl',
536 '.m4a': 'audio/mp4a-latm',
549 '.m4a': 'audio/mp4a-latm',
537 '.m4p': 'audio/mp4a-latm',
550 '.m4p': 'audio/mp4a-latm',
538 '.m4u': 'video/vnd.mpegurl',
551 '.m4u': 'video/vnd.mpegurl',
539 '.m4v': 'video/x-m4v',
552 '.m4v': 'video/x-m4v',
540 '.ma': 'application/mathematica',
553 '.ma': 'application/mathematica',
541 '.mac': 'image/x-macpaint',
554 '.mac': 'image/x-macpaint',
542 '.mads': 'application/mads+xml',
555 '.mads': 'application/mads+xml',
543 '.mag': 'application/vnd.ecowin.chart',
556 '.mag': 'application/vnd.ecowin.chart',
544 '.mak': 'text/x-makefile',
557 '.mak': 'text/x-makefile',
545 '.maker': 'application/vnd.framemaker',
558 '.maker': 'application/vnd.framemaker',
546 '.mako': 'application/x-mako',
559 '.mako': 'application/x-mako',
547 '.man': 'text/troff',
560 '.man': 'text/troff',
548 '.manifest': 'text/cache-manifest',
561 '.manifest': 'text/cache-manifest',
549 '.maql': 'text/x-gooddata-maql',
562 '.maql': 'text/x-gooddata-maql',
550 '.markdown': 'text/x-markdown',
563 '.markdown': 'text/x-markdown',
551 '.mathml': 'application/mathml+xml',
564 '.mathml': 'application/mathml+xml',
552 '.mb': 'application/mathematica',
565 '.mb': 'application/mathematica',
553 '.mbk': 'application/vnd.mobius.mbk',
566 '.mbk': 'application/vnd.mobius.mbk',
554 '.mbox': 'application/mbox',
567 '.mbox': 'application/mbox',
555 '.mc': 'application/x-mason',
568 '.mc': 'application/x-mason',
556 '.mc1': 'application/vnd.medcalcdata',
569 '.mc1': 'application/vnd.medcalcdata',
557 '.mcd': 'application/vnd.mcd',
570 '.mcd': 'application/vnd.mcd',
558 '.mcurl': 'text/vnd.curl.mcurl',
571 '.mcurl': 'text/vnd.curl.mcurl',
559 '.md': 'text/x-minidsrc',
572 '.md': 'text/x-minidsrc',
560 '.mdb': 'application/x-msaccess',
573 '.mdb': 'application/x-msaccess',
561 '.mdi': 'image/vnd.ms-modi',
574 '.mdi': 'image/vnd.ms-modi',
562 '.mdown': 'text/x-markdown',
575 '.mdown': 'text/x-markdown',
563 '.me': 'text/troff',
576 '.me': 'text/troff',
564 '.mesh': 'model/mesh',
577 '.mesh': 'model/mesh',
565 '.meta4': 'application/metalink4+xml',
578 '.meta4': 'application/metalink4+xml',
566 '.mets': 'application/mets+xml',
579 '.mets': 'application/mets+xml',
567 '.mfm': 'application/vnd.mfmp',
580 '.mfm': 'application/vnd.mfmp',
568 '.mgp': 'application/vnd.osgeo.mapguide.package',
581 '.mgp': 'application/vnd.osgeo.mapguide.package',
569 '.mgz': 'application/vnd.proteus.magazine',
582 '.mgz': 'application/vnd.proteus.magazine',
570 '.mht': 'message/rfc822',
583 '.mht': 'message/rfc822',
571 '.mhtml': 'message/rfc822',
584 '.mhtml': 'message/rfc822',
572 '.mi': 'application/x-mason',
585 '.mi': 'application/x-mason',
573 '.mid': 'audio/midi',
586 '.mid': 'audio/midi',
574 '.midi': 'audio/midi',
587 '.midi': 'audio/midi',
575 '.mif': 'application/vnd.mif',
588 '.mif': 'application/vnd.mif',
576 '.mime': 'message/rfc822',
589 '.mime': 'message/rfc822',
577 '.mj2': 'video/mj2',
590 '.mj2': 'video/mj2',
578 '.mjp2': 'video/mj2',
591 '.mjp2': 'video/mj2',
579 '.ml': 'text/x-ocaml',
592 '.ml': 'text/x-ocaml',
580 '.mli': 'text/x-ocaml',
593 '.mli': 'text/x-ocaml',
581 '.mll': 'text/x-ocaml',
594 '.mll': 'text/x-ocaml',
582 '.mlp': 'application/vnd.dolby.mlp',
595 '.mlp': 'application/vnd.dolby.mlp',
583 '.mly': 'text/x-ocaml',
596 '.mly': 'text/x-ocaml',
584 '.mm': 'text/x-objective-c++',
597 '.mm': 'text/x-objective-c++',
585 '.mmd': 'application/vnd.chipnuts.karaoke-mmd',
598 '.mmd': 'application/vnd.chipnuts.karaoke-mmd',
586 '.mmf': 'application/vnd.smaf',
599 '.mmf': 'application/vnd.smaf',
587 '.mmr': 'image/vnd.fujixerox.edmics-mmr',
600 '.mmr': 'image/vnd.fujixerox.edmics-mmr',
588 '.mny': 'application/x-msmoney',
601 '.mny': 'application/x-msmoney',
589 '.mo': 'text/x-modelica',
602 '.mo': 'text/x-modelica',
590 '.mobi': 'application/x-mobipocket-ebook',
603 '.mobi': 'application/x-mobipocket-ebook',
591 '.mobipocket-ebook': 'application/octet-stream',
604 '.mobipocket-ebook': 'application/octet-stream',
592 '.mod': 'text/x-modula2',
605 '.mod': 'text/x-modula2',
593 '.mods': 'application/mods+xml',
606 '.mods': 'application/mods+xml',
594 '.monkey': 'text/x-monkey',
607 '.monkey': 'text/x-monkey',
595 '.moo': 'text/x-moocode',
608 '.moo': 'text/x-moocode',
596 '.moon': 'text/x-moonscript',
609 '.moon': 'text/x-moonscript',
597 '.mov': 'video/quicktime',
610 '.mov': 'video/quicktime',
598 '.movie': 'video/x-sgi-movie',
611 '.movie': 'video/x-sgi-movie',
599 '.mp2': 'audio/mpeg',
612 '.mp2': 'audio/mpeg',
600 '.mp21': 'application/mp21',
613 '.mp21': 'application/mp21',
601 '.mp2a': 'audio/mpeg',
614 '.mp2a': 'audio/mpeg',
602 '.mp3': 'audio/mpeg',
615 '.mp3': 'audio/mpeg',
603 '.mp4': 'video/mp4',
616 '.mp4': 'video/mp4',
604 '.mp4a': 'audio/mp4',
617 '.mp4a': 'audio/mp4',
605 '.mp4s': 'application/mp4',
618 '.mp4s': 'application/mp4',
606 '.mp4v': 'video/mp4',
619 '.mp4v': 'video/mp4',
607 '.mpa': 'video/mpeg',
620 '.mpa': 'video/mpeg',
608 '.mpc': 'application/vnd.mophun.certificate',
621 '.mpc': 'application/vnd.mophun.certificate',
609 '.mpe': 'video/mpeg',
622 '.mpe': 'video/mpeg',
610 '.mpeg': 'video/mpeg',
623 '.mpeg': 'video/mpeg',
611 '.mpg': 'video/mpeg',
624 '.mpg': 'video/mpeg',
612 '.mpg4': 'video/mp4',
625 '.mpg4': 'video/mp4',
613 '.mpga': 'audio/mpeg',
626 '.mpga': 'audio/mpeg',
614 '.mpkg': 'application/vnd.apple.installer+xml',
627 '.mpkg': 'application/vnd.apple.installer+xml',
615 '.mpm': 'application/vnd.blueice.multipass',
628 '.mpm': 'application/vnd.blueice.multipass',
616 '.mpn': 'application/vnd.mophun.application',
629 '.mpn': 'application/vnd.mophun.application',
617 '.mpp': 'application/vnd.ms-project',
630 '.mpp': 'application/vnd.ms-project',
618 '.mpt': 'application/vnd.ms-project',
631 '.mpt': 'application/vnd.ms-project',
619 '.mpy': 'application/vnd.ibm.minipay',
632 '.mpy': 'application/vnd.ibm.minipay',
620 '.mqy': 'application/vnd.mobius.mqy',
633 '.mqy': 'application/vnd.mobius.mqy',
621 '.mrc': 'application/marc',
634 '.mrc': 'application/marc',
622 '.mrcx': 'application/marcxml+xml',
635 '.mrcx': 'application/marcxml+xml',
623 '.ms': 'text/troff',
636 '.ms': 'text/troff',
624 '.mscml': 'application/mediaservercontrol+xml',
637 '.mscml': 'application/mediaservercontrol+xml',
625 '.mseed': 'application/vnd.fdsn.mseed',
638 '.mseed': 'application/vnd.fdsn.mseed',
626 '.mseq': 'application/vnd.mseq',
639 '.mseq': 'application/vnd.mseq',
627 '.msf': 'application/vnd.epson.msf',
640 '.msf': 'application/vnd.epson.msf',
628 '.msh': 'model/mesh',
641 '.msh': 'model/mesh',
629 '.msi': 'application/x-msdownload',
642 '.msi': 'application/x-msdownload',
630 '.msl': 'application/vnd.mobius.msl',
643 '.msl': 'application/vnd.mobius.msl',
631 '.msty': 'application/vnd.muvee.style',
644 '.msty': 'application/vnd.muvee.style',
632 '.mts': 'model/vnd.mts',
645 '.mts': 'model/vnd.mts',
633 '.mus': 'application/vnd.musician',
646 '.mus': 'application/vnd.musician',
634 '.musicxml': 'application/vnd.recordare.musicxml+xml',
647 '.musicxml': 'application/vnd.recordare.musicxml+xml',
635 '.mvb': 'application/x-msmediaview',
648 '.mvb': 'application/x-msmediaview',
636 '.mwf': 'application/vnd.mfer',
649 '.mwf': 'application/vnd.mfer',
637 '.mxf': 'application/mxf',
650 '.mxf': 'application/mxf',
638 '.mxl': 'application/vnd.recordare.musicxml',
651 '.mxl': 'application/vnd.recordare.musicxml',
639 '.mxml': 'application/xv+xml',
652 '.mxml': 'application/xv+xml',
640 '.mxs': 'application/vnd.triscape.mxs',
653 '.mxs': 'application/vnd.triscape.mxs',
641 '.mxu': 'video/vnd.mpegurl',
654 '.mxu': 'video/vnd.mpegurl',
642 '.myt': 'application/x-myghty',
655 '.myt': 'application/x-myghty',
643 '.n': 'text/x-nemerle',
656 '.n': 'text/x-nemerle',
644 '.n-gage': 'application/vnd.nokia.n-gage.symbian.install',
657 '.n-gage': 'application/vnd.nokia.n-gage.symbian.install',
645 '.n3': 'text/n3',
658 '.n3': 'text/n3',
646 '.nb': 'application/mathematica',
659 '.nb': 'application/mathematica',
647 '.nbp': 'application/vnd.wolfram.player',
660 '.nbp': 'application/vnd.wolfram.player',
648 '.nc': 'application/x-netcdf',
661 '.nc': 'application/x-netcdf',
649 '.ncx': 'application/x-dtbncx+xml',
662 '.ncx': 'application/x-dtbncx+xml',
650 '.ngdat': 'application/vnd.nokia.n-gage.data',
663 '.ngdat': 'application/vnd.nokia.n-gage.data',
651 '.nim': 'text/x-nimrod',
664 '.nim': 'text/x-nimrod',
652 '.nimrod': 'text/x-nimrod',
665 '.nimrod': 'text/x-nimrod',
653 '.nl': 'text/x-newlisp',
666 '.nl': 'text/x-newlisp',
654 '.nlu': 'application/vnd.neurolanguage.nlu',
667 '.nlu': 'application/vnd.neurolanguage.nlu',
655 '.nml': 'application/vnd.enliven',
668 '.nml': 'application/vnd.enliven',
656 '.nnd': 'application/vnd.noblenet-directory',
669 '.nnd': 'application/vnd.noblenet-directory',
657 '.nns': 'application/vnd.noblenet-sealer',
670 '.nns': 'application/vnd.noblenet-sealer',
658 '.nnw': 'application/vnd.noblenet-web',
671 '.nnw': 'application/vnd.noblenet-web',
659 '.npx': 'image/vnd.net-fpx',
672 '.npx': 'image/vnd.net-fpx',
660 '.ns2': 'text/x-newspeak',
673 '.ns2': 'text/x-newspeak',
661 '.nsf': 'application/vnd.lotus-notes',
674 '.nsf': 'application/vnd.lotus-notes',
662 '.nsh': 'text/x-nsis',
675 '.nsh': 'text/x-nsis',
663 '.nsi': 'text/x-nsis',
676 '.nsi': 'text/x-nsis',
664 '.nws': 'message/rfc822',
677 '.nws': 'message/rfc822',
665 '.o': 'application/octet-stream',
678 '.o': 'application/octet-stream',
666 '.oa2': 'application/vnd.fujitsu.oasys2',
679 '.oa2': 'application/vnd.fujitsu.oasys2',
667 '.oa3': 'application/vnd.fujitsu.oasys3',
680 '.oa3': 'application/vnd.fujitsu.oasys3',
668 '.oas': 'application/vnd.fujitsu.oasys',
681 '.oas': 'application/vnd.fujitsu.oasys',
669 '.obd': 'application/x-msbinder',
682 '.obd': 'application/x-msbinder',
670 '.obj': 'application/octet-stream',
683 '.obj': 'application/octet-stream',
671 '.objdump': 'text/x-objdump',
684 '.objdump': 'text/x-objdump',
672 '.oda': 'application/oda',
685 '.oda': 'application/oda',
673 '.odb': 'application/vnd.oasis.opendocument.database',
686 '.odb': 'application/vnd.oasis.opendocument.database',
674 '.odc': 'application/vnd.oasis.opendocument.chart',
687 '.odc': 'application/vnd.oasis.opendocument.chart',
675 '.odf': 'application/vnd.oasis.opendocument.formula',
688 '.odf': 'application/vnd.oasis.opendocument.formula',
676 '.odft': 'application/vnd.oasis.opendocument.formula-template',
689 '.odft': 'application/vnd.oasis.opendocument.formula-template',
677 '.odg': 'application/vnd.oasis.opendocument.graphics',
690 '.odg': 'application/vnd.oasis.opendocument.graphics',
678 '.odi': 'application/vnd.oasis.opendocument.image',
691 '.odi': 'application/vnd.oasis.opendocument.image',
679 '.odm': 'application/vnd.oasis.opendocument.text-master',
692 '.odm': 'application/vnd.oasis.opendocument.text-master',
680 '.odp': 'application/vnd.oasis.opendocument.presentation',
693 '.odp': 'application/vnd.oasis.opendocument.presentation',
681 '.ods': 'application/vnd.oasis.opendocument.spreadsheet',
694 '.ods': 'application/vnd.oasis.opendocument.spreadsheet',
682 '.odt': 'application/vnd.oasis.opendocument.text',
695 '.odt': 'application/vnd.oasis.opendocument.text',
683 '.oga': 'audio/ogg',
696 '.oga': 'audio/ogg',
684 '.ogg': 'audio/ogg',
697 '.ogg': 'audio/ogg',
685 '.ogv': 'video/ogg',
698 '.ogv': 'video/ogg',
686 '.ogx': 'application/ogg',
699 '.ogx': 'application/ogg',
687 '.onepkg': 'application/onenote',
700 '.onepkg': 'application/onenote',
688 '.onetmp': 'application/onenote',
701 '.onetmp': 'application/onenote',
689 '.onetoc': 'application/onenote',
702 '.onetoc': 'application/onenote',
690 '.onetoc2': 'application/onenote',
703 '.onetoc2': 'application/onenote',
691 '.ooc': 'text/x-ooc',
704 '.ooc': 'text/x-ooc',
692 '.opa': 'text/x-opa',
705 '.opa': 'text/x-opa',
693 '.opf': 'application/oebps-package+xml',
706 '.opf': 'application/oebps-package+xml',
694 '.oprc': 'application/vnd.palm',
707 '.oprc': 'application/vnd.palm',
695 '.org': 'application/vnd.lotus-organizer',
708 '.org': 'application/vnd.lotus-organizer',
696 '.osf': 'application/vnd.yamaha.openscoreformat',
709 '.osf': 'application/vnd.yamaha.openscoreformat',
697 '.osfpvg': 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
710 '.osfpvg': 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
698 '.otc': 'application/vnd.oasis.opendocument.chart-template',
711 '.otc': 'application/vnd.oasis.opendocument.chart-template',
699 '.otf': 'application/x-font-otf',
712 '.otf': 'application/x-font-otf',
700 '.otg': 'application/vnd.oasis.opendocument.graphics-template',
713 '.otg': 'application/vnd.oasis.opendocument.graphics-template',
701 '.oth': 'application/vnd.oasis.opendocument.text-web',
714 '.oth': 'application/vnd.oasis.opendocument.text-web',
702 '.oti': 'application/vnd.oasis.opendocument.image-template',
715 '.oti': 'application/vnd.oasis.opendocument.image-template',
703 '.otp': 'application/vnd.oasis.opendocument.presentation-template',
716 '.otp': 'application/vnd.oasis.opendocument.presentation-template',
704 '.ots': 'application/vnd.oasis.opendocument.spreadsheet-template',
717 '.ots': 'application/vnd.oasis.opendocument.spreadsheet-template',
705 '.ott': 'application/vnd.oasis.opendocument.text-template',
718 '.ott': 'application/vnd.oasis.opendocument.text-template',
706 '.oxt': 'application/vnd.openofficeorg.extension',
719 '.oxt': 'application/vnd.openofficeorg.extension',
707 '.p': 'text/x-pascal',
720 '.p': 'text/x-pascal',
708 '.p10': 'application/pkcs10',
721 '.p10': 'application/pkcs10',
709 '.p12': 'application/x-pkcs12',
722 '.p12': 'application/x-pkcs12',
710 '.p7b': 'application/x-pkcs7-certificates',
723 '.p7b': 'application/x-pkcs7-certificates',
711 '.p7c': 'application/pkcs7-mime',
724 '.p7c': 'application/pkcs7-mime',
712 '.p7m': 'application/pkcs7-mime',
725 '.p7m': 'application/pkcs7-mime',
713 '.p7r': 'application/x-pkcs7-certreqresp',
726 '.p7r': 'application/x-pkcs7-certreqresp',
714 '.p7s': 'application/pkcs7-signature',
727 '.p7s': 'application/pkcs7-signature',
715 '.p8': 'application/pkcs8',
728 '.p8': 'application/pkcs8',
716 '.pas': 'text/x-pascal',
729 '.pas': 'text/x-pascal',
717 '.patch': 'text/x-diff',
730 '.patch': 'text/x-diff',
718 '.paw': 'application/vnd.pawaafile',
731 '.paw': 'application/vnd.pawaafile',
719 '.pbd': 'application/vnd.powerbuilder6',
732 '.pbd': 'application/vnd.powerbuilder6',
720 '.pbm': 'image/x-portable-bitmap',
733 '.pbm': 'image/x-portable-bitmap',
721 '.pcf': 'application/x-font-pcf',
734 '.pcf': 'application/x-font-pcf',
722 '.pcl': 'application/vnd.hp-pcl',
735 '.pcl': 'application/vnd.hp-pcl',
723 '.pclxl': 'application/vnd.hp-pclxl',
736 '.pclxl': 'application/vnd.hp-pclxl',
724 '.pct': 'image/x-pict',
737 '.pct': 'image/x-pict',
725 '.pcurl': 'application/vnd.curl.pcurl',
738 '.pcurl': 'application/vnd.curl.pcurl',
726 '.pcx': 'image/x-pcx',
739 '.pcx': 'image/x-pcx',
727 '.pdb': 'application/vnd.palm',
740 '.pdb': 'application/vnd.palm',
728 '.pdf': 'application/pdf',
741 '.pdf': 'application/pdf',
729 '.pfa': 'application/x-font-type1',
742 '.pfa': 'application/x-font-type1',
730 '.pfb': 'application/x-font-type1',
743 '.pfb': 'application/x-font-type1',
731 '.pfm': 'application/x-font-type1',
744 '.pfm': 'application/x-font-type1',
732 '.pfr': 'application/font-tdpfr',
745 '.pfr': 'application/font-tdpfr',
733 '.pfx': 'application/x-pkcs12',
746 '.pfx': 'application/x-pkcs12',
734 '.pgm': 'image/x-portable-graymap',
747 '.pgm': 'image/x-portable-graymap',
735 '.pgn': 'application/x-chess-pgn',
748 '.pgn': 'application/x-chess-pgn',
736 '.pgp': 'application/pgp-encrypted',
749 '.pgp': 'application/pgp-encrypted',
737 '.php': 'text/x-php',
750 '.php': 'text/x-php',
738 '.php[345]': 'text/x-php',
751 '.php[345]': 'text/x-php',
739 '.phtml': 'application/x-php',
752 '.phtml': 'application/x-php',
740 '.pic': 'image/x-pict',
753 '.pic': 'image/x-pict',
741 '.pict': 'image/pict',
754 '.pict': 'image/pict',
742 '.pkg': 'application/octet-stream',
755 '.pkg': 'application/octet-stream',
743 '.pki': 'application/pkixcmp',
756 '.pki': 'application/pkixcmp',
744 '.pkipath': 'application/pkix-pkipath',
757 '.pkipath': 'application/pkix-pkipath',
745 '.pl': 'text/plain',
758 '.pl': 'text/plain',
746 '.plb': 'application/vnd.3gpp.pic-bw-large',
759 '.plb': 'application/vnd.3gpp.pic-bw-large',
747 '.plc': 'application/vnd.mobius.plc',
760 '.plc': 'application/vnd.mobius.plc',
748 '.plf': 'application/vnd.pocketlearn',
761 '.plf': 'application/vnd.pocketlearn',
749 '.plot': 'text/x-gnuplot',
762 '.plot': 'text/x-gnuplot',
750 '.pls': 'application/pls+xml',
763 '.pls': 'application/pls+xml',
751 '.plt': 'text/x-gnuplot',
764 '.plt': 'text/x-gnuplot',
752 '.pm': 'text/x-perl',
765 '.pm': 'text/x-perl',
753 '.pml': 'application/vnd.ctc-posml',
766 '.pml': 'application/vnd.ctc-posml',
754 '.png': 'image/png',
767 '.png': 'image/png',
755 '.pnm': 'image/x-portable-anymap',
768 '.pnm': 'image/x-portable-anymap',
756 '.pnt': 'image/x-macpaint',
769 '.pnt': 'image/x-macpaint',
757 '.pntg': 'image/x-macpaint',
770 '.pntg': 'image/x-macpaint',
758 '.po': 'application/x-gettext',
771 '.po': 'application/x-gettext',
759 '.portpkg': 'application/vnd.macports.portpkg',
772 '.portpkg': 'application/vnd.macports.portpkg',
760 '.pot': 'application/vnd.ms-powerpoint',
773 '.pot': 'application/vnd.ms-powerpoint',
761 '.potm': 'application/vnd.ms-powerpoint.template.macroenabled.12',
774 '.potm': 'application/vnd.ms-powerpoint.template.macroenabled.12',
762 '.potx': 'application/vnd.openxmlformats-officedocument.presentationml.template',
775 '.potx': 'application/vnd.openxmlformats-officedocument.presentationml.template',
763 '.pov': 'text/x-povray',
776 '.pov': 'text/x-povray',
764 '.ppa': 'application/vnd.ms-powerpoint',
777 '.ppa': 'application/vnd.ms-powerpoint',
765 '.ppam': 'application/vnd.ms-powerpoint.addin.macroenabled.12',
778 '.ppam': 'application/vnd.ms-powerpoint.addin.macroenabled.12',
766 '.ppd': 'application/vnd.cups-ppd',
779 '.ppd': 'application/vnd.cups-ppd',
767 '.ppm': 'image/x-portable-pixmap',
780 '.ppm': 'image/x-portable-pixmap',
768 '.pps': 'application/vnd.ms-powerpoint',
781 '.pps': 'application/vnd.ms-powerpoint',
769 '.ppsm': 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
782 '.ppsm': 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
770 '.ppsx': 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
783 '.ppsx': 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
771 '.ppt': 'application/vnd.ms-powerpoint',
784 '.ppt': 'application/vnd.ms-powerpoint',
772 '.pptm': 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
785 '.pptm': 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
773 '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
786 '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
774 '.pqa': 'application/vnd.palm',
787 '.pqa': 'application/vnd.palm',
775 '.prc': 'application/x-mobipocket-ebook',
788 '.prc': 'application/x-mobipocket-ebook',
776 '.pre': 'application/vnd.lotus-freelance',
789 '.pre': 'application/vnd.lotus-freelance',
777 '.prf': 'application/pics-rules',
790 '.prf': 'application/pics-rules',
778 '.pro': 'text/idl',
791 '.pro': 'text/idl',
779 '.prolog': 'text/x-prolog',
792 '.prolog': 'text/x-prolog',
780 '.properties': 'text/x-properties',
793 '.properties': 'text/x-properties',
781 '.ps': 'application/postscript',
794 '.ps': 'application/postscript',
782 '.ps1': 'text/x-powershell',
795 '.ps1': 'text/x-powershell',
783 '.psb': 'application/vnd.3gpp.pic-bw-small',
796 '.psb': 'application/vnd.3gpp.pic-bw-small',
784 '.psd': 'image/vnd.adobe.photoshop',
797 '.psd': 'image/vnd.adobe.photoshop',
785 '.psf': 'application/x-font-linux-psf',
798 '.psf': 'application/x-font-linux-psf',
786 '.pskcxml': 'application/pskc+xml',
799 '.pskcxml': 'application/pskc+xml',
787 '.ptid': 'application/vnd.pvi.ptid1',
800 '.ptid': 'application/vnd.pvi.ptid1',
788 '.pub': 'application/x-mspublisher',
801 '.pub': 'application/x-mspublisher',
789 '.pvb': 'application/vnd.3gpp.pic-bw-var',
802 '.pvb': 'application/vnd.3gpp.pic-bw-var',
790 '.pwn': 'application/vnd.3m.post-it-notes',
803 '.pwn': 'application/vnd.3m.post-it-notes',
791 '.pwz': 'application/vnd.ms-powerpoint',
804 '.pwz': 'application/vnd.ms-powerpoint',
792 '.pxd': 'text/x-cython',
805 '.pxd': 'text/x-cython',
793 '.pxi': 'text/x-cython',
806 '.pxi': 'text/x-cython',
794 '.py': 'text/x-python',
807 '.py': 'text/x-python',
795 '.py3tb': 'text/x-python3-traceback',
808 '.py3tb': 'text/x-python3-traceback',
796 '.pya': 'audio/vnd.ms-playready.media.pya',
809 '.pya': 'audio/vnd.ms-playready.media.pya',
797 '.pyc': 'application/x-python-code',
810 '.pyc': 'application/x-python-code',
798 '.pyo': 'application/x-python-code',
811 '.pyo': 'application/x-python-code',
799 '.pypylog': 'application/x-pypylog',
812 '.pypylog': 'application/x-pypylog',
800 '.pytb': 'text/x-python-traceback',
813 '.pytb': 'text/x-python-traceback',
801 '.pyv': 'video/vnd.ms-playready.media.pyv',
814 '.pyv': 'video/vnd.ms-playready.media.pyv',
802 '.pyw': 'text/x-python',
815 '.pyw': 'text/x-python',
803 '.pyx': 'text/x-cython',
816 '.pyx': 'text/x-cython',
804 '.qam': 'application/vnd.epson.quickanime',
817 '.qam': 'application/vnd.epson.quickanime',
805 '.qbo': 'application/vnd.intu.qbo',
818 '.qbo': 'application/vnd.intu.qbo',
806 '.qfx': 'application/vnd.intu.qfx',
819 '.qfx': 'application/vnd.intu.qfx',
807 '.qml': 'application/x-qml',
820 '.qml': 'application/x-qml',
808 '.qps': 'application/vnd.publishare-delta-tree',
821 '.qps': 'application/vnd.publishare-delta-tree',
809 '.qt': 'video/quicktime',
822 '.qt': 'video/quicktime',
810 '.qti': 'image/x-quicktime',
823 '.qti': 'image/x-quicktime',
811 '.qtif': 'image/x-quicktime',
824 '.qtif': 'image/x-quicktime',
812 '.qwd': 'application/vnd.quark.quarkxpress',
825 '.qwd': 'application/vnd.quark.quarkxpress',
813 '.qwt': 'application/vnd.quark.quarkxpress',
826 '.qwt': 'application/vnd.quark.quarkxpress',
814 '.qxb': 'application/vnd.quark.quarkxpress',
827 '.qxb': 'application/vnd.quark.quarkxpress',
815 '.qxd': 'application/vnd.quark.quarkxpress',
828 '.qxd': 'application/vnd.quark.quarkxpress',
816 '.qxl': 'application/vnd.quark.quarkxpress',
829 '.qxl': 'application/vnd.quark.quarkxpress',
817 '.qxt': 'application/vnd.quark.quarkxpress',
830 '.qxt': 'application/vnd.quark.quarkxpress',
818 '.r': 'text/x-rebol',
831 '.r': 'text/x-rebol',
819 '.r3': 'text/x-rebol',
832 '.r3': 'text/x-rebol',
820 '.ra': 'audio/x-pn-realaudio',
833 '.ra': 'audio/x-pn-realaudio',
821 '.rake': 'text/x-ruby',
834 '.rake': 'text/x-ruby',
822 '.ram': 'audio/x-pn-realaudio',
835 '.ram': 'audio/x-pn-realaudio',
823 '.rar': 'application/x-rar-compressed',
836 '.rar': 'application/x-rar-compressed',
824 '.ras': 'image/x-cmu-raster',
837 '.ras': 'image/x-cmu-raster',
825 '.rb': 'text/x-ruby',
838 '.rb': 'text/x-ruby',
826 '.rbw': 'text/x-ruby',
839 '.rbw': 'text/x-ruby',
827 '.rbx': 'text/x-ruby',
840 '.rbx': 'text/x-ruby',
828 '.rc': 'text/x-stsrc',
841 '.rc': 'text/x-stsrc',
829 '.rcprofile': 'application/vnd.ipunplugged.rcprofile',
842 '.rcprofile': 'application/vnd.ipunplugged.rcprofile',
830 '.rdf': 'application/rdf+xml',
843 '.rdf': 'application/rdf+xml',
831 '.rdz': 'application/vnd.data-vision.rdz',
844 '.rdz': 'application/vnd.data-vision.rdz',
832 '.reg': 'text/x-windows-registry',
845 '.reg': 'text/x-windows-registry',
833 '.rep': 'application/vnd.businessobjects',
846 '.rep': 'application/vnd.businessobjects',
834 '.res': 'application/x-dtbresource+xml',
847 '.res': 'application/x-dtbresource+xml',
835 '.rest': 'text/x-rst',
848 '.rest': 'text/x-rst',
836 '.rgb': 'image/x-rgb',
849 '.rgb': 'image/x-rgb',
837 '.rhtml': 'text/html+ruby',
850 '.rhtml': 'text/html+ruby',
838 '.rif': 'application/reginfo+xml',
851 '.rif': 'application/reginfo+xml',
839 '.rip': 'audio/vnd.rip',
852 '.rip': 'audio/vnd.rip',
840 '.rkt': 'text/x-racket',
853 '.rkt': 'text/x-racket',
841 '.rktl': 'text/x-racket',
854 '.rktl': 'text/x-racket',
842 '.rl': 'application/resource-lists+xml',
855 '.rl': 'application/resource-lists+xml',
843 '.rlc': 'image/vnd.fujixerox.edmics-rlc',
856 '.rlc': 'image/vnd.fujixerox.edmics-rlc',
844 '.rld': 'application/resource-lists-diff+xml',
857 '.rld': 'application/resource-lists-diff+xml',
845 '.rm': 'application/vnd.rn-realmedia',
858 '.rm': 'application/vnd.rn-realmedia',
846 '.rmi': 'audio/midi',
859 '.rmi': 'audio/midi',
847 '.rmp': 'audio/x-pn-realaudio-plugin',
860 '.rmp': 'audio/x-pn-realaudio-plugin',
848 '.rms': 'application/vnd.jcp.javame.midlet-rms',
861 '.rms': 'application/vnd.jcp.javame.midlet-rms',
849 '.rnc': 'application/relax-ng-compact-syntax',
862 '.rnc': 'application/relax-ng-compact-syntax',
850 '.robot': 'text/x-robotframework',
863 '.robot': 'text/x-robotframework',
851 '.roff': 'text/troff',
864 '.roff': 'text/troff',
852 '.rp9': 'application/vnd.cloanto.rp9',
865 '.rp9': 'application/vnd.cloanto.rp9',
853 '.rpss': 'application/vnd.nokia.radio-presets',
866 '.rpss': 'application/vnd.nokia.radio-presets',
854 '.rpst': 'application/vnd.nokia.radio-preset',
867 '.rpst': 'application/vnd.nokia.radio-preset',
855 '.rq': 'application/sparql-query',
868 '.rq': 'application/sparql-query',
856 '.rs': 'application/rls-services+xml',
869 '.rs': 'application/rls-services+xml',
857 '.rsd': 'application/rsd+xml',
870 '.rsd': 'application/rsd+xml',
858 '.rss': 'application/rss+xml',
871 '.rss': 'application/rss+xml',
859 '.rst': 'text/x-rst',
872 '.rst': 'text/x-rst',
860 '.rtf': 'application/rtf',
873 '.rtf': 'application/rtf',
861 '.rtx': 'text/richtext',
874 '.rtx': 'text/richtext',
862 '.s': 'text/x-asm',
875 '.s': 'text/x-asm',
863 '.saf': 'application/vnd.yamaha.smaf-audio',
876 '.saf': 'application/vnd.yamaha.smaf-audio',
864 '.sage': 'text/x-python',
877 '.sage': 'text/x-python',
865 '.sass': 'text/x-sass',
878 '.sass': 'text/x-sass',
866 '.sbml': 'application/sbml+xml',
879 '.sbml': 'application/sbml+xml',
867 '.sc': 'application/vnd.ibm.secure-container',
880 '.sc': 'application/vnd.ibm.secure-container',
868 '.scala': 'text/x-scala',
881 '.scala': 'text/x-scala',
869 '.scaml': 'text/x-scaml',
882 '.scaml': 'text/x-scaml',
870 '.scd': 'application/x-msschedule',
883 '.scd': 'application/x-msschedule',
871 '.sce': 'text/scilab',
884 '.sce': 'text/scilab',
872 '.sci': 'text/scilab',
885 '.sci': 'text/scilab',
873 '.scm': 'application/vnd.lotus-screencam',
886 '.scm': 'application/vnd.lotus-screencam',
874 '.scq': 'application/scvp-cv-request',
887 '.scq': 'application/scvp-cv-request',
875 '.scs': 'application/scvp-cv-response',
888 '.scs': 'application/scvp-cv-response',
876 '.scss': 'text/x-scss',
889 '.scss': 'text/x-scss',
877 '.scurl': 'text/vnd.curl.scurl',
890 '.scurl': 'text/vnd.curl.scurl',
878 '.sda': 'application/vnd.stardivision.draw',
891 '.sda': 'application/vnd.stardivision.draw',
879 '.sdc': 'application/vnd.stardivision.calc',
892 '.sdc': 'application/vnd.stardivision.calc',
880 '.sdd': 'application/vnd.stardivision.impress',
893 '.sdd': 'application/vnd.stardivision.impress',
881 '.sdkd': 'application/vnd.solent.sdkm+xml',
894 '.sdkd': 'application/vnd.solent.sdkm+xml',
882 '.sdkm': 'application/vnd.solent.sdkm+xml',
895 '.sdkm': 'application/vnd.solent.sdkm+xml',
883 '.sdp': 'application/sdp',
896 '.sdp': 'application/sdp',
884 '.sdw': 'application/vnd.stardivision.writer',
897 '.sdw': 'application/vnd.stardivision.writer',
885 '.see': 'application/vnd.seemail',
898 '.see': 'application/vnd.seemail',
886 '.seed': 'application/vnd.fdsn.seed',
899 '.seed': 'application/vnd.fdsn.seed',
887 '.sema': 'application/vnd.sema',
900 '.sema': 'application/vnd.sema',
888 '.semd': 'application/vnd.semd',
901 '.semd': 'application/vnd.semd',
889 '.semf': 'application/vnd.semf',
902 '.semf': 'application/vnd.semf',
890 '.ser': 'application/java-serialized-object',
903 '.ser': 'application/java-serialized-object',
891 '.setpay': 'application/set-payment-initiation',
904 '.setpay': 'application/set-payment-initiation',
892 '.setreg': 'application/set-registration-initiation',
905 '.setreg': 'application/set-registration-initiation',
893 '.sfd-hdstx': 'application/vnd.hydrostatix.sof-data',
906 '.sfd-hdstx': 'application/vnd.hydrostatix.sof-data',
894 '.sfs': 'application/vnd.spotfire.sfs',
907 '.sfs': 'application/vnd.spotfire.sfs',
895 '.sgl': 'application/vnd.stardivision.writer-global',
908 '.sgl': 'application/vnd.stardivision.writer-global',
896 '.sgm': 'text/sgml',
909 '.sgm': 'text/sgml',
897 '.sgml': 'text/sgml',
910 '.sgml': 'text/sgml',
898 '.sh': 'application/x-sh',
911 '.sh': 'application/x-sh',
899 '.sh-session': 'application/x-shell-session',
912 '.sh-session': 'application/x-shell-session',
900 '.shar': 'application/x-shar',
913 '.shar': 'application/x-shar',
901 '.shell-session': 'application/x-sh-session',
914 '.shell-session': 'application/x-sh-session',
902 '.shf': 'application/shf+xml',
915 '.shf': 'application/shf+xml',
903 '.sig': 'application/pgp-signature',
916 '.sig': 'application/pgp-signature',
904 '.silo': 'model/mesh',
917 '.silo': 'model/mesh',
905 '.sis': 'application/vnd.symbian.install',
918 '.sis': 'application/vnd.symbian.install',
906 '.sisx': 'application/vnd.symbian.install',
919 '.sisx': 'application/vnd.symbian.install',
907 '.sit': 'application/x-stuffit',
920 '.sit': 'application/x-stuffit',
908 '.sitx': 'application/x-stuffitx',
921 '.sitx': 'application/x-stuffitx',
909 '.skd': 'application/vnd.koan',
922 '.skd': 'application/vnd.koan',
910 '.skm': 'application/vnd.koan',
923 '.skm': 'application/vnd.koan',
911 '.skp': 'application/vnd.koan',
924 '.skp': 'application/vnd.koan',
912 '.skt': 'application/vnd.koan',
925 '.skt': 'application/vnd.koan',
913 '.sldm': 'application/vnd.ms-powerpoint.slide.macroenabled.12',
926 '.sldm': 'application/vnd.ms-powerpoint.slide.macroenabled.12',
914 '.sldx': 'application/vnd.openxmlformats-officedocument.presentationml.slide',
927 '.sldx': 'application/vnd.openxmlformats-officedocument.presentationml.slide',
915 '.slt': 'application/vnd.epson.salt',
928 '.slt': 'application/vnd.epson.salt',
916 '.sm': 'application/vnd.stepmania.stepchart',
929 '.sm': 'application/vnd.stepmania.stepchart',
917 '.smali': 'text/smali',
930 '.smali': 'text/smali',
918 '.smf': 'application/vnd.stardivision.math',
931 '.smf': 'application/vnd.stardivision.math',
919 '.smi': 'application/smil+xml',
932 '.smi': 'application/smil+xml',
920 '.smil': 'application/smil+xml',
933 '.smil': 'application/smil+xml',
921 '.sml': 'text/x-standardml',
934 '.sml': 'text/x-standardml',
922 '.snd': 'audio/basic',
935 '.snd': 'audio/basic',
923 '.snf': 'application/x-font-snf',
936 '.snf': 'application/x-font-snf',
924 '.snobol': 'text/x-snobol',
937 '.snobol': 'text/x-snobol',
925 '.so': 'application/octet-stream',
938 '.so': 'application/octet-stream',
926 '.sp': 'text/x-sourcepawn',
939 '.sp': 'text/x-sourcepawn',
927 '.spc': 'application/x-pkcs7-certificates',
940 '.spc': 'application/x-pkcs7-certificates',
928 '.spec': 'text/x-rpm-spec',
941 '.spec': 'text/x-rpm-spec',
929 '.spf': 'application/vnd.yamaha.smaf-phrase',
942 '.spf': 'application/vnd.yamaha.smaf-phrase',
930 '.spl': 'application/x-futuresplash',
943 '.spl': 'application/x-futuresplash',
931 '.spot': 'text/vnd.in3d.spot',
944 '.spot': 'text/vnd.in3d.spot',
932 '.spp': 'application/scvp-vp-response',
945 '.spp': 'application/scvp-vp-response',
933 '.spq': 'application/scvp-vp-request',
946 '.spq': 'application/scvp-vp-request',
934 '.spt': 'application/x-cheetah',
947 '.spt': 'application/x-cheetah',
935 '.spx': 'audio/ogg',
948 '.spx': 'audio/ogg',
936 '.sql': 'text/x-sql',
949 '.sql': 'text/x-sql',
937 '.sqlite3-console': 'text/x-sqlite3-console',
950 '.sqlite3-console': 'text/x-sqlite3-console',
938 '.src': 'application/x-wais-source',
951 '.src': 'application/x-wais-source',
939 '.sru': 'application/sru+xml',
952 '.sru': 'application/sru+xml',
940 '.srx': 'application/sparql-results+xml',
953 '.srx': 'application/sparql-results+xml',
941 '.ss': 'text/x-scheme',
954 '.ss': 'text/x-scheme',
942 '.sse': 'application/vnd.kodak-descriptor',
955 '.sse': 'application/vnd.kodak-descriptor',
943 '.ssf': 'application/vnd.epson.ssf',
956 '.ssf': 'application/vnd.epson.ssf',
944 '.ssml': 'application/ssml+xml',
957 '.ssml': 'application/ssml+xml',
945 '.ssp': 'application/x-ssp',
958 '.ssp': 'application/x-ssp',
946 '.st': 'application/vnd.sailingtracker.track',
959 '.st': 'application/vnd.sailingtracker.track',
947 '.stc': 'application/vnd.sun.xml.calc.template',
960 '.stc': 'application/vnd.sun.xml.calc.template',
948 '.std': 'application/vnd.sun.xml.draw.template',
961 '.std': 'application/vnd.sun.xml.draw.template',
949 '.stf': 'application/vnd.wt.stf',
962 '.stf': 'application/vnd.wt.stf',
950 '.sti': 'application/vnd.sun.xml.impress.template',
963 '.sti': 'application/vnd.sun.xml.impress.template',
951 '.stk': 'application/hyperstudio',
964 '.stk': 'application/hyperstudio',
952 '.stl': 'application/vnd.ms-pki.stl',
965 '.stl': 'application/vnd.ms-pki.stl',
953 '.str': 'application/vnd.pg.format',
966 '.str': 'application/vnd.pg.format',
954 '.stw': 'application/vnd.sun.xml.writer.template',
967 '.stw': 'application/vnd.sun.xml.writer.template',
955 '.sub': 'image/vnd.dvb.subtitle',
968 '.sub': 'image/vnd.dvb.subtitle',
956 '.sus': 'application/vnd.sus-calendar',
969 '.sus': 'application/vnd.sus-calendar',
957 '.susp': 'application/vnd.sus-calendar',
970 '.susp': 'application/vnd.sus-calendar',
958 '.sv': 'text/x-systemverilog',
971 '.sv': 'text/x-systemverilog',
959 '.sv4cpio': 'application/x-sv4cpio',
972 '.sv4cpio': 'application/x-sv4cpio',
960 '.sv4crc': 'application/x-sv4crc',
973 '.sv4crc': 'application/x-sv4crc',
961 '.svc': 'application/vnd.dvb.service',
974 '.svc': 'application/vnd.dvb.service',
962 '.svd': 'application/vnd.svd',
975 '.svd': 'application/vnd.svd',
963 '.svg': 'image/svg+xml',
976 '.svg': 'image/svg+xml',
964 '.svgz': 'image/svg+xml',
977 '.svgz': 'image/svg+xml',
965 '.svh': 'text/x-systemverilog',
978 '.svh': 'text/x-systemverilog',
966 '.swa': 'application/x-director',
979 '.swa': 'application/x-director',
967 '.swf': 'application/x-shockwave-flash',
980 '.swf': 'application/x-shockwave-flash',
968 '.swi': 'application/vnd.aristanetworks.swi',
981 '.swi': 'application/vnd.aristanetworks.swi',
969 '.sxc': 'application/vnd.sun.xml.calc',
982 '.sxc': 'application/vnd.sun.xml.calc',
970 '.sxd': 'application/vnd.sun.xml.draw',
983 '.sxd': 'application/vnd.sun.xml.draw',
971 '.sxg': 'application/vnd.sun.xml.writer.global',
984 '.sxg': 'application/vnd.sun.xml.writer.global',
972 '.sxi': 'application/vnd.sun.xml.impress',
985 '.sxi': 'application/vnd.sun.xml.impress',
973 '.sxm': 'application/vnd.sun.xml.math',
986 '.sxm': 'application/vnd.sun.xml.math',
974 '.sxw': 'application/vnd.sun.xml.writer',
987 '.sxw': 'application/vnd.sun.xml.writer',
975 '.t': 'text/troff',
988 '.t': 'text/troff',
976 '.tac': 'text/x-python',
989 '.tac': 'text/x-python',
977 '.tao': 'application/vnd.tao.intent-module-archive',
990 '.tao': 'application/vnd.tao.intent-module-archive',
978 '.tar': 'application/x-tar',
991 '.tar': 'application/x-tar',
979 '.tcap': 'application/vnd.3gpp2.tcap',
992 '.tcap': 'application/vnd.3gpp2.tcap',
980 '.tcl': 'application/x-tcl',
993 '.tcl': 'application/x-tcl',
981 '.tcsh': 'application/x-csh',
994 '.tcsh': 'application/x-csh',
982 '.tea': 'text/x-tea',
995 '.tea': 'text/x-tea',
983 '.teacher': 'application/vnd.smart.teacher',
996 '.teacher': 'application/vnd.smart.teacher',
984 '.tei': 'application/tei+xml',
997 '.tei': 'application/tei+xml',
985 '.teicorpus': 'application/tei+xml',
998 '.teicorpus': 'application/tei+xml',
986 '.tex': 'application/x-tex',
999 '.tex': 'application/x-tex',
987 '.texi': 'application/x-texinfo',
1000 '.texi': 'application/x-texinfo',
988 '.texinfo': 'application/x-texinfo',
1001 '.texinfo': 'application/x-texinfo',
989 '.text': 'text/plain',
1002 '.text': 'text/plain',
990 '.tfi': 'application/thraud+xml',
1003 '.tfi': 'application/thraud+xml',
991 '.tfm': 'application/x-tex-tfm',
1004 '.tfm': 'application/x-tex-tfm',
992 '.thmx': 'application/vnd.ms-officetheme',
1005 '.thmx': 'application/vnd.ms-officetheme',
993 '.tif': 'image/tiff',
1006 '.tif': 'image/tiff',
994 '.tiff': 'image/tiff',
1007 '.tiff': 'image/tiff',
995 '.tmo': 'application/vnd.tmobile-livetv',
1008 '.tmo': 'application/vnd.tmobile-livetv',
996 '.tmpl': 'application/x-cheetah',
1009 '.tmpl': 'application/x-cheetah',
997 '.toc': 'text/x-tex',
1010 '.toc': 'text/x-tex',
998 '.torrent': 'application/x-bittorrent',
1011 '.torrent': 'application/x-bittorrent',
999 '.tpl': 'application/vnd.groove-tool-template',
1012 '.tpl': 'application/vnd.groove-tool-template',
1000 '.tpt': 'application/vnd.trid.tpt',
1013 '.tpt': 'application/vnd.trid.tpt',
1001 '.tr': 'text/troff',
1014 '.tr': 'text/troff',
1002 '.tra': 'application/vnd.trueapp',
1015 '.tra': 'application/vnd.trueapp',
1003 '.trm': 'application/x-msterminal',
1016 '.trm': 'application/x-msterminal',
1004 '.ts': 'video/mp2t',
1017 '.ts': 'video/mp2t',
1005 '.tsd': 'application/timestamped-data',
1018 '.tsd': 'application/timestamped-data',
1006 '.tst': 'text/scilab',
1019 '.tst': 'text/scilab',
1007 '.tsv': 'text/tab-separated-values',
1020 '.tsv': 'text/tab-separated-values',
1008 '.ttc': 'application/x-font-ttf',
1021 '.ttc': 'application/x-font-ttf',
1009 '.ttf': 'application/x-font-ttf',
1022 '.ttf': 'application/x-font-ttf',
1010 '.ttl': 'text/turtle',
1023 '.ttl': 'text/turtle',
1011 '.twd': 'application/vnd.simtech-mindmapper',
1024 '.twd': 'application/vnd.simtech-mindmapper',
1012 '.twds': 'application/vnd.simtech-mindmapper',
1025 '.twds': 'application/vnd.simtech-mindmapper',
1013 '.txd': 'application/vnd.genomatix.tuxedo',
1026 '.txd': 'application/vnd.genomatix.tuxedo',
1014 '.txf': 'application/vnd.mobius.txf',
1027 '.txf': 'application/vnd.mobius.txf',
1015 '.txt': 'text/plain',
1028 '.txt': 'text/plain',
1016 '.u': 'application/x-urbiscript',
1029 '.u': 'application/x-urbiscript',
1017 '.u32': 'application/x-authorware-bin',
1030 '.u32': 'application/x-authorware-bin',
1018 '.udeb': 'application/x-debian-package',
1031 '.udeb': 'application/x-debian-package',
1019 '.ufd': 'application/vnd.ufdl',
1032 '.ufd': 'application/vnd.ufdl',
1020 '.ufdl': 'application/vnd.ufdl',
1033 '.ufdl': 'application/vnd.ufdl',
1021 '.umj': 'application/vnd.umajin',
1034 '.umj': 'application/vnd.umajin',
1022 '.unityweb': 'application/vnd.unity',
1035 '.unityweb': 'application/vnd.unity',
1023 '.uoml': 'application/vnd.uoml+xml',
1036 '.uoml': 'application/vnd.uoml+xml',
1024 '.uri': 'text/uri-list',
1037 '.uri': 'text/uri-list',
1025 '.uris': 'text/uri-list',
1038 '.uris': 'text/uri-list',
1026 '.urls': 'text/uri-list',
1039 '.urls': 'text/uri-list',
1027 '.ustar': 'application/x-ustar',
1040 '.ustar': 'application/x-ustar',
1028 '.utz': 'application/vnd.uiq.theme',
1041 '.utz': 'application/vnd.uiq.theme',
1029 '.uu': 'text/x-uuencode',
1042 '.uu': 'text/x-uuencode',
1030 '.uva': 'audio/vnd.dece.audio',
1043 '.uva': 'audio/vnd.dece.audio',
1031 '.uvd': 'application/vnd.dece.data',
1044 '.uvd': 'application/vnd.dece.data',
1032 '.uvf': 'application/vnd.dece.data',
1045 '.uvf': 'application/vnd.dece.data',
1033 '.uvg': 'image/vnd.dece.graphic',
1046 '.uvg': 'image/vnd.dece.graphic',
1034 '.uvh': 'video/vnd.dece.hd',
1047 '.uvh': 'video/vnd.dece.hd',
1035 '.uvi': 'image/vnd.dece.graphic',
1048 '.uvi': 'image/vnd.dece.graphic',
1036 '.uvm': 'video/vnd.dece.mobile',
1049 '.uvm': 'video/vnd.dece.mobile',
1037 '.uvp': 'video/vnd.dece.pd',
1050 '.uvp': 'video/vnd.dece.pd',
1038 '.uvs': 'video/vnd.dece.sd',
1051 '.uvs': 'video/vnd.dece.sd',
1039 '.uvt': 'application/vnd.dece.ttml+xml',
1052 '.uvt': 'application/vnd.dece.ttml+xml',
1040 '.uvu': 'video/vnd.uvvu.mp4',
1053 '.uvu': 'video/vnd.uvvu.mp4',
1041 '.uvv': 'video/vnd.dece.video',
1054 '.uvv': 'video/vnd.dece.video',
1042 '.uvva': 'audio/vnd.dece.audio',
1055 '.uvva': 'audio/vnd.dece.audio',
1043 '.uvvd': 'application/vnd.dece.data',
1056 '.uvvd': 'application/vnd.dece.data',
1044 '.uvvf': 'application/vnd.dece.data',
1057 '.uvvf': 'application/vnd.dece.data',
1045 '.uvvg': 'image/vnd.dece.graphic',
1058 '.uvvg': 'image/vnd.dece.graphic',
1046 '.uvvh': 'video/vnd.dece.hd',
1059 '.uvvh': 'video/vnd.dece.hd',
1047 '.uvvi': 'image/vnd.dece.graphic',
1060 '.uvvi': 'image/vnd.dece.graphic',
1048 '.uvvm': 'video/vnd.dece.mobile',
1061 '.uvvm': 'video/vnd.dece.mobile',
1049 '.uvvp': 'video/vnd.dece.pd',
1062 '.uvvp': 'video/vnd.dece.pd',
1050 '.uvvs': 'video/vnd.dece.sd',
1063 '.uvvs': 'video/vnd.dece.sd',
1051 '.uvvt': 'application/vnd.dece.ttml+xml',
1064 '.uvvt': 'application/vnd.dece.ttml+xml',
1052 '.uvvu': 'video/vnd.uvvu.mp4',
1065 '.uvvu': 'video/vnd.uvvu.mp4',
1053 '.uvvv': 'video/vnd.dece.video',
1066 '.uvvv': 'video/vnd.dece.video',
1054 '.uvvx': 'application/vnd.dece.unspecified',
1067 '.uvvx': 'application/vnd.dece.unspecified',
1055 '.uvx': 'application/vnd.dece.unspecified',
1068 '.uvx': 'application/vnd.dece.unspecified',
1056 '.v': 'text/x-verilog',
1069 '.v': 'text/x-verilog',
1057 '.vala': 'text/x-vala',
1070 '.vala': 'text/x-vala',
1058 '.vapi': 'text/x-vala',
1071 '.vapi': 'text/x-vala',
1059 '.vark': 'text/x-gosu',
1072 '.vark': 'text/x-gosu',
1060 '.vb': 'text/vbscript',
1073 '.vb': 'text/vbscript',
1061 '.vcd': 'application/x-cdlink',
1074 '.vcd': 'application/x-cdlink',
1062 '.vcf': 'text/x-vcard',
1075 '.vcf': 'text/x-vcard',
1063 '.vcg': 'application/vnd.groove-vcard',
1076 '.vcg': 'application/vnd.groove-vcard',
1064 '.vcs': 'text/x-vcalendar',
1077 '.vcs': 'text/x-vcalendar',
1065 '.vcx': 'application/vnd.vcx',
1078 '.vcx': 'application/vnd.vcx',
1066 '.vert': 'text/x-glslsrc',
1079 '.vert': 'text/x-glslsrc',
1067 '.vhd': 'text/x-vhdl',
1080 '.vhd': 'text/x-vhdl',
1068 '.vhdl': 'text/x-vhdl',
1081 '.vhdl': 'text/x-vhdl',
1069 '.vim': 'text/x-vim',
1082 '.vim': 'text/x-vim',
1070 '.vis': 'application/vnd.visionary',
1083 '.vis': 'application/vnd.visionary',
1071 '.viv': 'video/vnd.vivo',
1084 '.viv': 'video/vnd.vivo',
1072 '.vor': 'application/vnd.stardivision.writer',
1085 '.vor': 'application/vnd.stardivision.writer',
1073 '.vox': 'application/x-authorware-bin',
1086 '.vox': 'application/x-authorware-bin',
1074 '.vrml': 'model/vrml',
1087 '.vrml': 'model/vrml',
1075 '.vsd': 'application/vnd.visio',
1088 '.vsd': 'application/vnd.visio',
1076 '.vsf': 'application/vnd.vsf',
1089 '.vsf': 'application/vnd.vsf',
1077 '.vss': 'application/vnd.visio',
1090 '.vss': 'application/vnd.visio',
1078 '.vst': 'application/vnd.visio',
1091 '.vst': 'application/vnd.visio',
1079 '.vsw': 'application/vnd.visio',
1092 '.vsw': 'application/vnd.visio',
1080 '.vtu': 'model/vnd.vtu',
1093 '.vtu': 'model/vnd.vtu',
1081 '.vxml': 'application/voicexml+xml',
1094 '.vxml': 'application/voicexml+xml',
1082 '.w3d': 'application/x-director',
1095 '.w3d': 'application/x-director',
1083 '.wad': 'application/x-doom',
1096 '.wad': 'application/x-doom',
1084 '.wav': 'audio/x-wav',
1097 '.wav': 'audio/x-wav',
1085 '.wax': 'audio/x-ms-wax',
1098 '.wax': 'audio/x-ms-wax',
1086 '.wbmp': 'image/vnd.wap.wbmp',
1099 '.wbmp': 'image/vnd.wap.wbmp',
1087 '.wbs': 'application/vnd.criticaltools.wbs+xml',
1100 '.wbs': 'application/vnd.criticaltools.wbs+xml',
1088 '.wbxml': 'application/vnd.wap.wbxml',
1101 '.wbxml': 'application/vnd.wap.wbxml',
1089 '.wcm': 'application/vnd.ms-works',
1102 '.wcm': 'application/vnd.ms-works',
1090 '.wdb': 'application/vnd.ms-works',
1103 '.wdb': 'application/vnd.ms-works',
1091 '.weba': 'audio/webm',
1104 '.weba': 'audio/webm',
1092 '.webm': 'video/webm',
1105 '.webm': 'video/webm',
1093 '.webp': 'image/webp',
1106 '.webp': 'image/webp',
1094 '.weechatlog': 'text/x-irclog',
1107 '.weechatlog': 'text/x-irclog',
1095 '.wg': 'application/vnd.pmi.widget',
1108 '.wg': 'application/vnd.pmi.widget',
1096 '.wgt': 'application/widget',
1109 '.wgt': 'application/widget',
1097 '.wiz': 'application/msword',
1110 '.wiz': 'application/msword',
1098 '.wks': 'application/vnd.ms-works',
1111 '.wks': 'application/vnd.ms-works',
1099 '.wlua': 'text/x-lua',
1112 '.wlua': 'text/x-lua',
1100 '.wm': 'video/x-ms-wm',
1113 '.wm': 'video/x-ms-wm',
1101 '.wma': 'audio/x-ms-wma',
1114 '.wma': 'audio/x-ms-wma',
1102 '.wmd': 'application/x-ms-wmd',
1115 '.wmd': 'application/x-ms-wmd',
1103 '.wmf': 'application/x-msmetafile',
1116 '.wmf': 'application/x-msmetafile',
1104 '.wml': 'text/vnd.wap.wml',
1117 '.wml': 'text/vnd.wap.wml',
1105 '.wmlc': 'application/vnd.wap.wmlc',
1118 '.wmlc': 'application/vnd.wap.wmlc',
1106 '.wmls': 'text/vnd.wap.wmlscript',
1119 '.wmls': 'text/vnd.wap.wmlscript',
1107 '.wmlsc': 'application/vnd.wap.wmlscriptc',
1120 '.wmlsc': 'application/vnd.wap.wmlscriptc',
1108 '.wmv': 'video/x-ms-wmv',
1121 '.wmv': 'video/x-ms-wmv',
1109 '.wmx': 'video/x-ms-wmx',
1122 '.wmx': 'video/x-ms-wmx',
1110 '.wmz': 'application/x-ms-wmz',
1123 '.wmz': 'application/x-ms-wmz',
1111 '.woff': 'application/x-font-woff',
1124 '.woff': 'application/x-font-woff',
1112 '.wpd': 'application/vnd.wordperfect',
1125 '.wpd': 'application/vnd.wordperfect',
1113 '.wpl': 'application/vnd.ms-wpl',
1126 '.wpl': 'application/vnd.ms-wpl',
1114 '.wps': 'application/vnd.ms-works',
1127 '.wps': 'application/vnd.ms-works',
1115 '.wqd': 'application/vnd.wqd',
1128 '.wqd': 'application/vnd.wqd',
1116 '.wri': 'application/x-mswrite',
1129 '.wri': 'application/x-mswrite',
1117 '.wrl': 'model/vrml',
1130 '.wrl': 'model/vrml',
1118 '.wsdl': 'application/wsdl+xml',
1131 '.wsdl': 'application/wsdl+xml',
1119 '.wspolicy': 'application/wspolicy+xml',
1132 '.wspolicy': 'application/wspolicy+xml',
1120 '.wtb': 'application/vnd.webturbo',
1133 '.wtb': 'application/vnd.webturbo',
1121 '.wvx': 'video/x-ms-wvx',
1134 '.wvx': 'video/x-ms-wvx',
1122 '.x': 'text/x-logos',
1135 '.x': 'text/x-logos',
1123 '.x32': 'application/x-authorware-bin',
1136 '.x32': 'application/x-authorware-bin',
1124 '.x3d': 'application/vnd.hzn-3d-crossword',
1137 '.x3d': 'application/vnd.hzn-3d-crossword',
1125 '.xap': 'application/x-silverlight-app',
1138 '.xap': 'application/x-silverlight-app',
1126 '.xar': 'application/vnd.xara',
1139 '.xar': 'application/vnd.xara',
1127 '.xbap': 'application/x-ms-xbap',
1140 '.xbap': 'application/x-ms-xbap',
1128 '.xbd': 'application/vnd.fujixerox.docuworks.binder',
1141 '.xbd': 'application/vnd.fujixerox.docuworks.binder',
1129 '.xbm': 'image/x-xbitmap',
1142 '.xbm': 'image/x-xbitmap',
1130 '.xdf': 'application/xcap-diff+xml',
1143 '.xdf': 'application/xcap-diff+xml',
1131 '.xdm': 'application/vnd.syncml.dm+xml',
1144 '.xdm': 'application/vnd.syncml.dm+xml',
1132 '.xdp': 'application/vnd.adobe.xdp+xml',
1145 '.xdp': 'application/vnd.adobe.xdp+xml',
1133 '.xdssc': 'application/dssc+xml',
1146 '.xdssc': 'application/dssc+xml',
1134 '.xdw': 'application/vnd.fujixerox.docuworks',
1147 '.xdw': 'application/vnd.fujixerox.docuworks',
1135 '.xenc': 'application/xenc+xml',
1148 '.xenc': 'application/xenc+xml',
1136 '.xer': 'application/patch-ops-error+xml',
1149 '.xer': 'application/patch-ops-error+xml',
1137 '.xfdf': 'application/vnd.adobe.xfdf',
1150 '.xfdf': 'application/vnd.adobe.xfdf',
1138 '.xfdl': 'application/vnd.xfdl',
1151 '.xfdl': 'application/vnd.xfdl',
1139 '.xht': 'application/xhtml+xml',
1152 '.xht': 'application/xhtml+xml',
1140 '.xhtml': 'application/xhtml+xml',
1153 '.xhtml': 'application/xhtml+xml',
1141 '.xhvml': 'application/xv+xml',
1154 '.xhvml': 'application/xv+xml',
1142 '.xi': 'text/x-logos',
1155 '.xi': 'text/x-logos',
1143 '.xif': 'image/vnd.xiff',
1156 '.xif': 'image/vnd.xiff',
1144 '.xla': 'application/vnd.ms-excel',
1157 '.xla': 'application/vnd.ms-excel',
1145 '.xlam': 'application/vnd.ms-excel.addin.macroenabled.12',
1158 '.xlam': 'application/vnd.ms-excel.addin.macroenabled.12',
1146 '.xlb': 'application/vnd.ms-excel',
1159 '.xlb': 'application/vnd.ms-excel',
1147 '.xlc': 'application/vnd.ms-excel',
1160 '.xlc': 'application/vnd.ms-excel',
1148 '.xlm': 'application/vnd.ms-excel',
1161 '.xlm': 'application/vnd.ms-excel',
1149 '.xls': 'application/vnd.ms-excel',
1162 '.xls': 'application/vnd.ms-excel',
1150 '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
1163 '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
1151 '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',
1164 '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',
1152 '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
1165 '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
1153 '.xlt': 'application/vnd.ms-excel',
1166 '.xlt': 'application/vnd.ms-excel',
1154 '.xltm': 'application/vnd.ms-excel.template.macroenabled.12',
1167 '.xltm': 'application/vnd.ms-excel.template.macroenabled.12',
1155 '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
1168 '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
1156 '.xlw': 'application/vnd.ms-excel',
1169 '.xlw': 'application/vnd.ms-excel',
1157 '.xm': 'text/x-logos',
1170 '.xm': 'text/x-logos',
1158 '.xmi': 'text/x-logos',
1171 '.xmi': 'text/x-logos',
1159 '.xml': 'application/xml',
1172 '.xml': 'application/xml',
1160 '.xo': 'application/vnd.olpc-sugar',
1173 '.xo': 'application/vnd.olpc-sugar',
1161 '.xop': 'application/xop+xml',
1174 '.xop': 'application/xop+xml',
1162 '.xpdl': 'application/xml',
1175 '.xpdl': 'application/xml',
1163 '.xpi': 'application/x-xpinstall',
1176 '.xpi': 'application/x-xpinstall',
1164 '.xpl': 'application/xsl+xml',
1177 '.xpl': 'application/xsl+xml',
1165 '.xpm': 'image/x-xpixmap',
1178 '.xpm': 'image/x-xpixmap',
1166 '.xpr': 'application/vnd.is-xpr',
1179 '.xpr': 'application/vnd.is-xpr',
1167 '.xps': 'application/vnd.ms-xpsdocument',
1180 '.xps': 'application/vnd.ms-xpsdocument',
1168 '.xpw': 'application/vnd.intercon.formnet',
1181 '.xpw': 'application/vnd.intercon.formnet',
1169 '.xpx': 'application/vnd.intercon.formnet',
1182 '.xpx': 'application/vnd.intercon.formnet',
1170 '.xq': 'application/xquery',
1183 '.xq': 'application/xquery',
1171 '.xql': 'application/xquery',
1184 '.xql': 'application/xquery',
1172 '.xqm': 'application/xquery',
1185 '.xqm': 'application/xquery',
1173 '.xquery': 'application/xquery',
1186 '.xquery': 'application/xquery',
1174 '.xqy': 'application/xquery',
1187 '.xqy': 'application/xquery',
1175 '.xsd': 'application/xml',
1188 '.xsd': 'application/xml',
1176 '.xsl': 'application/xml',
1189 '.xsl': 'application/xml',
1177 '.xslt': 'application/xslt+xml',
1190 '.xslt': 'application/xslt+xml',
1178 '.xsm': 'application/vnd.syncml+xml',
1191 '.xsm': 'application/vnd.syncml+xml',
1179 '.xspf': 'application/xspf+xml',
1192 '.xspf': 'application/xspf+xml',
1180 '.xtend': 'text/x-xtend',
1193 '.xtend': 'text/x-xtend',
1181 '.xul': 'application/vnd.mozilla.xul+xml',
1194 '.xul': 'application/vnd.mozilla.xul+xml',
1182 '.xvm': 'application/xv+xml',
1195 '.xvm': 'application/xv+xml',
1183 '.xvml': 'application/xv+xml',
1196 '.xvml': 'application/xv+xml',
1184 '.xwd': 'image/x-xwindowdump',
1197 '.xwd': 'image/x-xwindowdump',
1185 '.xyz': 'chemical/x-xyz',
1198 '.xyz': 'chemical/x-xyz',
1186 '.yaml': 'text/x-yaml',
1199 '.yaml': 'text/x-yaml',
1187 '.yang': 'application/yang',
1200 '.yang': 'application/yang',
1188 '.yin': 'application/yin+xml',
1201 '.yin': 'application/yin+xml',
1189 '.yml': 'text/x-yaml',
1202 '.yml': 'text/x-yaml',
1190 '.zaz': 'application/vnd.zzazz.deck+xml',
1203 '.zaz': 'application/vnd.zzazz.deck+xml',
1191 '.zip': 'application/zip',
1204 '.zip': 'application/zip',
1192 '.zir': 'application/vnd.zul',
1205 '.zir': 'application/vnd.zul',
1193 '.zirz': 'application/vnd.zul',
1206 '.zirz': 'application/vnd.zul',
1194 '.zmm': 'application/vnd.handheld-entertainment+xml'}
1207 '.zmm': 'application/vnd.handheld-entertainment+xml'}
1195 ]
1208 ]
1196
1209
1197
1210
1198 def get_mimetypes_db(extra_types=None):
1211 def get_mimetypes_db(extra_types=None):
1199 import mimetypes
1212 import mimetypes
1200 types_map = TYPES_MAP
1213 types_map = TYPES_MAP
1201 if extra_types:
1214 if extra_types:
1202 types_map = TYPES_MAP[::] # copy the initial version for extending
1215 types_map = TYPES_MAP[::] # copy the initial version for extending
1203 types_map[1].update(extra_types)
1216 types_map[1].update(extra_types)
1204 db = mimetypes.MimeTypes()
1217 db = mimetypes.MimeTypes()
1205 db.types_map = types_map
1218 db.types_map = types_map
1219 db.encodings_map.update(DEFAULTS['encodings_map'])
1220 db.suffix_map.update(DEFAULTS['suffix_map'])
1206 return db
1221 return db
General Comments 0
You need to be logged in to leave comments. Login now