From 3659906516d1d463f2c9a0776bb65680ac7a957f Mon Sep 17 00:00:00 2001 From: LagradOst <11805592+LagradOst@users.noreply.github.com> Date: Thu, 24 Aug 2023 21:04:18 +0200 Subject: [PATCH] FUCK ANDROID STORAGE --- .../ui/result/ResultViewModel2.kt | 4 +- .../utils/VideoDownloadManager.kt | 6 + .../cloudstream3/utils/storage/MediaFile.kt | 165 +++- .../cloudstream3/utils/storage/MimeTypes.kt | 739 ++++++++++++++++++ 4 files changed, 883 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/storage/MimeTypes.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index bdd27091..82d9a8fe 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -591,7 +591,7 @@ class ResultViewModel2 : ViewModel() { link, "$fileName ${link.name}", folder, - if (link.url.contains(".srt")) ".srt" else "vtt", + if (link.url.contains(".srt")) "srt" else "vtt", false, null, createNotificationCallback = {} ) @@ -719,7 +719,7 @@ class ResultViewModel2 : ViewModel() { ) ) } - .map { ExtractorSubtitleLink(it.name, it.url, "") } + .map { ExtractorSubtitleLink(it.name, it.url, "") }.take(3) .forEach { link -> val fileName = VideoDownloadManager.getFileName(context, meta) downloadSubtitle(context, link, fileName, folder) diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt index 948d7b8a..63dfd4e4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/VideoDownloadManager.kt @@ -581,6 +581,7 @@ object VideoDownloadManager { val foundFile = subDir.findFile(displayName) val (file, fileLength) = if (foundFile == null || foundFile.exists() != true) { + foundFile?.delete() subDir.createFileOrThrow(displayName) to 0L } else { if (tryResume) { @@ -1678,6 +1679,11 @@ object VideoDownloadManager { try { val info = context.getKey(KEY_DOWNLOAD_INFO, id.toString()) ?: return null + + /* + val test = basePathToFile(context, info.basePath)?.gotoDirectory(info.relativePath) + val files = test?.listFiles() + println("FILES:::: $files")*/ val file = info.toFile(context) // only delete the key if the file is not found diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt index 526d31ca..005d8184 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MediaFile.kt @@ -13,6 +13,7 @@ import com.hippo.unifile.UniRandomAccessFile import com.lagradost.cloudstream3.mvvm.logError import okhttp3.internal.closeQuietly import java.io.File +import java.io.FileNotFoundException import java.io.InputStream import java.io.OutputStream @@ -65,6 +66,10 @@ class MediaFile( private val external: Boolean = true, absolutePath: String, ) : SafeFile { + override fun toString(): String { + return sanitizedAbsolutePath + } + // this is the path relative to the download directory so "/hello/text.txt" = "hello/text.txt" is in fact "Download/hello/text.txt" private val sanitizedAbsolutePath: String = replaceDuplicateFileSeparators(absolutePath) @@ -84,6 +89,20 @@ class MediaFile( private val baseUri = folderType.toUri(external) private val contentResolver: ContentResolver = context.contentResolver + fun removeCache() { + cachedUri = null + } + + fun setCache(uri: Uri) { + cachedUri = uri + } + + private var cachedUri : Uri? = null + private val fileUri: Uri? get() { + cachedUri?.let { return it } + return if (isFile) query()?.uri?.also { cachedUri = it } else null + } + init { // some standard asserts that should always be hold or else this class wont work assert(!relativePath.endsWith(File.separator)) @@ -130,7 +149,7 @@ class MediaFile( // VideoDownloadManager.sanitizeFilename(path.replace(File.separator, "")) // in case of duplicate path, aka Download -> Download - if(relativePath == path) return this + if (relativePath == path) return this val newPath = sanitizedAbsolutePath + path + if (folder) File.separator else "" @@ -155,7 +174,12 @@ class MediaFile( put(MediaStore.MediaColumns.MIME_TYPE, mime) put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath) } - return contentResolver.insert(baseUri, newFile) + + return contentResolver.insert(baseUri, newFile)?.also { + if(displayName == namePath) { + setCache(it) + } + } } override fun createFile(displayName: String?): SafeFile? { @@ -172,22 +196,79 @@ class MediaFile( private data class QueryResult( val uri: Uri, - val lastModified: Long, - val length: Long, + // val lastModified: Long, + // val length: Long, ) + @RequiresApi(Build.VERSION_CODES.Q) private fun query(displayName: String = namePath): QueryResult? { try { - //val (name, mime) = splitFilenameMime(fullName) + val (name, ext) = splitFilenameExt(displayName) + contentResolver.query( + baseUri, + arrayOf( + MediaStore.MediaColumns._ID, + //MediaStore.MediaColumns.DATE_MODIFIED, + //MediaStore.MediaColumns.SIZE + ), + "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'", + null, + null + )?.use { cursor -> + while (cursor.moveToNext()) { + val cursorId = + cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) - val projection = arrayOf( - MediaStore.MediaColumns._ID, - MediaStore.MediaColumns.DATE_MODIFIED, - MediaStore.MediaColumns.SIZE, - ) + return QueryResult( + uri = ContentUris.withAppendedId( + baseUri, cursorId + ), + // lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED)), + // length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)), + ) + } + } - val selection = + // fuck android fr, who decided that MediaStore.MediaColumns.DISPLAY_NAME ***WONT*** BE THE SAME AS THE FUCKING NAME IN EXPLORER + contentResolver.query( + baseUri, + arrayOf( + MediaStore.MediaColumns._ID, + MediaStore.MediaColumns.MIME_TYPE, + // MediaStore.MediaColumns.DATE_MODIFIED, + // MediaStore.MediaColumns.SIZE + ), + "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.TITLE}='$name'", + null, + null + )?.use { cursor -> + while (cursor.moveToNext()) { + val cursorMime = + cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.MIME_TYPE)) + + val matchAgainst = MimeTypes.fromMimeToExt(cursorMime) + // if extension does not exist and mime has no match, or both are nonull and match contains ext + if (!((ext == null && matchAgainst == null) || (matchAgainst != null && ext != null && matchAgainst.contains( + ext + ))) + ) continue + + val cursorId = + cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID)) + + return QueryResult( + uri = ContentUris.withAppendedId( + baseUri, cursorId + ), + //lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED)), + //length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)), + ) + } + } + + + /*val selection = "${MediaStore.MediaColumns.RELATIVE_PATH}='$relativePath${File.separator}' AND ${MediaStore.MediaColumns.DISPLAY_NAME}='$displayName'" contentResolver.query( @@ -206,7 +287,7 @@ class MediaFile( length = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE)), ) } - } + }*/ } catch (t: Throwable) { logError(t) } @@ -215,7 +296,7 @@ class MediaFile( } override fun uri(): Uri? { - return query()?.uri + return fileUri //query()?.uri } override fun name(): String? { @@ -241,23 +322,42 @@ class MediaFile( override fun lastModified(): Long? { if (isDir) return null - return query()?.lastModified + + return null + //return query()?.lastModified } override fun length(): Long? { if (isDir) return null - val length = query()?.length ?: return null - if(length <= 0) { - val inputStream : InputStream = openInputStream() ?: return null - return try { - inputStream.available().toLong() - } catch (t : Throwable) { - null - } finally { - inputStream.closeQuietly() + //val query = query() + // val length = query?.length ?: return null + // if (length <= 0) { + try { + uri()?.let { uri -> + contentResolver.openFileDescriptor(uri, "r") + .use { + it?.statSize + }?.let { + return it + } } + } catch (e: FileNotFoundException) { + removeCache() + return null } - return length + + val inputStream: InputStream = openInputStream() ?: return null + return try { + inputStream.available().toLong() + } catch (t: Throwable) { + logError(t) + null + } finally { + inputStream.closeQuietly() + } + //return null + // } + // return length } override fun canRead(): Boolean { @@ -278,20 +378,24 @@ class MediaFile( it.delete() } } else { - delete(uri() ?: return false) + delete(uri() ?: return false).also { + removeCache() + } } } override fun exists(): Boolean { if (isDir) return true - return query() != null + return length() != null } override fun listFiles(): List? { if (isFile) return null try { val projection = arrayOf( - MediaStore.MediaColumns.DISPLAY_NAME + MediaStore.MediaColumns.DISPLAY_NAME, + // MediaStore.MediaColumns.TITLE, + // MediaStore.MediaColumns._ID ) val selection = @@ -304,14 +408,16 @@ class MediaFile( while (cursor.moveToNext()) { val nameIdx = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME) if (nameIdx == -1) continue + //val titleIdx = cursor.getColumnIndex(MediaStore.MediaColumns.TITLE) + //val title = cursor.getString(titleIdx) val name = cursor.getString(nameIdx) - + //println("title = $title, name = $name") appendRelativePath(name, false)?.let { new -> out.add(new) } } - out + return out } } catch (t: Throwable) { logError(t) @@ -362,6 +468,7 @@ class MediaFile( try { return contentResolver.openInputStream(uri() ?: return null) } catch (t: Throwable) { + logError(t) return null } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MimeTypes.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MimeTypes.kt new file mode 100644 index 00000000..ef679177 --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/storage/MimeTypes.kt @@ -0,0 +1,739 @@ +package com.lagradost.cloudstream3.utils.storage + +object MimeTypes { + fun fromMimeToExt(mime : String) : Array? { + return map[mime.lowercase()] + } + + private val map : HashMap> = hashMapOf( + "application/x-subrip" to arrayOf("srt"), + "text/vtt " to arrayOf("vtt"), + + "application/andrew-inset" to arrayOf("ez"), + "application/applixware" to arrayOf("aw"), + "application/atom+xml" to arrayOf("atom"), + "application/atomcat+xml" to arrayOf("atomcat"), + "application/atomsvc+xml" to arrayOf("atomsvc"), + "application/ccxml+xml" to arrayOf("ccxml"), + "application/cu-seeme" to arrayOf("cu"), + "application/davmount+xml" to arrayOf("davmount"), + "application/ecmascript" to arrayOf("ecma"), + "application/emma+xml" to arrayOf("emma"), + "application/epub+zip" to arrayOf("epub"), + "application/font-tdpfr" to arrayOf("pfr"), + "application/gzip" to arrayOf("gz","tgz"), + "application/x-gzip" to arrayOf("gz","tgz"), + "application/hyperstudio" to arrayOf("stk"), + "application/java-archive" to arrayOf("jar"), + "application/java-serialized-object" to arrayOf("ser"), + "application/java-vm" to arrayOf("class"), + "application/json" to arrayOf("json"), + "text/json" to arrayOf("json"), + "application/lost+xml" to arrayOf("lostxml"), + "application/mac-binhex40" to arrayOf("hqx"), + "application/mac-compactpro" to arrayOf("cpt"), + "application/marc" to arrayOf("mrc"), + "application/mathematica" to arrayOf("ma","mb","nb"), + "application/mathml+xml" to arrayOf("mathml","mml"), + "text/mathml" to arrayOf("mathml","mml"), + "application/mbox" to arrayOf("mbox"), + "application/mediaservercontrol+xml" to arrayOf("mscml"), + "application/mp4" to arrayOf("mp4s"), + "application/msword" to arrayOf("doc","dot","wiz"), + "application/mxf" to arrayOf("mxf"), + "application/octet-stream" to arrayOf("a","bin","bpk","deploy","dist","distz","dmg","dms","dump","elc","iso","lha","lrf","lzh","o","obj","pkg","so","srt"), + "application/oda" to arrayOf("oda"), + "application/oebps-package+xml" to arrayOf("opf"), + "application/ogg" to arrayOf("ogx"), + "application/onenote" to arrayOf("onepkg","onetmp","onetoc","onetoc2"), + "application/patch-ops-error+xml" to arrayOf("xer"), + "application/pdf" to arrayOf("pdf"), + "application/x-pdf" to arrayOf("pdf"), + "application/pgp-encrypted" to arrayOf("pgp"), + "application/pgp-signature" to arrayOf("asc","sig"), + "application/pics-rules" to arrayOf("prf"), + "application/pkcs10" to arrayOf("p10"), + "application/pkcs7-mime" to arrayOf("p7c","p7m"), + "application/x-pkcs7-certreqresp" to arrayOf("p7c","p7m"), + "application/x-pkcs7-certificates" to arrayOf("p7c","p7m"), + "application/pkcs7-signature" to arrayOf("p7s"), + "application/pkix-cert" to arrayOf("cer"), + "application/pkix-crl" to arrayOf("crl"), + "application/pkix-pkipath" to arrayOf("pkipath"), + "application/pkixcmp" to arrayOf("pki"), + "application/pls+xml" to arrayOf("pls"), + "application/postscript" to arrayOf("ai","eps","ps"), + "application/prs.cww" to arrayOf("cww"), + "application/rdf+xml" to arrayOf("rdf"), + "application/reginfo+xml" to arrayOf("rif"), + "application/relax-ng-compact-syntax" to arrayOf("rnc"), + "application/resource-lists+xml" to arrayOf("rl"), + "application/resource-lists-diff+xml" to arrayOf("rld"), + "application/rls-services+xml" to arrayOf("rs"), + "application/rsd+xml" to arrayOf("rsd"), + "application/rss+xml" to arrayOf("rss","xml"), + "application/rtf" to arrayOf("rtf"), + "application/sbml+xml" to arrayOf("sbml"), + "application/scvp-cv-request" to arrayOf("scq"), + "application/scvp-cv-response" to arrayOf("scs"), + "application/scvp-vp-request" to arrayOf("spq"), + "application/scvp-vp-response" to arrayOf("spp"), + "application/sdp" to arrayOf("sdp"), + "application/set-payment-initiation" to arrayOf("setpay"), + "application/set-registration-initiation" to arrayOf("setreg"), + "application/shf+xml" to arrayOf("shf"), + "application/smil+xml" to arrayOf("smi","smil"), + "application/sparql-query" to arrayOf("rq"), + "application/sparql-results+xml" to arrayOf("srx"), + "application/srgs" to arrayOf("gram"), + "application/srgs+xml" to arrayOf("grxml"), + "application/ssml+xml" to arrayOf("ssml"), + "application/vnd.3gpp.pic-bw-large" to arrayOf("plb"), + "application/vnd.3gpp.pic-bw-small" to arrayOf("psb"), + "application/vnd.3gpp.pic-bw-var" to arrayOf("pvb"), + "application/vnd.3gpp2.tcap" to arrayOf("tcap"), + "application/vnd.3m.post-it-notes" to arrayOf("pwn"), + "application/vnd.accpac.simply.aso" to arrayOf("aso"), + "application/vnd.accpac.simply.imp" to arrayOf("imp"), + "application/vnd.acucobol" to arrayOf("acu"), + "application/vnd.acucorp" to arrayOf("acutc","atc"), + "application/vnd.adobe.air-application-installer-package+zip" to arrayOf("air"), + "application/vnd.adobe.xdp+xml" to arrayOf("xdp"), + "application/vnd.adobe.xfdf" to arrayOf("xfdf"), + "application/vnd.airzip.filesecure.azf" to arrayOf("azf"), + "application/vnd.airzip.filesecure.azs" to arrayOf("azs"), + "application/vnd.amazon.ebook" to arrayOf("azw"), + "application/vnd.americandynamics.acc" to arrayOf("acc"), + "application/vnd.amiga.ami" to arrayOf("ami"), + "application/vnd.android.package-archive" to arrayOf("apk"), + "application/vnd.anser-web-certificate-issue-initiation" to arrayOf("cii"), + "application/vnd.anser-web-funds-transfer-initiation" to arrayOf("fti"), + "application/vnd.antix.game-component" to arrayOf("atx"), + "application/vnd.apple.installer+xml" to arrayOf("mpkg"), + "application/vnd.arastra.swi" to arrayOf("swi"), + "application/vnd.audiograph" to arrayOf("aep"), + "application/vnd.blueice.multipass" to arrayOf("mpm"), + "application/vnd.bmi" to arrayOf("bmi"), + "application/vnd.businessobjects" to arrayOf("rep"), + "application/vnd.chemdraw+xml" to arrayOf("cdxml"), + "application/vnd.chipnuts.karaoke-mmd" to arrayOf("mmd"), + "application/vnd.cinderella" to arrayOf("cdy"), + "application/vnd.claymore" to arrayOf("cla"), + "application/vnd.clonk.c4group" to arrayOf("c4d","c4f","c4g","c4p","c4u"), + "application/vnd.commonspace" to arrayOf("csp"), + "application/vnd.contact.cmsg" to arrayOf("cdbcmsg"), + "application/vnd.cosmocaller" to arrayOf("cmc"), + "application/vnd.crick.clicker" to arrayOf("clkx"), + "application/vnd.crick.clicker.keyboard" to arrayOf("clkk"), + "application/vnd.crick.clicker.palette" to arrayOf("clkp"), + "application/vnd.crick.clicker.template" to arrayOf("clkt"), + "application/vnd.crick.clicker.wordbank" to arrayOf("clkw"), + "application/vnd.criticaltools.wbs+xml" to arrayOf("wbs"), + "application/vnd.ctc-posml" to arrayOf("pml"), + "application/vnd.cups-ppd" to arrayOf("ppd"), + "application/vnd.curl.car" to arrayOf("car"), + "application/vnd.curl.pcurl" to arrayOf("pcurl"), + "application/vnd.data-vision.rdz" to arrayOf("rdz"), + "application/vnd.debian.binary-package" to arrayOf("deb","udeb"), + "application/vnd.denovo.fcselayout-link" to arrayOf("fe_launch"), + "application/vnd.dna" to arrayOf("dna"), + "application/vnd.dolby.mlp" to arrayOf("mlp"), + "application/vnd.dpgraph" to arrayOf("dpg"), + "application/vnd.dreamfactory" to arrayOf("dfac"), + "application/vnd.dynageo" to arrayOf("geo"), + "application/vnd.ecowin.chart" to arrayOf("mag"), + "application/vnd.enliven" to arrayOf("nml"), + "application/vnd.epson.esf" to arrayOf("esf"), + "application/vnd.epson.msf" to arrayOf("msf"), + "application/vnd.epson.quickanime" to arrayOf("qam"), + "application/vnd.epson.salt" to arrayOf("slt"), + "application/vnd.epson.ssf" to arrayOf("ssf"), + "application/vnd.eszigno3+xml" to arrayOf("es3","et3"), + "application/vnd.ezpix-album" to arrayOf("ez2"), + "application/vnd.ezpix-package" to arrayOf("ez3"), + "application/vnd.fdf" to arrayOf("fdf"), + "application/vnd.fdsn.mseed" to arrayOf("mseed"), + "application/vnd.fdsn.seed" to arrayOf("dataless","seed"), + "application/vnd.flographit" to arrayOf("gph"), + "application/vnd.fluxtime.clip" to arrayOf("ftc"), + "application/vnd.framemaker" to arrayOf("book","fm","frame","maker"), + "application/vnd.frogans.fnc" to arrayOf("fnc"), + "application/vnd.frogans.ltf" to arrayOf("ltf"), + "application/vnd.fsc.weblaunch" to arrayOf("fsc"), + "application/vnd.fujitsu.oasys" to arrayOf("oas"), + "application/vnd.fujitsu.oasys2" to arrayOf("oa2"), + "application/vnd.fujitsu.oasys3" to arrayOf("oa3"), + "application/vnd.fujitsu.oasysgp" to arrayOf("fg5"), + "application/vnd.fujitsu.oasysprs" to arrayOf("bh2"), + "application/vnd.fujixerox.ddd" to arrayOf("ddd"), + "application/vnd.fujixerox.docuworks" to arrayOf("xdw"), + "application/vnd.fujixerox.docuworks.binder" to arrayOf("xbd"), + "application/vnd.fuzzysheet" to arrayOf("fzs"), + "application/vnd.genomatix.tuxedo" to arrayOf("txd"), + "application/vnd.geogebra.file" to arrayOf("ggb"), + "application/vnd.geogebra.tool" to arrayOf("ggt"), + "application/vnd.geometry-explorer" to arrayOf("gex","gre"), + "application/vnd.gmx" to arrayOf("gmx"), + "application/vnd.google-earth.kml+xml" to arrayOf("kml"), + "application/vnd.google-earth.kmz" to arrayOf("kmz"), + "application/vnd.grafeq" to arrayOf("gqf","gqs"), + "application/vnd.groove-account" to arrayOf("gac"), + "application/vnd.groove-help" to arrayOf("ghf"), + "application/vnd.groove-identity-message" to arrayOf("gim"), + "application/vnd.groove-injector" to arrayOf("grv"), + "application/vnd.groove-tool-message" to arrayOf("gtm"), + "application/vnd.groove-tool-template" to arrayOf("tpl"), + "application/vnd.groove-vcard" to arrayOf("vcg"), + "application/vnd.handheld-entertainment+xml" to arrayOf("zmm"), + "application/vnd.hbci" to arrayOf("hbci"), + "application/vnd.hhe.lesson-player" to arrayOf("les"), + "application/vnd.hp-hpgl" to arrayOf("hpgl"), + "application/vnd.hp-hpid" to arrayOf("hpid"), + "application/vnd.hp-hps" to arrayOf("hps"), + "application/vnd.hp-jlyt" to arrayOf("jlt"), + "application/vnd.hp-pcl" to arrayOf("pcl"), + "application/vnd.hp-pclxl" to arrayOf("pclxl"), + "application/vnd.hydrostatix.sof-data" to arrayOf("sfd-hdstx"), + "application/vnd.hzn-3d-crossword" to arrayOf("x3d"), + "application/vnd.ibm.minipay" to arrayOf("mpy"), + "application/vnd.ibm.modcap" to arrayOf("afp","list3820","listafp"), + "application/vnd.ibm.rights-management" to arrayOf("irm"), + "application/vnd.ibm.secure-container" to arrayOf("sc"), + "application/vnd.iccprofile" to arrayOf("icc","icm"), + "application/vnd.igloader" to arrayOf("igl"), + "application/vnd.immervision-ivp" to arrayOf("ivp"), + "application/vnd.immervision-ivu" to arrayOf("ivu"), + "application/vnd.intercon.formnet" to arrayOf("xpw","xpx"), + "application/vnd.intu.qbo" to arrayOf("qbo"), + "application/vnd.intu.qfx" to arrayOf("qfx"), + "application/vnd.ipunplugged.rcprofile" to arrayOf("rcprofile"), + "application/vnd.irepository.package+xml" to arrayOf("irp"), + "application/vnd.is-xpr" to arrayOf("xpr"), + "application/vnd.jam" to arrayOf("jam"), + "application/vnd.jcp.javame.midlet-rms" to arrayOf("rms"), + "application/vnd.jisp" to arrayOf("jisp"), + "application/vnd.joost.joda-archive" to arrayOf("joda"), + "application/vnd.kahootz" to arrayOf("ktr","ktz"), + "application/vnd.kde.karbon" to arrayOf("karbon"), + "application/vnd.kde.kchart" to arrayOf("chrt"), + "application/vnd.kde.kformula" to arrayOf("kfo"), + "application/vnd.kde.kivio" to arrayOf("flw"), + "application/vnd.kde.kontour" to arrayOf("kon"), + "application/vnd.kde.kpresenter" to arrayOf("kpr","kpt"), + "application/vnd.kde.kspread" to arrayOf("ksp"), + "application/vnd.kde.kword" to arrayOf("kwd","kwt"), + "application/vnd.kenameaapp" to arrayOf("htke"), + "application/vnd.kidspiration" to arrayOf("kia"), + "application/vnd.kinar" to arrayOf("kne","knp"), + "application/vnd.koan" to arrayOf("skd","skm","skp","skt"), + "application/vnd.kodak-descriptor" to arrayOf("sse"), + "application/vnd.llamagraphics.life-balance.desktop" to arrayOf("lbd"), + "application/vnd.llamagraphics.life-balance.exchange+xml" to arrayOf("lbe"), + "application/vnd.lotus-1-2-3" to arrayOf("123"), + "application/vnd.lotus-approach" to arrayOf("apr"), + "application/vnd.lotus-freelance" to arrayOf("pre"), + "application/vnd.lotus-notes" to arrayOf("nsf"), + "application/vnd.lotus-organizer" to arrayOf("org"), + "application/vnd.lotus-screencam" to arrayOf("scm"), + "application/vnd.lotus-wordpro" to arrayOf("lwp"), + "application/vnd.macports.portpkg" to arrayOf("portpkg"), + "application/vnd.mcd" to arrayOf("mcd"), + "application/vnd.medcalcdata" to arrayOf("mc1"), + "application/vnd.mediastation.cdkey" to arrayOf("cdkey"), + "application/vnd.mfer" to arrayOf("mwf"), + "application/vnd.mfmp" to arrayOf("mfm"), + "application/vnd.micrografx.flo" to arrayOf("flo"), + "application/vnd.micrografx.igx" to arrayOf("igx"), + "application/vnd.mif" to arrayOf("mif"), + "application/vnd.mobius.daf" to arrayOf("daf"), + "application/vnd.mobius.dis" to arrayOf("dis"), + "application/vnd.mobius.mbk" to arrayOf("mbk"), + "application/vnd.mobius.mqy" to arrayOf("mqy"), + "application/vnd.mobius.msl" to arrayOf("msl"), + "application/vnd.mobius.plc" to arrayOf("plc"), + "application/vnd.mobius.txf" to arrayOf("txf"), + "application/vnd.mophun.application" to arrayOf("mpn"), + "application/vnd.mophun.certificate" to arrayOf("mpc"), + "application/vnd.mozilla.xul+xml" to arrayOf("xul"), + "application/vnd.ms-artgalry" to arrayOf("cil"), + "application/vnd.ms-cab-compressed" to arrayOf("cab"), + "application/vnd.ms-excel" to arrayOf("xla","xlb","xlc","xlm","xls","xlt","xlw"), + "application/vnd.ms-excel.addin.macroenabled.12" to arrayOf("xlam"), + "application/vnd.ms-excel.sheet.binary.macroenabled.12" to arrayOf("xlsb"), + "application/vnd.ms-excel.sheet.macroenabled.12" to arrayOf("xlsm"), + "application/vnd.ms-excel.template.macroenabled.12" to arrayOf("xltm"), + "application/vnd.ms-fontobject" to arrayOf("eot"), + "application/vnd.ms-htmlhelp" to arrayOf("chm"), + "application/vnd.ms-ims" to arrayOf("ims"), + "application/vnd.ms-lrm" to arrayOf("lrm"), + "application/vnd.ms-pki.seccat" to arrayOf("cat"), + "application/vnd.ms-pki.stl" to arrayOf("stl"), + "application/vnd.ms-powerpoint" to arrayOf("pot","ppa","pps","ppt","pwz"), + "application/vnd.ms-powerpoint.addin.macroenabled.12" to arrayOf("ppam"), + "application/vnd.ms-powerpoint.presentation.macroenabled.12" to arrayOf("pptm"), + "application/vnd.ms-powerpoint.slide.macroenabled.12" to arrayOf("sldm"), + "application/vnd.ms-powerpoint.slideshow.macroenabled.12" to arrayOf("ppsm"), + "application/vnd.ms-powerpoint.template.macroenabled.12" to arrayOf("potm"), + "application/vnd.ms-project" to arrayOf("mpp","mpt"), + "application/vnd.ms-word.document.macroenabled.12" to arrayOf("docm"), + "application/vnd.ms-word.template.macroenabled.12" to arrayOf("dotm"), + "application/vnd.ms-works" to arrayOf("wcm","wdb","wks","wps"), + "application/vnd.ms-wpl" to arrayOf("wpl"), + "application/vnd.ms-xpsdocument" to arrayOf("xps"), + "application/vnd.mseq" to arrayOf("mseq"), + "application/vnd.musician" to arrayOf("mus"), + "application/vnd.muvee.style" to arrayOf("msty"), + "application/vnd.neurolanguage.nlu" to arrayOf("nlu"), + "application/vnd.noblenet-directory" to arrayOf("nnd"), + "application/vnd.noblenet-sealer" to arrayOf("nns"), + "application/vnd.noblenet-web" to arrayOf("nnw"), + "application/vnd.nokia.n-gage.data" to arrayOf("ngdat"), + "application/vnd.nokia.n-gage.symbian.install" to arrayOf("n-gage"), + "application/vnd.nokia.radio-preset" to arrayOf("rpst"), + "application/vnd.nokia.radio-presets" to arrayOf("rpss"), + "application/vnd.novadigm.edm" to arrayOf("edm"), + "application/vnd.novadigm.edx" to arrayOf("edx"), + "application/vnd.novadigm.ext" to arrayOf("ext"), + "application/vnd.oasis.opendocument.chart" to arrayOf("odc"), + "application/vnd.oasis.opendocument.chart-template" to arrayOf("otc"), + "application/vnd.oasis.opendocument.database" to arrayOf("odb"), + "application/vnd.oasis.opendocument.formula" to arrayOf("odf"), + "application/vnd.oasis.opendocument.formula-template" to arrayOf("odft"), + "application/vnd.oasis.opendocument.graphics" to arrayOf("odg"), + "application/vnd.oasis.opendocument.graphics-template" to arrayOf("otg"), + "application/vnd.oasis.opendocument.image" to arrayOf("odi"), + "application/vnd.oasis.opendocument.image-template" to arrayOf("oti"), + "application/vnd.oasis.opendocument.presentation" to arrayOf("odp"), + "application/vnd.oasis.opendocument.presentation-template" to arrayOf("otp"), + "application/vnd.oasis.opendocument.spreadsheet" to arrayOf("ods"), + "application/vnd.oasis.opendocument.spreadsheet-template" to arrayOf("ots"), + "application/vnd.oasis.opendocument.text" to arrayOf("odt"), + "application/vnd.oasis.opendocument.text-master" to arrayOf("otm"), + "application/vnd.oasis.opendocument.text-template" to arrayOf("ott"), + "application/vnd.oasis.opendocument.text-web" to arrayOf("oth"), + "application/vnd.olpc-sugar" to arrayOf("xo"), + "application/vnd.oma.dd2+xml" to arrayOf("dd2"), + "application/vnd.openofficeorg.extension" to arrayOf("oxt"), + "application/vnd.openxmlformats-officedocument.presentationml.presentation" to arrayOf("pptx"), + "application/vnd.openxmlformats-officedocument.presentationml.slide" to arrayOf("sldx"), + "application/vnd.openxmlformats-officedocument.presentationml.slideshow" to arrayOf("ppsx"), + "application/vnd.openxmlformats-officedocument.presentationml.template" to arrayOf("potx"), + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" to arrayOf("xlsx"), + "application/vnd.openxmlformats-officedocument.spreadsheetml.template" to arrayOf("xltx"), + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" to arrayOf("docx"), + "application/vnd.openxmlformats-officedocument.wordprocessingml.template" to arrayOf("dotx"), + "application/vnd.osgi.dp" to arrayOf("dp"), + "application/vnd.palm" to arrayOf("oprc","pdb","pqa"), + "application/vnd.pg.format" to arrayOf("str"), + "application/vnd.pg.osasli" to arrayOf("ei6"), + "application/vnd.picsel" to arrayOf("efif"), + "application/vnd.pocketlearn" to arrayOf("plf"), + "application/vnd.powerbuilder6" to arrayOf("pbd"), + "application/vnd.previewsystems.box" to arrayOf("box"), + "application/vnd.proteus.magazine" to arrayOf("mgz"), + "application/vnd.publishare-delta-tree" to arrayOf("qps"), + "application/vnd.pvi.ptid1" to arrayOf("ptid"), + "application/vnd.quark.quarkxpress" to arrayOf("qwd","qwt","qxb","qxd","qxl","qxt"), + "application/vnd.rar" to arrayOf("rar"), + "application/x-rar-compressed" to arrayOf("rar"), + "application/vnd.recordare.musicxml" to arrayOf("mxl"), + "application/vnd.recordare.musicxml+xml" to arrayOf("musicxml"), + "application/vnd.rim.cod" to arrayOf("cod"), + "application/vnd.rn-realmedia" to arrayOf("rm"), + "application/vnd.route66.link66+xml" to arrayOf("link66"), + "application/vnd.seemail" to arrayOf("see"), + "application/vnd.sema" to arrayOf("sema"), + "application/vnd.semd" to arrayOf("semd"), + "application/vnd.semf" to arrayOf("semf"), + "application/vnd.shana.informed.formdata" to arrayOf("ifm"), + "application/vnd.shana.informed.formtemplate" to arrayOf("itp"), + "application/vnd.shana.informed.interchange" to arrayOf("iif"), + "application/vnd.shana.informed.package" to arrayOf("ipk"), + "application/vnd.simtech-mindmapper" to arrayOf("twd","twds"), + "application/vnd.smaf" to arrayOf("mmf"), + "application/vnd.smart.teacher" to arrayOf("teacher"), + "application/vnd.solent.sdkm+xml" to arrayOf("sdkd","sdkm"), + "application/vnd.spotfire.dxp" to arrayOf("dxp"), + "application/vnd.spotfire.sfs" to arrayOf("sfs"), + "application/vnd.sqlite3" to arrayOf("db","sqlite","sqlite3","db-wal","sqlite-wal","db-shm","sqlite-shm"), + "application/x-sqlite3" to arrayOf("db","sqlite","sqlite3","db-wal","sqlite-wal","db-shm","sqlite-shm"), + "application/vnd.stardivision.calc" to arrayOf("sdc"), + "application/vnd.stardivision.draw" to arrayOf("sda"), + "application/vnd.stardivision.impress" to arrayOf("sdd"), + "application/vnd.stardivision.math" to arrayOf("smf"), + "application/vnd.stardivision.writer" to arrayOf("sdw","vor"), + "application/vnd.stardivision.writer-global" to arrayOf("sgl"), + "application/vnd.sun.xml.calc" to arrayOf("sxc"), + "application/vnd.sun.xml.calc.template" to arrayOf("stc"), + "application/vnd.sun.xml.draw" to arrayOf("sxd"), + "application/vnd.sun.xml.draw.template" to arrayOf("std"), + "application/vnd.sun.xml.impress" to arrayOf("sxi"), + "application/vnd.sun.xml.impress.template" to arrayOf("sti"), + "application/vnd.sun.xml.math" to arrayOf("sxm"), + "application/vnd.sun.xml.writer" to arrayOf("sxw"), + "application/vnd.sun.xml.writer.global" to arrayOf("sxg"), + "application/vnd.sun.xml.writer.template" to arrayOf("stw"), + "application/vnd.sus-calendar" to arrayOf("sus","susp"), + "application/vnd.svd" to arrayOf("svd"), + "application/vnd.symbian.install" to arrayOf("sis","sisx"), + "application/vnd.syncml+xml" to arrayOf("xsm"), + "application/vnd.syncml.dm+wbxml" to arrayOf("bdm"), + "application/vnd.syncml.dm+xml" to arrayOf("xdm"), + "application/vnd.tao.intent-module-archive" to arrayOf("tao"), + "application/vnd.tmobile-livetv" to arrayOf("tmo"), + "application/vnd.trid.tpt" to arrayOf("tpt"), + "application/vnd.triscape.mxs" to arrayOf("mxs"), + "application/vnd.trueapp" to arrayOf("tra"), + "application/vnd.ufdl" to arrayOf("ufd","ufdl"), + "application/vnd.uiq.theme" to arrayOf("utz"), + "application/vnd.umajin" to arrayOf("umj"), + "application/vnd.unity" to arrayOf("unityweb"), + "application/vnd.uoml+xml" to arrayOf("uoml"), + "application/vnd.vcx" to arrayOf("vcx"), + "application/vnd.visio" to arrayOf("vsd","vss","vst","vsw","vsdx","vssx","vstx","vssm","vstm"), + "application/vnd.visionary" to arrayOf("vis"), + "application/vnd.vsf" to arrayOf("vsf"), + "application/vnd.wap.sic" to arrayOf("sic"), + "application/vnd.wap.slc" to arrayOf("slc"), + "application/vnd.wap.wbxml" to arrayOf("wbxml"), + "application/vnd.wap.wmlc" to arrayOf("wmlc"), + "application/vnd.wap.wmlscriptc" to arrayOf("wmlsc"), + "application/vnd.webturbo" to arrayOf("wtb"), + "application/vnd.wordperfect" to arrayOf("wpd"), + "application/vnd.wqd" to arrayOf("wqd"), + "application/vnd.wt.stf" to arrayOf("stf"), + "application/vnd.xara" to arrayOf("xar"), + "application/vnd.xfdl" to arrayOf("xfdl"), + "application/vnd.yamaha.hv-dic" to arrayOf("hvd"), + "application/vnd.yamaha.hv-script" to arrayOf("hvs"), + "application/vnd.yamaha.hv-voice" to arrayOf("hvp"), + "application/vnd.yamaha.openscoreformat" to arrayOf("osf"), + "application/vnd.yamaha.openscoreformat.osfpvg+xml" to arrayOf("osfpvg"), + "application/vnd.yamaha.smaf-audio" to arrayOf("saf"), + "application/vnd.yamaha.smaf-phrase" to arrayOf("spf"), + "application/vnd.yellowriver-custom-menu" to arrayOf("cmp"), + "application/vnd.zul" to arrayOf("zir","zirz"), + "application/vnd.zzazz.deck+xml" to arrayOf("zaz"), + "application/voicexml+xml" to arrayOf("vxml"), + "application/winhlp" to arrayOf("hlp"), + "application/wsdl+xml" to arrayOf("wsdl"), + "application/wspolicy+xml" to arrayOf("wspolicy"), + "application/x-7z-compressed" to arrayOf("7z"), + "application/x-abiword" to arrayOf("abw"), + "application/x-ace-compressed" to arrayOf("ace"), + "application/x-authorware-bin" to arrayOf("aab","u32","vox","x32"), + "application/x-authorware-map" to arrayOf("aam"), + "application/x-authorware-seg" to arrayOf("aas"), + "application/x-bcpio" to arrayOf("bcpio"), + "application/x-bittorrent" to arrayOf("torrent"), + "application/x-bzip" to arrayOf("bz"), + "application/x-bzip2" to arrayOf("boz","bz2"), + "application/x-cdlink" to arrayOf("vcd"), + "application/x-chat" to arrayOf("chat"), + "application/x-chess-pgn" to arrayOf("pgn"), + "application/x-cpio" to arrayOf("cpio"), + "application/x-csh" to arrayOf("csh"), + "application/x-debian-package" to arrayOf("deb","udeb"), + "application/x-director" to arrayOf("cct","cst","cxt","dcr","dir","dxr","fgd","swa","w3d"), + "application/x-doom" to arrayOf("wad"), + "application/x-dtbncx+xml" to arrayOf("ncx"), + "application/x-dtbook+xml" to arrayOf("dtb"), + "application/x-dtbresource+xml" to arrayOf("res"), + "application/x-dvi" to arrayOf("dvi"), + "application/x-font-bdf" to arrayOf("bdf"), + "application/x-font-ghostscript" to arrayOf("gsf"), + "application/x-font-linux-psf" to arrayOf("psf"), + "application/x-font-otf" to arrayOf("otf"), + "font/otf" to arrayOf(), + "application/x-font-pcf" to arrayOf("pcf"), + "application/x-font-snf" to arrayOf("snf"), + "application/x-font-ttf" to arrayOf("ttc","ttf"), + "application/x-font-type1" to arrayOf("afm","pfa","pfb","pfm"), + "application/x-futuresplash" to arrayOf("spl"), + "application/x-gnumeric" to arrayOf("gnumeric"), + "application/x-gtar" to arrayOf("gtar"), + "application/x-gzip" to arrayOf("gz","tgz"), + "application/gzip" to arrayOf("gz","tgz"), + "application/x-hdf" to arrayOf("hdf"), + "application/x-java-jnlp-file" to arrayOf("jnlp"), + "application/x-killustrator" to arrayOf("kil"), + "application/x-krita" to arrayOf("kra","krz"), + "application/x-latex" to arrayOf("latex"), + "application/x-mobipocket-ebook" to arrayOf("mobi","prc"), + "application/x-ms-application" to arrayOf("application"), + "application/x-ms-wmd" to arrayOf("wmd"), + "application/x-ms-wmz" to arrayOf("wmz"), + "application/x-ms-xbap" to arrayOf("xbap"), + "application/x-msaccess" to arrayOf("mdb"), + "application/x-msbinder" to arrayOf("obd"), + "application/x-mscardfile" to arrayOf("crd"), + "application/x-msclip" to arrayOf("clp"), + "application/x-msdownload" to arrayOf("bat","com","dll","exe","msi"), + "application/x-msmediaview" to arrayOf("m13","m14","mvb"), + "application/x-msmetafile" to arrayOf("wmf"), + "application/x-msmoney" to arrayOf("mny"), + "application/x-mspublisher" to arrayOf("pub"), + "application/x-msschedule" to arrayOf("scd"), + "application/x-msterminal" to arrayOf("trm"), + "application/x-mswrite" to arrayOf("wri"), + "application/x-netcdf" to arrayOf("cdf","nc"), + "application/x-perl" to arrayOf("pm","pl"), + "application/x-pkcs12" to arrayOf("p12","pfx"), + "application/x-pkcs7-certificates" to arrayOf("p7b","spc"), + "application/x-python-code" to arrayOf("pyc","pyo"), + "application/x-redhat-package-manager" to arrayOf("rpa"), + "application/x-rpm" to arrayOf("rpm"), + "application/x-sh" to arrayOf("sh"), + "application/x-shar" to arrayOf("shar"), + "application/x-shellscript" to arrayOf("sh"), + "application/x-shockwave-flash" to arrayOf("swf"), + "application/x-silverlight-app" to arrayOf("xap"), + "application/x-stuffit" to arrayOf("sit"), + "application/x-stuffitx" to arrayOf("sitx"), + "application/x-sv4cpio" to arrayOf("sv4cpio"), + "application/x-sv4crc" to arrayOf("sv4crc"), + "application/x-tar" to arrayOf("tar"), + "application/x-tcl" to arrayOf("tcl"), + "application/x-tex" to arrayOf("tex"), + "application/x-tex-tfm" to arrayOf("tfm"), + "application/x-texinfo" to arrayOf("texi","texinfo"), + "application/x-trash" to arrayOf(), + "application/x-ustar" to arrayOf("ustar"), + "application/x-wais-source" to arrayOf("src"), + "application/x-x509-ca-cert" to arrayOf("crt","der"), + "application/x-xfig" to arrayOf("fig"), + "application/x-xpinstall" to arrayOf("xpi"), + "application/xenc+xml" to arrayOf("xenc"), + "application/xhtml+xml" to arrayOf("xht","xhtml"), + "application/xml" to arrayOf("xml","xpdl","xsl"), + "application/xml-dtd" to arrayOf("dtd"), + "application/xop+xml" to arrayOf("xop"), + "application/xslt+xml" to arrayOf("xslt"), + "application/xspf+xml" to arrayOf("xspf"), + "application/xv+xml" to arrayOf("mxml","xhvml","xvm","xvml"), + "application/yaml" to arrayOf("yaml","yml"), + "text/yaml" to arrayOf("yaml","yml"), + "text/x-yaml" to arrayOf("yaml","yml"), + "application/x-yaml" to arrayOf("yaml","yml"), + "application/zip" to arrayOf("zip"), + "application/x-zip-compressed" to arrayOf("zip"), + "application/zip-compressed" to arrayOf("zip"), + "audio/3gpp" to arrayOf("3gp"), + "video/3gpp" to arrayOf("3gp"), + "audio/3gpp2" to arrayOf("3g2"), + "video/3gpp2" to arrayOf("3g2"), + "audio/aac" to arrayOf("aac","mp4","m4a"), + "audio/x-aac" to arrayOf("aac","mp4","m4a"), + "audio/adpcm" to arrayOf("adp"), + "audio/aiff" to arrayOf("aiff","aif","aff"), + "audio/x-aiff" to arrayOf("aiff","aif","aff"), + "audio/basic" to arrayOf("au","snd"), + "audio/flac" to arrayOf("flac"), + "audio/x-flac" to arrayOf("flac"), + "audio/midi" to arrayOf("kar","mid","midi","rmi"), + "audio/mp4" to arrayOf("mp4a"), + "audio/mpeg" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"), + "audio/mp3" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"), + "audio/mpeg3" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"), + "audio/x-mpeg-3" to arrayOf("m2a","m3a","mp2","mp2a","mp3","mpga"), + "audio/ogg" to arrayOf("oga","ogg","spx"), + "audio/opus" to arrayOf("opus"), + "audio/vnd.digital-winds" to arrayOf("eol"), + "audio/vnd.dts" to arrayOf("dts"), + "audio/vnd.dts.hd" to arrayOf("dtshd"), + "audio/vnd.lucent.voice" to arrayOf("lvp"), + "audio/vnd.ms-playready.media.pya" to arrayOf("pya"), + "audio/vnd.nuera.ecelp4800" to arrayOf("ecelp4800"), + "audio/vnd.nuera.ecelp7470" to arrayOf("ecelp7470"), + "audio/vnd.nuera.ecelp9600" to arrayOf("ecelp9600"), + "audio/wav" to arrayOf("wav"), + "audio/x-wav" to arrayOf("wav"), + "audio/vnd.wave" to arrayOf("wav"), + "audio/wave" to arrayOf("wav"), + "audio/x-pn-wav" to arrayOf("wav"), + "audio/webm" to arrayOf("weba"), + "audio/x-aiff" to arrayOf("aif","aifc","aiff"), + "audio/x-matroska" to arrayOf("mka"), + "audio/x-mpegurl" to arrayOf("m3u"), + "audio/x-ms-wax" to arrayOf("wax"), + "audio/x-ms-wma" to arrayOf("wma"), + "audio/x-pn-realaudio" to arrayOf("ra","ram"), + "audio/x-pn-realaudio-plugin" to arrayOf("rmp"), + "chemical/x-cdx" to arrayOf("cdx"), + "chemical/x-cif" to arrayOf("cif"), + "chemical/x-cmdf" to arrayOf("cmdf"), + "chemical/x-cml" to arrayOf("cml"), + "chemical/x-csml" to arrayOf("csml"), + "chemical/x-xyz" to arrayOf("xyz"), + "font/otf" to arrayOf("otf"), + "application/x-font-otf" to arrayOf(), + "font/woff" to arrayOf("woff"), + "font/woff2" to arrayOf("woff2"), + "gcode" to arrayOf("gcode"), + "text/x.gcode" to arrayOf("gcode"), + "text/x-gcode" to arrayOf("gcode"), + "image/avif" to arrayOf("avif","avifs"), + "image/bmp" to arrayOf("bmp"), + "image/cgm" to arrayOf("cgm"), + "image/g3fax" to arrayOf("g3"), + "image/gif" to arrayOf("gif"), + "image/heic" to arrayOf("heif","heic"), + "image/ief" to arrayOf("ief"), + "image/jpeg" to arrayOf("jpe","jpeg","jpg","pjpg","jfif","jfif-tbnl","jif"), + "image/pjpeg" to arrayOf("jpe","jpeg","jpg","pjpg","jfi","jfif","jfif-tbnl","jif"), + "image/png" to arrayOf("png"), + "image/x-png" to arrayOf("png"), + "image/vnd.mozilla.apng" to arrayOf(), + "image/prs.btif" to arrayOf("btif"), + "image/svg+xml" to arrayOf("svg","svgz"), + "image/tiff" to arrayOf("tif","tiff"), + "image/vnd.adobe.photoshop" to arrayOf("psd"), + "image/vnd.djvu" to arrayOf("djv","djvu"), + "image/vnd.dwg" to arrayOf("dwg"), + "image/vnd.dxf" to arrayOf("dxf"), + "image/vnd.fastbidsheet" to arrayOf("fbs"), + "image/vnd.fpx" to arrayOf("fpx"), + "image/vnd.fst" to arrayOf("fst"), + "image/vnd.fujixerox.edmics-mmr" to arrayOf("mmr"), + "image/vnd.fujixerox.edmics-rlc" to arrayOf("rlc"), + "image/vnd.ms-modi" to arrayOf("mdi"), + "image/vnd.net-fpx" to arrayOf("npx"), + "image/vnd.wap.wbmp" to arrayOf("wbmp"), + "image/vnd.xiff" to arrayOf("xif"), + "image/webp" to arrayOf("webp"), + "image/x-adobe-dng" to arrayOf("dng"), + "image/x-canon-cr2" to arrayOf("cr2"), + "image/x-canon-crw" to arrayOf("crw"), + "image/x-cmu-raster" to arrayOf("ras"), + "image/x-cmx" to arrayOf("cmx"), + "image/x-epson-erf" to arrayOf("erf"), + "image/x-freehand" to arrayOf("fh","fh4","fh5","fh7","fhc"), + "image/x-fuji-raf" to arrayOf("raf"), + "image/x-icns" to arrayOf("icns"), + "image/x-icon" to arrayOf("ico"), + "image/x-kodak-dcr" to arrayOf("dcr"), + "image/x-kodak-k25" to arrayOf("k25"), + "image/x-kodak-kdc" to arrayOf("kdc"), + "image/x-minolta-mrw" to arrayOf("mrw"), + "image/x-nikon-nef" to arrayOf("nef"), + "image/x-olympus-orf" to arrayOf("orf"), + "image/x-panasonic-raw" to arrayOf("raw","rw2","rwl"), + "image/x-pcx" to arrayOf("pcx"), + "image/x-pentax-pef" to arrayOf("pef","ptx"), + "image/x-pict" to arrayOf("pct","pic"), + "image/x-portable-anymap" to arrayOf("pnm"), + "image/x-portable-bitmap" to arrayOf("pbm"), + "image/x-portable-graymap" to arrayOf("pgm"), + "image/x-portable-pixmap" to arrayOf("ppm"), + "image/x-rgb" to arrayOf("rgb"), + "image/x-sigma-x3f" to arrayOf("x3f"), + "image/x-sony-arw" to arrayOf("arw"), + "image/x-sony-sr2" to arrayOf("sr2"), + "image/x-sony-srf" to arrayOf("srf"), + "image/x-xbitmap" to arrayOf("xbm"), + "image/x-xpixmap" to arrayOf("xpm"), + "image/x-xwindowdump" to arrayOf("xwd"), + "message/rfc822" to arrayOf("eml","mht","mhtml","mime","nws"), + "model/iges" to arrayOf("iges","igs"), + "model/mesh" to arrayOf("mesh","msh","silo"), + "model/vnd.dwf" to arrayOf("dwf"), + "model/vnd.gdl" to arrayOf("gdl"), + "model/vnd.gtw" to arrayOf("gtw"), + "model/vnd.mts" to arrayOf("mts"), + "model/vnd.vtu" to arrayOf("vtu"), + "model/vrml" to arrayOf("vrml","wrl"), + "text/calendar" to arrayOf("ics","ifb"), + "text/css" to arrayOf("css"), + "text/csv" to arrayOf("csv"), + "application/csv" to arrayOf(), + "text/x-csv" to arrayOf(), + "application/x-csv" to arrayOf(), + "text/x-comma-separated-values" to arrayOf(), + "text/comma-separated-values" to arrayOf(), + "text/html" to arrayOf("htm","html"), + "text/javascript" to arrayOf("js"), + "application/ecmascript" to arrayOf("js"), + "application/javascript" to arrayOf("js"), + "application/x-ecmascript" to arrayOf("js"), + "application/x-javascript" to arrayOf("js"), + "text/ecmascript" to arrayOf("js"), + "text/javascript1.0" to arrayOf("js"), + "text/javascript1.1" to arrayOf("js"), + "text/javascript1.2" to arrayOf("js"), + "text/javascript1.3" to arrayOf("js"), + "text/javascript1.4" to arrayOf("js"), + "text/javascript1.5" to arrayOf("js"), + "text/jscript" to arrayOf("js"), + "text/livescript" to arrayOf("js"), + "text/x-ecmascript" to arrayOf("js"), + "text/x-javascript" to arrayOf("js"), + "text/markdown" to arrayOf("md","markdown","mdown","markdn"), + "text/x-markdown" to arrayOf("md","markdown","mdown","markdn"), + "text/mathml" to arrayOf("mathml","mml"), + "application/mathml+xml" to arrayOf("mml"), + "text/plain" to arrayOf("conf","def","diff","in","ksh","list","log","pl","text","txt"), + "text/prs.lines.tag" to arrayOf("dsc"), + "text/richtext" to arrayOf("rtx"), + "text/sgml" to arrayOf("sgm","sgml"), + "text/tab-separated-values" to arrayOf("tsv"), + "text/troff" to arrayOf("man","me","ms","roff","t","tr"), + "text/uri-list" to arrayOf("uri","uris","urls"), + "text/vnd.curl" to arrayOf("curl"), + "text/vnd.curl.dcurl" to arrayOf("dcurl"), + "text/vnd.curl.mcurl" to arrayOf("mcurl"), + "text/vnd.curl.scurl" to arrayOf("scurl"), + "text/vnd.fly" to arrayOf("fly"), + "text/vnd.fmi.flexstor" to arrayOf("flx"), + "text/vnd.graphviz" to arrayOf("gv"), + "text/vnd.in3d.3dml" to arrayOf("3dml"), + "text/vnd.in3d.spot" to arrayOf("spot"), + "text/vnd.sun.j2me.app-descriptor" to arrayOf("jad"), + "text/vnd.wap.si" to arrayOf("si"), + "text/vnd.wap.sl" to arrayOf("sl"), + "text/vnd.wap.wml" to arrayOf("wml"), + "text/vnd.wap.wmlscript" to arrayOf("wmls"), + "text/x-asm" to arrayOf("asm","s"), + "text/x-c" to arrayOf("c","cc","cpp","cxx","dic","h","hh"), + "text/x-fortran" to arrayOf("f","f77","f90","for"), + "text/x-java-source" to arrayOf("java"), + "text/x-pascal" to arrayOf("p","pas","pp","inc"), + "text/x-python" to arrayOf("py"), + "text/x-setext" to arrayOf("etx"), + "text/x-uuencode" to arrayOf("uu"), + "text/x-vcalendar" to arrayOf("vcs"), + "text/x-vcard" to arrayOf("vcf"), + "video/3gpp" to arrayOf("3gp"), + "audio/3gpp" to arrayOf("3gp"), + "video/3gpp2" to arrayOf("3g2"), + "audio/3gpp2" to arrayOf("3g2"), + "video/h261" to arrayOf("h261"), + "video/h263" to arrayOf("h263"), + "video/h264" to arrayOf("h264"), + "video/jpeg" to arrayOf("jpgv"), + "video/jpm" to arrayOf("jpgm","jpm"), + "video/mj2" to arrayOf("mj2","mjp2"), + "video/mp2t" to arrayOf("ts"), + "video/mp4" to arrayOf("mp4","mp4v","mpg4"), + "video/mpeg" to arrayOf("m1v","m2v","mpa","mpe","mpeg","mpg"), + "video/ogg" to arrayOf("ogv"), + "video/quicktime" to arrayOf("mov","qt"), + "video/vnd.fvt" to arrayOf("fvt"), + "video/vnd.mpegurl" to arrayOf("m4u","mxu"), + "video/vnd.ms-playready.media.pyv" to arrayOf("pyv"), + "video/vnd.vivo" to arrayOf("viv"), + "video/webm" to arrayOf("webm"), + "video/x-f4v" to arrayOf("f4v"), + "video/x-fli" to arrayOf("fli"), + "video/x-flv" to arrayOf("flv"), + "video/x-m4v" to arrayOf("m4v"), + "video/x-matroska" to arrayOf("mkv"), + "video/x-ms-asf" to arrayOf("asf","asx"), + "video/x-ms-wm" to arrayOf("wm"), + "video/x-ms-wmv" to arrayOf("wmv"), + "video/x-ms-wmx" to arrayOf("wmx"), + "video/x-ms-wvx" to arrayOf("wvx"), + "video/x-msvideo" to arrayOf("avi"), + "video/x-sgi-movie" to arrayOf("movie"), + "x-conference/x-cooltalk" to arrayOf("ice")) +} +