bring UI in this repo

This commit is contained in:
Pierre Dubouilh authored and Pierre Dubouilh committed 2023-07-08 15:25:11 +02:00
1 parent 08ec485e78
commit 0a77b08552
11 files changed
+1345 -14

No files matched your search

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" xmlns:v="bla"><style><![CDATA[path{shape-rendering: crispedges}.B{fill:#c1c1c1}.C{fill:#ff0}.D{fill:#fff}.E{fill:#818181}.F{fill:#00f}.G{fill:#818100}]]></style><g class="E"><path d="M16 1h1v1h-1z"/><path d="M15 2h1v1h-1z"/></g><path d="M16 2h1v1h-1z" class="B"/><path d="M17 2h1v1h-1z"/><path d="M14 3h1v1h-1z" class="E"/><g class="D"><path d="M15 3h1v1h-1z"/><path d="M16 3h1v1h-1z"/></g><path d="M17 3h1v1h-1z" class="B"/><path d="M18 3h1v1h-1z"/><g class="E"><path d="M7 4h1v1H7z"/><path d="M8 4h1v1H8z"/><path d="M9 4h1v1H9z"/><path d="M10 4h1v1h-1z"/><path d="M11 4h1v1h-1z"/><path d="M12 4h1v1h-1z"/><path d="M13 4h1v1h-1z"/></g><g class="D"><path d="M14 4h1v1h-1z"/><path d="M15 4h1v1h-1z"/><path d="M16 4h1v1h-1z"/><path d="M17 4h1v1h-1z"/></g><path d="M18 4h1v1h-1z" class="B"/><path d="M19 4h1v1h-1z"/><path d="M6 5h1v1H6z" class="E"/><g class="D"><path d="M7 5h1v1H7z"/><path d="M8 5h1v1H8z"/><path d="M9 5h1v1H9z"/><path d="M10 5h1v1h-1z"/><path d="M11 5h1v1h-1z"/></g><path d="M12 5h1v1h-1z" class="E"/><g class="D"><path d="M13 5h1v1h-1z"/><path d="M14 5h1v1h-1z"/><path d="M15 5h1v1h-1z"/><path d="M16 5h1v1h-1z"/><path d="M17 5h1v1h-1z"/><path d="M18 5h1v1h-1z"/></g><path d="M19 5h1v1h-1z" class="B"/><path d="M20 5h1v1h-1z"/><path d="M5 6h1v1H5z" class="E"/><path d="M6 6h1v1H6z" class="D"/><path d="M7 6h1v1H7z" class="B"/><path d="M8 6h1v1H8z" class="C"/><path d="M9 6h1v1H9z" class="B"/><path d="M10 6h1v1h-1z" class="C"/><path d="M11 6h1v1h-1z" class="E"/><g class="D"><path d="M12 6h1v1h-1z"/><path d="M13 6h1v1h-1z"/><path d="M14 6h1v1h-1z"/><path d="M15 6h1v1h-1z"/><path d="M16 6h1v1h-1z"/><path d="M17 6h1v1h-1z"/><path d="M18 6h1v1h-1z"/><path d="M19 6h1v1h-1z"/></g><path d="M20 6h1v1h-1z" class="B"/><path d="M21 6h1v1h-1z"/><path d="M4 7h1v1H4z" class="E"/><path d="M5 7h1v1H5z" class="D"/><path d="M6 7h1v1H6z" class="B"/><path d="M7 7h1v1H7z" class="C"/><path d="M8 7h1v1H8z" class="B"/><path d="M9 7h1v1H9z" class="C"/><path d="M10 7h1v1h-1z" class="E"/><g class="D"><path d="M11 7h1v1h-1z"/><path d="M12 7h1v1h-1z"/><path d="M13 7h1v1h-1z"/><path d="M14 7h1v1h-1z"/></g><path d="M15 7h1v1h-1z" class="F"/><g class="D"><path d="M16 7h1v1h-1z"/><path d="M17 7h1v1h-1z"/><path d="M18 7h1v1h-1z"/><path d="M19 7h1v1h-1z"/><path d="M20 7h1v1h-1z"/></g><path d="M21 7h1v1h-1z" class="B"/><path d="M22 7h1v1h-1z"/><path d="M3 8h1v1H3z" class="E"/><path d="M4 8h1v1H4z" class="D"/><path d="M5 8h1v1H5z" class="B"/><path d="M6 8h1v1H6z" class="C"/><path d="M7 8h1v1H7z" class="B"/><path d="M8 8h1v1H8z" class="C"/><path d="M9 8h1v1H9z" class="E"/><g class="D"><path d="M10 8h1v1h-1z"/><path d="M11 8h1v1h-1z"/><path d="M12 8h1v1h-1z"/><path d="M13 8h1v1h-1z"/></g><path d="M14 8h1v1h-1z" class="F"/><g class="D"><path d="M15 8h1v1h-1z"/><path d="M16 8h1v1h-1z"/></g><path d="M17 8h1v1h-1z" class="F"/><g class="D"><path d="M18 8h1v1h-1z"/><path d="M19 8h1v1h-1z"/><path d="M20 8h1v1h-1z"/><path d="M21 8h1v1h-1z"/></g><path d="M22 8h1v1h-1z" class="B"/><path d="M23 8h1v1h-1z"/><g class="E"><path d="M24 8h1v1h-1z"/><path d="M25 8h1v1h-1z"/><path d="M26 8h1v1h-1z"/><path d="M27 8h1v1h-1zM3 9h1v1H3z"/></g><path d="M4 9h1v1H4z" class="D"/><path d="M5 9h1v1H5z" class="C"/><path d="M6 9h1v1H6z" class="B"/><path d="M7 9h1v1H7z" class="C"/><path d="M8 9h1v1H8z" class="E"/><g class="D"><path d="M9 9h1v1H9z"/><path d="M10 9h1v1h-1z"/><path d="M11 9h1v1h-1z"/><path d="M12 9h1v1h-1z"/></g><path d="M13 9h1v1h-1z" class="F"/><g class="D"><path d="M14 9h1v1h-1z"/><path d="M15 9h1v1h-1z"/></g><path d="M16 9h1v1h-1z" class="F"/><g class="D"><path d="M17 9h1v1h-1z"/><path d="M18 9h1v1h-1z"/><path d="M19 9h1v1h-1z"/><path d="M20 9h1v1h-1z"/><path d="M21 9h1v1h-1z"/><path d="M22 9h1v1h-1z"/></g><path d="M23 9h1v1h-1z" class="B"/><path d="M24 9h1v1h-1z"/><g class="D"><path d="M25 9h1v1h-1z"/><path d="M26 9h1v1h-1z"/><path d="M27 9h1v1h-1z"/></g><path d="M28 9h1v1h-1z"/><path d="M3 10h1v1H3z" class="E"/><path d="M4 10h1v1H4z" class="D"/><path d="M5 10h1v1H5z" class="B"/><path d="M6 10h1v1H6z" class="C"/><path d="M7 10h1v1H7z" class="E"/><g class="D"><path d="M8 10h1v1H8z"/><path d="M9 10h1v1H9z"/><path d="M10 10h1v1h-1z"/><path d="M11 10h1v1h-1z"/></g><path d="M12 10h1v1h-1z" class="F"/><g class="D"><path d="M13 10h1v1h-1z"/><path d="M14 10h1v1h-1z"/></g><path d="M15 10h1v1h-1z" class="F"/><g class="D"><path d="M16 10h1v1h-1z"/><path d="M17 10h1v1h-1z"/></g><path d="M18 10h1v1h-1z" class="F"/><g class="D"><path d="M19 10h1v1h-1z"/><path d="M20 10h1v1h-1z"/><path d="M21 10h1v1h-1z"/><path d="M22 10h1v1h-1z"/><path d="M23 10h1v1h-1z"/></g><path d="M24 10h1v1h-1z" class="B"/><path d="M25 10h1v1h-1z"/><path d="M26 10h1v1h-1z" class="C"/><path d="M27 10h1v1h-1z" class="B"/><path d="M28 10h1v1h-1z" class="G"/><path d="M29 10h1v1h-1z"/><path d="M3 11h1v1H3z" class="E"/><path d="M4 11h1v1H4z" class="D"/><path d="M5 11h1v1H5z" class="C"/><path d="M6 11h1v1H6z" class="E"/><g class="D"><path d="M7 11h1v1HLine truncated

After

Width:  |  Height:  |  Size: 23 KiB

+4
View File
@@ -0,0 +1,4 @@
gossa-ui
========
a ~~ugly~~ simple, dependency-free, plain js/css/html front-end for [gossa](https://github.com/pldubouilh/gossa)
Vendored Executable
+812
View File
@@ -0,0 +1,812 @@
/* eslint-env browser */
/* eslint-disable no-multi-str */
function cancelDefault (e) {
e.preventDefault()
e.stopPropagation()
}
const warningMsg = () => 'Leaving will interrupt transfer?\n'
const rmMsg = () => !confirm('Remove file?\n')
const ensureMove = () => !confirm('move items?')
const isRo = () => window.ro
const upBarName = document.getElementById('upBarName')
const upBarPc = document.getElementById('upBarPc')
const upGrid = document.getElementById('drop-grid')
const pics = document.getElementById('pics')
const picsHolder = document.getElementById('picsHolder')
const video = document.getElementById('video')
const videoHolder = document.getElementById('videoHolder')
const manualUpload = document.getElementById('clickupload')
const help = document.getElementById('help')
const okBadge = document.getElementById('ok')
const sadBadge = document.getElementById('sad')
const pageTitle = document.head.querySelector('title')
const pageH1 = document.body.querySelector('h1')
const editor = document.getElementById('text-editor')
const crossIcon = document.getElementById('quitAll')
const toast = document.getElementById('toast')
const table = document.getElementById('linkTable')
const transparentPixel = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
// helpers
let allA
let imgsIndex
let allImgs
const decode = a => decodeURIComponent(a).replace(location.origin, '')
const getArrowSelected = () => document.querySelector('.arrow-selected')
const getASelected = () => !getArrowSelected() ? false : getArrowSelected().parentElement.parentElement.querySelectorAll('a')[0]
const prependPath = a => a.startsWith('/') ? a : decodeURI(location.pathname) + a
const prevent = e => e.preventDefault()
const flicker = w => w.classList.remove('runFade') || void w.offsetWidth || w.classList.add('runFade')
// Manual upload
manualUpload.addEventListener('change', () => Array.from(manualUpload.files).forEach(f => isDupe(f.name) || postFile(f, '/' + f.name)), false)
// Soft nav
async function browseTo (href, flickerDone, skipHistory) {
try {
const r = await fetch(href, { credentials: 'include' })
const t = await r.text()
const parsed = new DOMParser().parseFromString(t, 'text/html')
table.innerHTML = parsed.getElementById('linkTable').innerHTML
const title = parsed.head.querySelector('title').innerText
// check if is current path - if so skip following
if (pageTitle.innerText !== title) {
if (!skipHistory) {
history.pushState({}, '', encodeURI(window.extraPath + title))
}
pageTitle.innerText = title
pageH1.innerText = '.' + title
setTitle()
}
init()
if (flickerDone) flicker(okBadge)
} catch (error) {
flicker(sadBadge)
}
}
window.onClickLink = e => {
const a = e ? e.target : getASelected()
if (e) {
setCursorTo(e.target.innerText)
}
// always force download if ctrl pressed (also covers zipping folders)
if (e && e.ctrlKey) {
dl(a)
return false
}
// follow dirs
if (isFolder(a)) {
browseTo(a.href)
return false
// enable notepad if relevant
} else if (!window.ro && isTextFile(a.innerText) && !isEditorMode()) {
padOn(a)
return false
// toggle picture carousel
} else if (isPic(a.href) && !isPicMode()) {
picsOn(a.href)
return false
// toggle videos mode
} else if (isVideo(a.href) && !isVideoMode()) {
videoOn(a.href)
return false
}
// else just force download
dl(a)
return false
}
let softStatePushed
function pushSoftState (d) {
if (softStatePushed) { return }
softStatePushed = true
history.pushState({}, '', encodeURI(d))
}
const refresh = () => browseTo(location.href, true)
const softPrev = () => history.replaceState({}, '', location.href.split('/').slice(0, -1).join('/') + '/')
const isAtExtraPath = url => location.origin + window.extraPath + '/../' === url
const prevPage = (url, skipHistory) => window.quitAll() || isAtExtraPath(url) || browseTo(url, false, skipHistory)
window.onpopstate = () => prevPage(location.href, true)
// RPC
function upload (id, what, path, cbDone, cbErr, cbUpdate) {
const xhr = new XMLHttpRequest()
xhr.open('POST', location.origin + window.extraPath + '/post')
xhr.setRequestHeader('gossa-path', path)
xhr.upload.addEventListener('load', cbDone)
xhr.upload.addEventListener('progress', cbUpdate)
xhr.upload.addEventListener('error', cbErr)
xhr.upload.id = id
xhr.send(what)
}
function rpc (call, args, cb) {
console.log('RPC', call, args)
const xhr = new XMLHttpRequest()
xhr.open('POST', location.origin + window.extraPath + '/rpc')
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
xhr.send(JSON.stringify({ call, args }))
xhr.onload = cb
xhr.onerror = () => flicker(sadBadge)
}
const mkdirCall = (path, cb) => rpc('mkdirp', [prependPath(path)], cb)
const rmCall = (path1, cb) => rpc('rm', [prependPath(path1)], cb)
const mvCall = (path1, path2, cb) => rpc('mv', [path1, path2], cb)
// File upload
let totalDone = 0
let totalUploads = 0
let totalUploadsSize = 0
let totalUploadedSize = []
const dupe = test => allA.find(a => a.innerHTML.replace('/', '') === test)
const isDupe = t => dupe(t) ? alert(t + ' already already exists') || true : false
function shouldRefresh () {
totalDone += 1
if (totalUploads === totalDone) {
window.onbeforeunload = null
console.log('done uploading ' + totalDone + ' files')
totalDone = 0
totalUploads = 0
totalUploadsSize = 0
totalUploadedSize = []
upBarPc.style.display = upBarName.style.display = 'none'
table.classList.remove('uploading-table')
setTimeout(refresh, 200)
}
}
function updatePercent (ev) {
totalUploadedSize[ev.target.id] = ev.loaded
const ttlDone = totalUploadedSize.reduce((s, x) => s + x)
const pc = Math.floor(100 * ttlDone / totalUploadsSize) + '%'
upBarPc.innerText = pc
upBarPc.style.width = pc
}
function postFile (file, path) {
if (window.ro) return
path = decodeURI(location.pathname).slice(0, -1) + path
window.onbeforeunload = warningMsg
table.classList.add('uploading-table')
upBarPc.style.display = upBarName.style.display = 'block'
totalUploads += 1
totalUploadsSize += file.size
upBarName.innerText = totalUploads > 1 ? totalUploads + ' files' : file.name
const formData = new FormData()
formData.append(file.name, file)
upload(totalUploads, formData, encodeURIComponent(path), shouldRefresh, null, updatePercent)
}
const parseDomFolder = f => f.createReader().readEntries(e => e.forEach(i => parseDomItem(i)))
function parseDomItem (domFile, shoudCheckDupes) {
if (shoudCheckDupes && isDupe(domFile.name)) {
return
}
if (domFile.isFile) {
domFile.file(f => postFile(f, domFile.fullPath))
} else {
// remove absolute path
const f = domFile.fullPath.startsWith('/') ? domFile.fullPath.slice(1) : domFile.fullPath
mkdirCall(f, () => parseDomFolder(domFile))
}
}
function pushEntry (entry) {
if (!entry.webkitGetAsEntry && !entry.getAsEntry) {
return alert('Unsupported browser ! Please update to chrome/firefox.')
} else {
entry = entry.webkitGetAsEntry() || entry.getAsEntry()
}
parseDomItem(entry, true)
}
window.titleClick = function (e) {
const p = Array.from(document.querySelector('h1').childNodes).map(k => k.innerText)
const i = p.findIndex(s => s === e.target.innerText)
const dst = p.slice(0, i + 1).join('').slice(1)
const target = location.origin + window.extraPath + encodeURI(dst)
browseTo(target, false)
}
// Move files and folders
const isFolder = e => e && e.href && e.innerText.endsWith('/')
const setBackgroundLinks = t => { t.classList.add('highlight') }
const getLink = () => document.querySelector('.highlight') || {}
const resetBackgroundLinks = () => { try { getLink().classList.remove('highlight') } catch(e) { /* */ } } // eslint-disable-line
// Not the nicest - sometimes, upon hover, firefox reports nodeName === '#text', and chrome reports nodeName === 'A'...
const getClosestRow = t => t.nodeName === '#text' ? t.parentElement.parentElement : t.nodeName === 'A' ? t.parentElement : t
let draggingSrc
upGrid.ondragend = upGrid.ondragexit = upGrid.ondragleave = e => {
cancelDefault(e)
upGrid.style.display = 'none'
}
// Handle hover
document.ondragenter = e => {
if (isEditorMode() || isPicMode() || window.ro) { return }
cancelDefault(e)
resetBackgroundLinks()
// Display upload grid when uploading new elements
if (!draggingSrc) {
upGrid.style.display = 'flex'
e.dataTransfer.dropEffect = 'copy'
// Or highlight entry if drag and drop
} else if (draggingSrc) {
const t = getClosestRow(e.target)
isFolder(t.firstChild) && setBackgroundLinks(t)
}
}
document.ondragstart = e => { draggingSrc = e.target.innerHTML }
document.ondragend = e => resetBackgroundLinks()
document.ondragover = e => {
cancelDefault(e)
return false
}
// Handle drop
document.ondrop = e => {
if (window.ro) return
cancelDefault(e)
upGrid.style.display = 'none'
let t = getLink().firstChild
// move to a folder
if (draggingSrc && t) {
const dest = t.innerHTML + draggingSrc
ensureMove() || mvCall(prependPath(draggingSrc), prependPath(dest), refresh)
// ... or upload
} else if (e.dataTransfer.items.length) {
Array.from(e.dataTransfer.items).forEach(pushEntry)
}
resetBackgroundLinks()
draggingSrc = null
return false
}
// Notepad
const isEditorMode = () => editor.style.display === 'block'
const textTypes = ['.txt', '.rtf', '.md', '.markdown', '.log', '.yaml', '.yml']
const isTextFile = src => src && textTypes.find(type => src.toLocaleLowerCase().includes(type))
let fileEdited
function saveText (quitting) {
const formData = new FormData()
formData.append(fileEdited, editor.value)
const path = encodeURIComponent(decodeURI(location.pathname) + fileEdited)
upload(0, formData, path, () => {
toast.style.display = 'none'
if (!quitting) return
clearInterval(window.padTimer)
window.onbeforeunload = null
resetView()
softPrev()
refresh()
}, () => {
toast.style.display = 'block'
if (!quitting) return
alert('cant save!\r\nleave window open to resume saving\r\nwhen connection back up')
})
}
function padOff () {
if (!isEditorMode()) { return }
saveText(true)
return true
}
async function padOn (a) {
if (a) {
try {
fileEdited = a.innerHTML
const f = await fetch(a.href, {
credentials: 'include',
headers: new Headers({ 'pragma': 'no-cache', 'cache-control': 'no-cache' })
})
editor.value = await f.text()
} catch (error) {
return alert('cant read file')
}
} else {
fileEdited = prompt('new filename', '')
if (!fileEdited) { return }
fileEdited = isTextFile(fileEdited) ? fileEdited : fileEdited + '.txt'
if (isDupe(fileEdited)) { return }
editor.value = ''
}
console.log('editing file', fileEdited)
setCursorTo(fileEdited)
editor.style.display = crossIcon.style.display = 'block'
table.style.display = 'none'
editor.focus()
window.onbeforeunload = warningMsg
window.padTimer = setInterval(saveText, 5000)
pushSoftState('?editor=' + fileEdited)
}
window.displayPad = padOn
// quit pictures or editor
function resetView () {
softStatePushed = false
table.style.display = 'table'
picsHolder.src = transparentPixel
videoHolder.src = ''
editor.style.display = pics.style.display = video.style.display = crossIcon.style.display = 'none'
scrollToArrow()
}
window.quitAll = () => helpOff() || picsOff() || videosOff() || padOff()
// Mkdir icon
window.mkdirBtn = function () {
const folder = prompt('new folder name', '')
if (folder && !isDupe(folder)) {
mkdirCall(folder, refresh)
}
}
// Icon click handler
const getBtnA = e => e.target.closest('tr').querySelector('a')
window.rm = e => {
if (window.ro) return true
clearTimeout(window.clickToken)
const target = e.key ? getASelected() : getBtnA(e)
if (target.innerText === '../') return
if (rmMsg()) return
moveArrow()
rmCall(decode(target.href), refresh)
}
window.rename = (e, commit) => {
if (window.ro) return true
clearTimeout(window.clickToken)
if (!commit) {
window.clickToken = setTimeout(window.rename, 300, e, true)
return
}
const target = e.key ? getASelected() : getBtnA(e)
if (target.innerText === '../') return
const chg = prompt('rename to', target.innerText)
if (chg && !isDupe(chg)) {
mvCall(prependPath(target.innerText), prependPath(chg), refresh)
}
}
function aboveBelowRightin (el) {
const itemPos = el.getBoundingClientRect()
return itemPos.top < 0 ? -1 : itemPos.bottom > window.innerHeight ? 1 : 0
}
function scrollToArrow () {
const el = getASelected()
while (1) {
const pos = aboveBelowRightin(el)
if (pos === -1) {
scrollBy(0, -300)
} else if (pos === 1) {
scrollBy(0, 300)
} else {
break
}
}
}
function clearArrowSelected () {
const arr = getArrowSelected()
if (!arr) { return }
arr.classList.remove('arrow-selected')
}
window.setCursorTo = setCursorTo
function setCursorTo (where) {
if (!where) return false
clearArrowSelected()
let a = allA.find(el => el.innerText === where || el.innerText === where + '/')
if (!a) {
if (allA[0].innerText === '../') {
a = allA[1] || allA[0]
} else {
a = allA[0]
}
}
const icon = a.parentElement.parentElement.querySelectorAll('.arrow-icon')[0]
icon.classList.add('arrow-selected')
scrollToArrow()
storeArrow(where)
return true
}
function moveArrow (down) {
const all = Array.from(document.querySelectorAll('.arrow-icon'))
let i = all.findIndex(el => el.classList.contains('arrow-selected'))
clearArrowSelected()
if (down) {
i = all[i + 1] ? i + 1 : 0
} else {
i = all[i - 1] ? i - 1 : all.length - 1
}
all[i].classList.add('arrow-selected')
storeArrow(getASelected().innerText)
scrollToArrow()
}
const storeArrow = src => localStorage.setItem('last-selected' + window.extraPath + location.pathname, src)
const isTop = () => window.scrollY === 0
const isBottom = () => (window.innerHeight + window.scrollY) >= document.body.offsetHeight
const hasScroll = () => table.clientHeight > window.innerHeight
function movePage (up) {
const current = getASelected().href
if (!hasScroll()) return
if (!up) {
const i = allA.findIndex(e => aboveBelowRightin(e) === 1)
if (isTop() && current !== allA[i - 1].href) {
return setCursorTo(allA[i - 1].innerText)
} else if (isBottom() && current !== allA[allA.length - 1].href) {
return setCursorTo(allA[allA.length - 1].innerText)
}
if (!allA[i - 1]) return
setCursorTo(allA[i - 1].innerText)
scrollBy(0, window.innerHeight - 100)
} else {
const i = allA.findIndex(e => aboveBelowRightin(e) === 0)
if (isTop() && current !== allA[0].href) {
return setCursorTo(allA[0].innerText)
} else if (isBottom() && current !== allA[i].href) {
return setCursorTo(allA[i].innerText)
}
scrollBy(0, -(window.innerHeight - 100))
setCursorTo(allA[i].innerText)
}
}
// Pictures carousel
const picTypes = ['.jpg', '.jpeg', '.png', '.gif']
const isPic = src => src && picTypes.find(type => src.toLocaleLowerCase().includes(type))
const isPicMode = () => pics.style.display === 'flex'
window.picsNav = () => picsNav(true)
function setImage () {
const src = allImgs[imgsIndex]
picsHolder.src = src
const name = src.split('/').pop()
setCursorTo(decodeURI(name))
history.replaceState({}, '', encodeURI(name))
}
function picsOn (href) {
imgsIndex = allImgs.findIndex(el => el.includes(href))
setImage()
table.style.display = 'none'
crossIcon.style.display = 'block'
pics.style.display = 'flex'
const name = href.split('/').pop()
pushSoftState(name)
return true
}
function picsOff () {
if (!isPicMode()) { return }
resetView()
softPrev()
return true
}
function picsNav (down) {
if (!isPicMode()) { return false }
if (down) {
imgsIndex = allImgs[imgsIndex + 1] ? imgsIndex + 1 : 0
} else {
imgsIndex = allImgs[imgsIndex - 1] ? imgsIndex - 1 : allImgs.length - 1
}
setImage()
return true
}
let picsTouchStart = 0
picsHolder.addEventListener('touchstart', e => {
picsTouchStart = e.changedTouches[0].screenX
}, false)
picsHolder.addEventListener('touchend', e => {
if (e.changedTouches[0].screenX < picsTouchStart) {
picsNav(true)
} else if (e.changedTouches[0].screenX > picsTouchStart) {
picsNav(false)
}
}, false)
// Video player
const videosTypes = ['.mp4', '.webm', '.ogv', '.ogg', '.mp3', '.flac', '.wav']
const isVideo = src => src && videosTypes.find(type => src.toLocaleLowerCase().includes(type))
const isVideoMode = () => video.style.display === 'flex'
const videoFs = () => video.requestFullscreen()
const videoFf = future => { videoHolder.currentTime += future ? 10 : -10 }
const videoSound = up => { videoHolder.volume += up ? 0.1 : -0.1 }
videoHolder.oncanplay = () => videoHolder.play()
async function videoOn (src) {
const name = src.split('/').pop()
table.style.display = 'none'
crossIcon.style.display = 'block'
video.style.display = 'flex'
videoHolder.pause()
const time = localStorage.getItem('video-time' + src)
videoHolder.currentTime = parseInt(time) || 0
videoHolder.src = src
pushSoftState(decodeURI(name))
return true
}
function videosOff () {
if (!isVideoMode()) { return }
localStorage.setItem('video-time' + videoHolder.src, videoHolder.currentTime)
resetView()
softPrev()
return true
}
// help
const isHelpMode = () => help.style.display === 'block'
const helpToggle = () => isHelpMode() ? helpOff() : helpOn()
function helpOn () {
help.style.display = 'block'
table.style.display = 'none'
}
window.helpOff = helpOff
function helpOff () {
if (!isHelpMode()) return
help.style.display = 'none'
table.style.display = 'table'
return true
}
// Paste handler
let cuts = []
function onPaste () {
if (!cuts.length) { return refresh() }
const a = getASelected()
const root = cuts.pop()
const filename = root.split('/').pop()
const pwd = decodeURIComponent(location.pathname)
const dest = isFolder(a) ? pwd + a.innerHTML : pwd
mvCall(root, dest + filename, onPaste)
}
function onCut () {
const a = getASelected()
a.classList.add('linkSelected')
cuts.push(prependPath(decode(a.href)))
}
function dl (a) {
const orig = a.onclick
a.onclick = ''
// download as zip if folder
if (isFolder(a)) {
const loc = a.href
a.href = window.extraPath + '/zip?zipPath=' + encodeURIComponent(prependPath(a.innerText)) + '&zipName=' + encodeURIComponent(a.innerText.slice(0, -1))
a.click()
a.href = loc
} else {
a.download = a.innerText
a.click()
a.download = ''
}
a.onclick = orig
}
// Kb handler
let typedPath = ''
let typedToken = null
function cpPath () {
var t = document.createElement('textarea')
t.value = getASelected().href
document.body.appendChild(t)
t.select()
document.execCommand('copy')
document.body.removeChild(t)
}
document.body.addEventListener('keydown', e => {
if (e.code === 'Escape') {
return resetBackgroundLinks() || window.quitAll()
}
if (isHelpMode()) { return prevent(e) || window.quitAll() }
if (isEditorMode()) { return }
if (isPicMode()) {
switch (e.code) {
case 'ArrowLeft':
case 'ArrowUp':
return prevent(e) || picsNav(false)
case 'Enter':
case 'Tab':
case 'ArrowRight':
case 'ArrowDown':
return prevent(e) || picsNav(true)
}
return
}
if (isVideoMode()) {
switch (e.code) {
case 'ArrowDown':
case 'ArrowUp':
return prevent(e) || videoSound(e.code === 'ArrowUp')
case 'ArrowLeft':
case 'ArrowRight':
return prevent(e) || videoFf(e.code === 'ArrowRight')
case 'KeyF':
return prevent(e) || videoFs()
}
return
}
// Ctrl keys
if ((e.ctrlKey || e.metaKey) && !e.shiftKey) {
switch (e.code) {
case 'KeyC':
return prevent(e) || isRo() || cpPath()
case 'KeyH':
return prevent(e) || isRo() || helpToggle()
case 'KeyX':
return prevent(e) || isRo() || onCut()
case 'KeyR':
return prevent(e) || refresh()
case 'KeyV':
return prevent(e) || isRo() || ensureMove() || onPaste()
case 'Backspace':
return prevent(e) || isRo() || window.rm(e)
case 'KeyE':
return prevent(e) || isRo() || window.rename(e)
case 'KeyM':
return prevent(e) || isRo() || window.mkdirBtn()
case 'KeyU':
return prevent(e) || isRo() || manualUpload.click()
case 'Enter':
case 'ArrowRight':
return prevent(e) || dl(getASelected())
}
}
switch (e.code) {
case 'Tab':
case 'ArrowDown':
return prevent(e) || moveArrow(true)
case 'ArrowUp':
return prevent(e) || moveArrow(false)
case 'Enter':
case 'ArrowRight':
return prevent(e) || window.onClickLink()
case 'ArrowLeft':
return prevent(e) || prevPage(location.href + '../')
case 'PageDown':
case 'PageUp':
return prevent(e) || movePage(e.key === 'PageUp')
case 'Space':
return prevent(e) || movePage(e.shiftKey)
}
// text search
if (e.code.includes('Key') && !e.ctrlKey && !e.metaKey) {
typedPath += e.code.replace('Key', '').toLocaleLowerCase()
clearTimeout(typedToken)
typedToken = setTimeout(() => { typedPath = '' }, 1000)
const a = allA.find(el => el.innerText.toLocaleLowerCase().startsWith(typedPath)) || allA.find(el => el.innerText.toLocaleLowerCase().includes(typedPath))
if (!a) { return }
setCursorTo(a.innerText)
}
}, false)
function setTitle () {
pageH1.innerHTML = '<span>' + pageH1.innerText.split('/').join('/</span><span>') + '</span>'
}
function init () {
allA = Array.from(document.querySelectorAll('a.list-links'))
allImgs = allA.map(el => el.href).filter(isPic)
imgsIndex = softStatePushed = 0
const successRestore = setCursorTo(localStorage.getItem('last-selected' + window.extraPath + location.pathname))
if (!successRestore) {
const entries = table.querySelectorAll('.arrow-icon')
entries.length === 1 ? entries[0].classList.add('arrow-selected') : entries[1].classList.add('arrow-selected')
}
setTitle()
scrollToArrow()
console.log('browsed to ' + location.href)
if (cuts.length) {
const match = allA.filter(a => cuts.find(c => c === decode(a.href)))
match.forEach(m => m.classList.add('linkSelected'))
}
// restore editor if was queried
if (location.search.includes('?editor=')) {
const cleanURL = location.href.replace('?editor=', '')
const matchingA = allA.find(a => a.href === cleanURL)
padOn(matchingA)
}
}
init()
+434
View File
@@ -0,0 +1,434 @@
@media(max-width: 800px) {
html {
font-size: 1em !important;
user-select: none;
}
tr {
line-height: 2em !important;
}
.arrow {
display: none !important;
}
td.display-name {
padding-left: 1em !important;
}
#icHolder {
top: 20px !important;
}
body {
margin-left: 10px !important;
}
.ic {
display: inherit !important;
}
.file-size {
display: none !important;
}
}
/* hello standards 👋🏻 */
::-webkit-scrollbar {
background: #2d3436;
}
::-webkit-scrollbar-thumb {
background: gray;
}
html {
color: #dfe6e9;
background-color: #2d3436;
font-size: 1.5em;
font-family: Helvetica, Arial, sans-serif;
overflow-x: hidden;
scrollbar-color: gray #2d3436;
-webkit-tap-highlight-color: transparent;
}
a {
color: #dfe6e9;
text-decoration: none;
background-color: transparent !important;
outline: 0;
}
a.linkSelected {
border-bottom: .01em solid #dfe6e9;
}
tr {
line-height: 35px;
}
body {
margin-left: 20px;
}
div, i {
background-size: cover !important;
}
.highlight {
background-color: rgba(123, 123, 123, 0.5);
}
.icon {
height: 36px;
width: 36px;
display: block;
cursor: pointer;
}
.arrow-selected {
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEyOSAxMjkiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMjkgMTI5Ij4KICA8Zz4KICAgIDxwYXRoIGQ9Im00MC40LDEyMS4zYy0wLjgsMC44LTEuOCwxLjItMi45LDEuMnMtMi4xLTAuNC0yLjktMS4yYy0xLjYtMS42LTEuNi00LjIgMC01LjhsNTEtNTEtNTEtNTFjLTEuNi0xLjYtMS42LTQuMiAwLTUuOCAxLjYtMS42IDQuMi0xLjYgNS44LDBsNTMuOSw1My45YzEuNiwxLjYgMS42LDQuMiAwLDUuOGwtNTMuOSw1My45eiIvPgogIDwvZz4KPC9zdmc+Cg==");
height: inherit;
}
.arrow {
height: 22px;
width: 22px;
text-align: center;
font-size: 1.15em;
font-weight: bold;
padding-left: .5em;
filter: invert(100%) !important;
padding-bottom: 4px;
}
table {
width: 100%;
}
td.iconRow {
text-align: -moz-center;
text-align: -webkit-center;
height: 25px;
width: 25px;
}
td.file-size {
text-align: right;
padding-left: 1em;
width: 30px;
}
td.display-name {
padding-left: .5em;
text-overflow: ellipsis;
overflow-x: hidden;
white-space: nowrap;
max-width: 100px;
}
h1 {
display: inline-block;
margin-top: 20px;
word-wrap: break-word;
width: 80%;
margin-bottom: 28px;
cursor: pointer;
}
h1 > span:hover {
color: #f1c40f;
}
#icHolder {
display: inline-block;
right: 15px;
background-color: #2d3436;
top: 34px;
position: absolute;
}
.ic {
width: 45px;
height: 45px;
cursor: pointer;
display: inline-block;
overflow: hidden;
color: transparent;
margin-left: 5px;
}
#toast {
top: 7px;
position: absolute;
right: 70px;
font-style: italic;
width: intrinsic;
width: -moz-max-content;
width: -webkit-max-content;
}
#quitAll {
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzEuMTEyIDMxLjExMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzEuMTEyIDMxLjExMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBvbHlnb24gcG9pbnRzPSIzMS4xMTIsMS40MTQgMjkuNjk4LDAgMTUuNTU2LDE0LjE0MiAxLjQxNCwwIDAsMS40MTQgMTQuMTQyLDE1LjU1NiAwLDI5LjY5OCAxLjQxNCwzMS4xMTIgMTUuNTU2LDE2Ljk3IA0KCTI5LjY5OCwzMS4xMTIgMzEuMTEyLDI5LjY5OCAxNi45NywxNS41NTYgIiBzdHlsZT0iZmlsbDogd2hpdGU7Ii8+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg==");
position: fixed;
right: 20px;
top: 20px;
width: 40px;
height: 40px;
cursor: pointer;
z-index: 101;
}
.uploading-table {
padding-bottom: 80px;
}
.bar {
width: 99%;
left: 0.5%;
right: 0.5%;
position: fixed;
bottom: 0px;
max-height: 50%;
overflow-x: hidden;
background-color: #2d3436;
}
.barName {
width: 100%;
}
.barPc {
width: 1%;
height: 35px;
text-align: center;
line-height: 30px;
min-width: 30px;
margin-top: 5px;
color: white;
margin-bottom: 5px;
}
#drop-grid {
align-items: center;
display: none;
justify-content: center;
position: fixed;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
z-index: 999;
border: 5px dashed green;
margin: 0px;
border-radius: 5px;
text-align: center;
font-size: 4em;
font-family: Helvetica;
color: green;
opacity: 1;
background-color: rgba(123, 123, 123, 0.2);
padding: 20px;
}
#drop-grid::after {
content: "Drop here to upload";
}
#text-editor {
font-family: monospace;
background-color: #2d3436;
position: fixed;
left: 0px;
right: 0px;
top: 0px;
bottom: 0px;
z-index: 100;
overflow-y: auto;
word-wrap: anywhere;
padding: 20px;
outline: none;
width: -moz-available;
width: -webkit-fill-available;
height: 100%;
color: white;
font-size: 1em;
border: none;
resize: none;
box-sizing: border-box;
}
#pics {
user-select: none;
-webkit-tap-highlight-color: transparent;
justify-content:center;
align-items:center;
position: fixed;
background-color: #000;
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
overflow: hidden;
z-index: 99;
}
#picsHolder {
user-select: none;
height: 100%;
width: 100%;
cursor: pointer;
object-fit: contain;
image-orientation: from-image;
}
#video {
user-select: none;
-webkit-tap-highlight-color: transparent;
justify-content:center;
align-items:center;
position: fixed;
background-color: #000;
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
overflow: hidden;
z-index: 99;
}
#videoHolder {
height: auto;
max-height: 100%;
width: 100%;
cursor: pointer;
object-fit: contain;
image-orientation: from-image;
}
@keyframes fade {
0% { opacity:0; }
20% { opacity:1; }
80% { opacity:1; }
100% { opacity:0; }
}
.runFade {
animation: fade 3s 1;
}
.notif {
opacity:0;
width: 80px;
height: 80px;
position: fixed;
bottom: 30px;
right: 30px;
}
#helpHead {
margin-top: 60px;
text-align: center;
}
#helpTable {
border-collapse: collapse;
width: 70%;
max-width: 790px;
margin-left: auto;
margin-right: auto;
margin-top: 80px;
margin-bottom: 80px;
overflow-y: auto;
}
#helpTable td {
width: 200px;
padding: 9px;
border: 1px solid #fff;
color: white;
font-size: 18px;
margin: 0;
}
#help {
background-color: black;
position: absolute;
top: 0px;
left: 0px;
right: 0px;
bottom: 0px;
overflow-y: scroll;
z-index: 99;
font-size: 1em !important;
}
.icon-large-folder {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAJFBMVEUAAACZmQAICAj4+Pj//5nMzGb/+/AAAAD/zJkzMwAAAP////+gebovAAAAAXRSTlMAQObYZgAAAAFiS0dECx/XxMAAAAAHdElNRQfiBhgXAy5jJ3EAAAAA1klEQVQoz42RMQ7CMBAEQ0mZIIp0/AGecJFO7kC2FKXmATxikaxUtPS48Ss5XxwnoWI7j3f3fHJV/aFa1KzOuwsRdacFHCjpthjuChbL0U261ipJnDd65IokJhCaGTCzEOZ25SAwaAUgASoOyFFzxWEsEkQGz2BskFJfHMMwWB07AVAXg/QwZscYPzHqXAVicDE4eJ47QOOoHexzhINxQRxIEVkC6I217OGLg9DLIn7qkHHEWiAvEwAdJyQlNKK3gKfcITuxZjzrO+qt2mr/3uj1z1//6AsSG3mwAQQN9wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wNi0yNFQyMzowMzo0Ni0wNDowMFfZ8nYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDYtMjRUMjM6MDM6NDYtMDQ6MDAmhErKAAAAAElFTkSuQmCC");
}
.icon-large-sad-server {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAHlBMVEUAAACAgIDAwMAAAAD///8A/wAAgAD/AACAgAD//wAxEuVaAAAAAXRSTlMAQObYZgAAAAFiS0dEBI9o2VEAAAAHdElNRQfiBhoALCLL7Xg4AAAAy0lEQVQ4y+WSPQ7CMAyFHbUSa38G5iLBHCkXKBUnQOICDMwgBnMDuEJvi00TKM3L0IWFN/rLs/zsEP2BSiCtm1WsxgqoAChtwqAAGgSYXaztC3So0xywPuwx2JyOM1uNwWRN1RtMUnQ/alVTAtgEqPWw6OJ6WHJA358lGx7GMs0swHwWsGCeAikJEAwst8d9bCh8kCVzz3zxQQpDbe53x6qwyDYnm/lQ0oevIaHNPj2dAEdIHM8aBgbDDgZo0dDQokWwEV8DlqE0sjwBakRwyV+dKtoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDYtMjZUMDA6NDQ6MzQtMDQ6MDBDgg+9AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTA2LTI2VDAwOjQ0OjM0LTA0OjAwMt+3AQAAAABJRU5ErkJggg==");
}
.icon-large-ok {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAElBMVEUAAAAAAAAAgACAgID////AwMAbJqpVAAAAAXRSTlMAQObYZgAAAAFiS0dEBI9o2VEAAAAHdElNRQfiBhoANRyRjMyLAAAArElEQVQoz22R0Q3EIAiGNbfAeU4gad+9sMGFLtC4/yyngBaa+tCELz+fFkJ4PimltyljAoCSrvoDfBbRGkC74qyh3AIauQIacaCajo1+ANmARqcHRP2T61LsdIgkWoUFrICCC7Bigo1OUUzQK1GslkaiGIDfsZMoICvokcODXRTjpXpvU0W9/T5WP7GhcDNF9EPN3GH2ooEQvrI51EAIL+y7zbgCg/Cx68eZ/wNuLjeFQzbY1AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wNi0yNlQwMDo1MzoyOC0wNDowMGvaoe4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDYtMjZUMDA6NTM6MjgtMDQ6MDAahxlSAAAAAElFTkSuQmCC");
}
.icon-large-pad {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAGFBMVEUAAAAAAACAgID////AwMAAAL8AAP///wCsLlssAAAAAXRSTlMAQObYZgAAAAFiS0dEAxEMTPIAAAAHdElNRQfiBhoAOCQMIApYAAAAvUlEQVQoz22Ryw7CIBREqYl7xlb3Pj7APpQ1iaZbXcjaxBTXhCi/bx+2XBomd8PJDDcMjCUc43DWab8rpunIIi/TcbYyCkovKdltBpbPGVAtuHjJqz6GDvUOI1d9DiPqpcMt6tsEkXyjwy04NWEkhWooEMD6wUnEGuBOHidEBXACrKsNuuf/A7Wr3AekD2trB1JQe4MzUvqIK4BMeofIV0OFIzBpOYG+qmxoLNJ6DNCSow528I6s//4EXu3xB1FNX4O6vHKSAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTA2LTI2VDAwOjU2OjM2LTA0OjAwEWYRaQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wNi0yNlQwMDo1NjozNi0wNDowMGA7qdUAAAAASUVORK5CYII=");
}
.icon-large-upload {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAXVBMVEUAAAAzzDPM/8z///8z/2YzmQAzZgAzZv8Amf8AAAAzzP+ZzP8AgADM//8z//8AMwAzzGaZmQD4+Pj//5kAZgD/zGYzmTP/zJmAgAAzMwDMZjPMmTP//wBmMwDwyqYv7S31AAAAAXRSTlMAQObYZgAAAAFiS0dEAxEMTPIAAAAHdElNRQfiBhoAOCALTc5BAAAB3klEQVRIx5WUCZKDIBBFAQXEbTTRQbPM/Y85TQMKClm+piplvcdv0YSQINSFfBQAWcHKsqSUc/EBbmnAgedCyje8Xxxxw782LI+zCPORVSWlesPj4qKqETdC3nA8R76uasBr+cJoCmHGdzwadSsxaaPpCiHcPJ6naLQqw3d9J2jEix/AW540msIYZnMMX/et5xnPCNjQC+SrvoUvlh8GzlWW73tcH+YRdk+tIFRqoq6jwPf+Diph5mcjJiEAThkNeQb4MF6uJmej6ShjrJymnR+GjU8YDfLwJk2Wr9DY+LNBi4DHSMHGOcjo418k5Es+TY6vxO94SUU5oUQDXg1QpDlEOBFEu3MOjJKCsfioUNBe0fNqBcfTZaMWdYkKXMUmIF8uAbSo0zx7A+GH9SPDwNqegWD4Oc6yx1dsAuHw61ku2ShsCRoImY4T6fCYlZ0oEMjEl8NG7rd6nVd9bAAjbrCOb1i1PgkkELR7VnpveCV4OLiH1W9dpiGaR5sGH5IQjvPgJKn/Disc9ke755UXzjQ23NTdJRb0NZ5ne16Pp8+HDSEYCPbFvMb0cfuTu3QwcoKOnpf+umFPRpjzSQpkzYe8z/OuPqC+E+5hbhAVXUmsGebx93eLLjzf1L1i/gHK3l4JVuA9nAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wNi0yNlQwMDo1NjozMi0wNDowMOUpNXoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDYtMjZUMDA6NTY6MzItMDQ6MDCUdI3GAAAAAElFTkSuQmCC");
margin-bottom: 3px;
}
.icon-folder {
height: 27px;
width: 27px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEUAAACZmQAICAj4+Pj//5n/+/DMzGYAAAD/zJkzMwD///9AsZvJAAAAAXRSTlMAQObYZgAAAAFiS0dECmjQ9FYAAAAHdElNRQfiBhgXARMJeV+TAAAAuElEQVQoz62QMQ7CQBADLyVlQKLmD/ABpC38AF5AgZSOR7i4kpbf4t3b4xLR4i6+sb1KKb+apf3qe7qY2fU0jIO5BjLdwhjI8dE0Nylx3uiZFS4YjfduAJADLCvCCNrKoAL2JajPyG0IZ9IQGzP1S2iSMdsMZgbshOIVsRsGs7WidzAm1IGaEfgNIugRxIJblXUQ/my1dXgaUaDLZDDm5HgiIvGqQyw7GJVOIO7oPzm1lN17o1f5gz69jIC7vf9PIQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOC0wNi0yNFQyMzowMToxOS0wNDowMO2EXMYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTgtMDYtMjRUMjM6MDE6MTktMDQ6MDCc2eR6AAAAAElFTkSuQmCC") !important;
}
.icon-blank {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNlMGUwZTAiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlZWUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjI2MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjQ5LjE4OSIgeDI9IjI0OS4xODkiIHhsaW5rOmhyZWY9IiNhIiB5MT0iMjM2LjUyNCIgeTI9IjI1NC42NjciLz48bGluZWFyR3JhZGllbnQgaWQ9ImoiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2JkYmRiZCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJrIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEwLjU4MzM0Mzc1IiB4Mj0iMTAuNTgzMzQzNzUiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTQuMDE2ODc1IiB5Mj0iMS40NDkxNTYyNSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNTQiIHgyPSIyNTQiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMjMzLjUiIHkyPSItMTY4LjY2NyIvPjxwYXRoIGQ9Im0zLjk2OSAxNC4wMTZoNy42MXYuNjY0aC03LjYxem0wIDAiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJtMTEuNTc4IDE0LjAxNmgxLjMydi0uNjZoLTEuMzJ6bTAgMCIgZmlsbD0idXJsKCNkKSIvPjxwYXRoIGQ9Im0zLjk2OSAxNC4wMTZoLTEuMzI0di42NjRoMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNlKSIvPjxwYXRoIGQ9Im0zLjk2OSAxNC4wMTZoLTEuMzI0di0uNjZoMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNmKSIvPjxwYXRoIGQ9Im0xMS41NzggMTQuMDE2aDEuMzJ2LjY2NGgtMS4zMnptMCAwIiBmaWxsPSJ1cmwoI2cpIi8+PHBhdGggZD0ibTkuMjcgMS40NWgtNS45NjFhLjY2LjY2IDAgMCAwIC0uNjY0LjY2djExLjI0NWMwIC4zNjguMjk2LjY2LjY2NC42Nmg4LjkzYy4zNjYgMCAuNjYtLjI5Mi42Ni0uNjZ2LTguMjc3em0wIDAiIGZpbGw9InVybCgjaCkiLz48cGF0aCBkPSJtOS4yNjIgNC41MDhoMy4xNGwuNDk2LjQ5NnYuNjZoLTMuNjM2em0wIDAiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtMi42NDUgMTMuMDk4di4yNTdjMCAuMzY4LjI5Ni42Ni42NjQuNjZoOC45M2MuMzY2IDAgLjY2LS4yOTIuNjYtLjY2di0uMjU3YS42Ni42NiAwIDAgMSAtLjY2LjY2NGgtOC45M2EuNjY0LjY2NCAwIDAgMSAtLjY2NC0uNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjIzNSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ1YS42Ni42NiAwIDAgMCAtLjY2NC42NnYuMjVjMC0uMzY4LjI5Ni0uNjY1LjY2NC0uNjY1aDUuOTZsMy42MyAzLjYzdi0uMjQ3bC0zLjYzMS0zLjYyOHptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii43ODQiLz48cGF0aCBkPSJtMTIuODk4IDUuMDc4LTMuNjI4LTMuNjI4djIuOTY1YzAgLjM2Ny4yOTYuNjY0LjY2NC42NjR6bTAgMCIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Im05LjI3IDQuMjU4di4xNTZjMCAuMzY3LjI5Ni42NjQuNjY0LjY2NGgyLjk2NGwtLjE1Ni0uMTU2aC0yLjgwOGEuNjY0LjY2NCAwIDAgMSAtLjY2NC0uNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjIzNSIvPjxwYXRoIGQ9Im05LjI3IDEuNDV2LjI0NWwzLjM4MiAzLjM4M2guMjQ2em0wIDAiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjM5MiIvPjxwYXRoIGQ9Im05LjI3IDEuNDAyYS4wNDcuMDQ3IDAgMCAwIC0uMDQ3LjA0N3YyLjk2NWMwIC4zOTUuMzE2LjcxMS43MS43MTFoMi45NjVjLjAyIDAgLjA0LS4wMTIuMDQzLS4wMzEuMDA4LS4wMTYuMDA0LS4wMzUtLjAwNy0uMDUxbC0zLjYzLTMuNjI5Yy0uMDA3LS4wMDgtLjAyMy0uMDEyLS4wMzQtLjAxMnptLjA0Ni4xNiAzLjQ3IDMuNDdoLTIuODUzYS42MTQuNjE0IDAgMCAxIC0uNjE4LS42MTh6bTAgMCIgZmlsbD0iIzIxMjEyMSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQwMmEuNzA4LjcwOCAwIDAgMCAtLjcxMS43MDd2MTEuMjQ2YzAgLjM5MS4zMTYuNzA3LjcxLjcwN2g4LjkzYy4zOSAwIC43MDctLjMxNi43MDctLjcwN3YtOC4yNzdjMC0uMDE2LS4wMDQtLjAyNy0uMDExLS4wMzVsLTMuNjMtMy42MjljLS4wMDctLjAwOC0uMDE5LS4wMTItLjAzNC0uMDEyem0wIC4wOTRoNS45NDFsMy42MDIgMy42MDJ2OC4yNTdjMCAuMzQtLjI3NC42MTQtLjYxNC42MTRoLTguOTNhLjYxMy42MTMgMCAwIDEgLS42MTctLjYxNHYtMTEuMjQ1YzAtLjM0LjI3NC0uNjEzLjYxOC0uNjEzem0wIDAiIGZpbGw9IiMyMTIxMjEiLz48ZyBmaWxsPSJ1Line truncated
}
.icon-code, .icon-js, .icon-c, .icon-cpp, .icon-go, .icon-css, .icon-html, .icon-rs, .icon-py, .icon-rb {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNlMGUwZTAiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNlZWUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjI2MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjQ5LjE4OSIgeDI9IjI0OS4xODkiIHhsaW5rOmhyZWY9IiNhIiB5MT0iMjM2LjUyNCIgeTI9IjI1NC42NjciLz48bGluZWFyR3JhZGllbnQgaWQ9ImoiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2JkYmRiZCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJrIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEwLjU4MzM0Mzc1IiB4Mj0iMTAuNTgzMzQzNzUiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTQuMDE2ODc1IiB5Mj0iMS40NDkxNTYyNSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDguNjg3OTIiIHgyPSIyNDguNjg3OTIiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMjMzLjQ2OTA4IiB5Mj0iLTE2OC42NzI2NiIvPjxwYXRoIGQ9Im0zLjk2OSAxNC4wMTZoNy42MXYuNjY0aC03LjYxem0wIDAiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJtMTEuNTc4IDE0LjAxNmgxLjMydi0uNjZoLTEuMzJ6bTAgMCIgZmlsbD0idXJsKCNkKSIvPjxwYXRoIGQ9Im0zLjk2OSAxNC4wMTZoLTEuMzI0di42NjRoMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNlKSIvPjxwYXRoIGQ9Im0zLjk2OSAxNC4wMTZoLTEuMzI0di0uNjZoMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNmKSIvPjxwYXRoIGQ9Im0xMS41NzggMTQuMDE2aDEuMzJ2LjY2NGgtMS4zMnptMCAwIiBmaWxsPSJ1cmwoI2cpIi8+PHBhdGggZD0ibTkuMjcgMS40NWgtNS45NjFhLjY2LjY2IDAgMCAwIC0uNjY0LjY2djExLjI0NWMwIC4zNjguMjk2LjY2LjY2NC42Nmg4LjkzYy4zNjYgMCAuNjYtLjI5Mi42Ni0uNjZ2LTguMjc3em0wIDAiIGZpbGw9InVybCgjaCkiLz48cGF0aCBkPSJtOS4yNjIgNC41MDhoMy4xNGwuNDk2LjQ5NnYuNjZoLTMuNjM2em0wIDAiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtMi42NDUgMTMuMDk4di4yNTdjMCAuMzY4LjI5Ni42Ni42NjQuNjZoOC45M2MuMzY2IDAgLjY2LS4yOTIuNjYtLjY2di0uMjU3YS42Ni42NiAwIDAgMSAtLjY2LjY2NGgtOC45M2EuNjY0LjY2NCAwIDAgMSAtLjY2NC0uNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjIzNSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ1YS42Ni42NiAwIDAgMCAtLjY2NC42NnYuMjVjMC0uMzY4LjI5Ni0uNjY1LjY2NC0uNjY1aDUuOTZsMy42MyAzLjYzdi0uMjQ3bC0zLjYzMS0zLjYyOHptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii43ODQiLz48cGF0aCBkPSJtMTIuODk4IDUuMDc4LTMuNjI4LTMuNjI4djIuOTY1YzAgLjM2Ny4yOTYuNjY0LjY2NC42NjR6bTAgMCIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Im05LjI3IDQuMjU4di4xNTZjMCAuMzY3LjI5Ni42NjQuNjY0LjY2NGgyLjk2NGwtLjE1Ni0uMTU2aC0yLjgwOGEuNjY0LjY2NCAwIDAgMSAtLjY2NC0uNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjIzNSIvPjxwYXRoIGQ9Im05LjI3IDEuNDV2LjI0NWwzLjM4MiAzLjM4M2guMjQ2em0wIDAiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjM5MiIvPjxwYXRoIGQ9Im05LjI3IDEuNDAyYS4wNDcuMDQ3IDAgMCAwIC0uMDQ3LjA0N3YyLjk2NWMwIC4zOTUuMzE2LjcxMS43MS43MTFoMi45NjVjLjAyIDAgLjA0LS4wMTIuMDQzLS4wMzEuMDA4LS4wMTYuMDA0LS4wMzUtLjAwNy0uMDUxbC0zLjYzLTMuNjI5Yy0uMDA3LS4wMDgtLjAyMy0uMDEyLS4wMzQtLjAxMnptLjA0Ni4xNiAzLjQ3IDMuNDdoLTIuODUzYS42MTQuNjE0IDAgMCAxIC0uNjE4LS42MTh6bTAgMCIgZmlsbD0iIzIxMjEyMSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQwMmEuNzA4LjcwOCAwIDAgMCAtLjcxMS43MDd2MTEuMjQ2YzAgLjM5MS4zMTYuNzA3LjcxLjcwN2g4LjkzYy4zOSAwIC43MDctLjMxNi43MDctLjcwN3YtOC4yNzdjMC0uMDE2LS4wMDQtLjAyNy0uMDExLS4wMzVsLTMuNjMtMy42MjljLS4wMDctLjAwOC0uMDE5LS4wMTItLjAzNC0uMDEyem0wIC4wOTRoNS45NDFsMy42MDIgMy42MDJ2OC4yNTdjMCAuMzQtLjI3NC42MTQtLjYxNC42MTRoLTguOTNhLjYxMy42MTMgMCAwIDEgLS42MTctLjYxNHYtMTEuMjQ1YzAtLjM0LjI3NC0uNjEzLjYxOC0uNjEzem0wIDAiIGZpbGw9IiMyLine truncated
}
.icon-doc, .icon-docx, .icon-odt {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5ZmE4ZGEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjNWNhZTkiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjE4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDkuMTg5IiB4Mj0iMjQ5LjE4OSIgeGxpbms6aHJlZj0iI2EiIHkxPSIyMzMuNSIgeTI9IjI1NC42NjciLz48ZmlsdGVyIGlkPSJqIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIiB4PSIwJSIgeT0iMCUiPjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VHcmFwaGljIiB2YWx1ZXM9IjAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMCAxIDAgMCAwIDEgMCIvPjwvZmlsdGVyPjxtYXNrIGlkPSJrIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiIGZpbGwtb3BhY2l0eT0iLjk4OCIgZmlsdGVyPSJ1cmwoI2opIi8+PC9tYXNrPjxsaW5lYXJHcmFkaWVudCBpZD0ibCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNWM2YmMwIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNzk4NmNiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9Im0iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTYwIiB4Mj0iOTYwIiB4bGluazpocmVmPSIjbCIgeTE9IjE2OTUuMTE4IiB5Mj0iMTc1LjExOCIvPjxjbGlwUGF0aCBpZD0ibiI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6Ii8+PC9jbGlwUGF0aD48bGluZWFyR3JhZGllbnQgaWQ9Im8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTAuNTgzMzQzNzUiIHgyPSIxMC41ODMzNDM3NSIgeGxpbms6aHJlZj0iI2wiIHkxPSIxNC4wMTY4NzUiIHkyPSIxLjQ0OTE1NjI1Ii8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmg3LjYxdi42NjRoLTcuNjF6bTAgMCIgZmlsbD0idXJsKCNiKSIvPjxwYXRoIGQ9Im0xMS41NzggMTQuMDE2aDEuMzJ2LS42NmgtMS4zMnptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2YpIi8+PHBhdGggZD0ibTExLjU3OCAxNC4wMTZoMS4zMnYuNjY0aC0xLjMyem0wIDAiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJtOS4yNyAxLjQ1aC01Ljk2MWEuNjYuNjYgMCAwIDAgLS42NjQuNjZ2MTEuMjQ1YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtOC4yNzd6bTAgMCIgZmlsbD0idXJsKCNoKSIvPjxwYXRoIGQ9Im05LjI2MiA0LjU5aDMuMTRsLjQ5Ni40OTZ2LjY2aC0zLjYzNnptMCAwIiBmaWxsPSJ1cmwoI2kpIi8+PHBhdGggZD0ibTIuNjQ1IDEzLjA5OHYuMjU3YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtLjI1N2EuNjYuNjYgMCAwIDEgLS42Ni42NjRoLTguOTNhLjY2NC42NjQgMCAwIDEgLS42NjQtLjY2NHptMCAwIiBmaWxsLW9wYWNpdHk9Ii4yMzUiLz48ZyBjbGlwLXBhdGg9InVybCgjbikiIG1hc2s9InVybCgjaykiPjxwYXRoIGQ9Im02MTkuNzgzIDY5NC44OTRjLTEwLjg2NSAwLTE5Ljg0IDguOTc2LTE5Ljg0IDIwLjMxM3YzOS42ODJjMCAxMS4zMzcgOC45NzUgMjAuMzEzIDE5Ljg0IDIwLjMxM2g2NDAuMDk3YzExLjMzNyAwIDIwLjMxMy04Ljk3NiAyMC4zMTMtMjAuMzEzdi0zOS42ODJjMC0xMS4zMzctOC45NzYtMjAuMzEzLTIwLjMxMy0yMC4zMTN6bTAgMTYwLjE0M2MtMTAuODY1IDAtMTkuODQgOC45NzUtMTkuODQgMjAuMzEzdjM5LjY4YzAgMTEuMzM4IDguOTc1IDIwLjMxNCAxOS44NCAyMC4zMTRoNjQwLjA5N2MxMS4zMzcgMCAyMC4zMTMtOC45NzYgMjAuMzEzLTIwLjMxM3YtMzkuNjgxYzAtMTEuMzM4LTguOTc2LTIwLjMxMy0yMC4zMTMtMjAuMzEzem0wIDE2MC4xNDJjLTEwLjg2NSAwLTE5Ljg0IDguOTc1LTE5Ljg0IDE5Ljg0djQwLjE1NGMwIDEwLjg2NSA4Ljk3NSAxOS44NCAxOS44NCAxOS44NGg2NDAuMDk3YzExLjMzNyAwIDIwLjMxMy04Ljk3NSAyMC4zMTMtMTkuODR2LTQwLjE1NGMwLTEwLjg2NS04Ljk3Ni0xOS44NC0yMC4zMTMtMTkuODR6bTAgMTYwLjE0MmMtMTAuODY1IDAtMTkuODQgOC41MDMtMTkuODQgMTkuODR2NDAuMTU0YzAgMTAuODY1IDguOTc1IDE5Ljg0IDE5Ljg0IDE5Ljg0aDY0MC4wOTdjMTEuMzM3IDAgMjAuMzEzLTguOTc1IDIwLjMxMy0xOS44NHYtNDAuMTUzYzAtMTEuMzM4LTguOTc2LTE5Ljg0MS0yLine truncated
}
.icon-epub, .icon-mobi {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI3LjkzNzUiIHgyPSI3LjkzNzUiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3Atb3BhY2l0eT0iLjMxNCIvPjxzdG9wIG9mZnNldD0iLjIyMiIgc3RvcC1vcGFjaXR5PSIuMjc1Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAtLjA3MDMyIDAgMjUuMDczIDMxLjc5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iNDUwLjkwOSIgY3k9IjE4OS41NzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAuMDM5MDcgLjA3MDMyIDAgLTkuMTk3IC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iNDUwLjkwOSIgY3k9IjE4OS41NzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAtLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYiIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC0uMDcwMzIgMCAyNS4wNzMgLTMuNzY0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2IiLz48bGluZWFyR3JhZGllbnQgaWQ9ImciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjAzNzY3IDAgMCAuMTA4NyAtMi45MjcgMTYuODIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjMwNi45MTciIHgyPSIzMDUuOTU1IiB5MT0iLTI1Ljc5MiIgeTI9Ii0xNDEuNDE1Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MGNhZjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiYmRlZmIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNDJhNWY1Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjRiNWY2Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC41NTYxNCAwIDAgMTMuMTQ2MTggLTM1My45NzMgMjAzNC4xOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTY1LjQ4NSIgeDI9IjE2NS40ODUiIHhsaW5rOmhyZWY9IiNoIiB5MT0iLTI1Ljc5MiIgeTI9Ii0xNDEuNDE1Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJqIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ijc2MCIgeDI9Ijc2MCIgeGxpbms6aHJlZj0iI2giIHkxPSIxNjk1LjExNyIgeTI9IjE3NS4xMTciLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aDcuOTM3di42NjRoLTcuOTM2em0wIDAiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtMTEuOTA2IDE0LjAxNmgxLjMyNHYtLjY2aC0xLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTExLjkwNiAxNC4wMTZoMS4zMjR2LjY2NGgtMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNmKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ1aDkuMjYxYy4zNjQgMCAuNjYuMjk2LjY2LjY2djExLjI0NWEuNjYuNjYgMCAwIDEgLS42Ni42NmgtOS4yNmEuNjYuNjYgMCAwIDEgLS42NjQtLjY2di0xMS4yNDVjMC0uMzYzLjI5Ni0uNjYuNjY0LS42NnptMCAwIiBmaWxsPSJ1cmwoI2cpIi8+PHBhdGggZD0ibTQwMC4xMiAxNzUuMjU5Yy00NC40MDYgMC04MC4zMDggMzUuNDMtODAuMzA4IDc5LjgzNXYxMzYwLjAyNmMwIDQ0LjQwNiAzNS45MDIgNzkuODM1IDgwLjMwNyA3OS44MzVoMTE5Ljk4OXYtMTUxOS42OTV6bTAgMCIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlPSIjMjEyMTIxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMTEuMzM5IiB0cmFuc2Zvcm09Im1hdHJpeCguMDA4MjY5MDIgLjAwMDEyNzMgLS4wMDAxMjczIC4wMDgyNjkwMiAwIDApIi8+PHBhdGggZD0ibTMuMzA5IDEzLjk4YS42NjQuNjY0IDAgMCAxIC0uNjY0LS42NjR2LS4wODJjMCAuMzY4LjI5Ni42NjQuNjY0LjY2NGg5LjI2MWMuMzY0IDAgLjY2LS4yOTYuNjYtLjY2NHYuMDgyYS42NjMuNjYzIDAgMCAxIC0uNjYuNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjE5NiIvPjxwYXRoIGQ9Im02NzkuNzc4IDE3NS4yNTl2OTU5LjkwOGM1OS45OTQtMTYwLjE0MiAxMDAuMTQ4LTE2MC4xNDIgMTYwLjE0MiAwdi05NTkuOTA3em0wIDAiIGZpbGw9InVybCgjaikiIHN0cm9rZT0iIzIxMjEyMSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjExLjMzOSIgdHJhbnNmb3JtPSJtYXRyaXgoLjAwODI2OTAyIC4wMDAxMjczIC0uMDAwMTI3MyAuMDA4MjY5MDIgMCAwKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ4NGEuNjY0LjY2NCAwIDAgMCAtLjY2NC42NjR2LjA4MmMwLS4zNjcuMjk2LS42NjQuNjY0LS42NjRoOS4yNjFjLjM2NCAwIC42Ni4yOTcuNjYuNjY0di0uMDgyYS42NjMuNjYzIDAgMCAwIC0uNjYtLjY2NHptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zOTIiLz48cGF0aCBkPSJtMy4zMDkgMS40MDJhLjcwOC43MDggMCAwIDAgLS43MTEuNzA3djExLjI0NmMwIC4zOTEuMzE2LjcwNy43MS43MDdoOS4yNjJjLjM5IDAgLjcwNy0uMzE2LjcwNy0uNzA3di0xMS4yNDVhLjcwNy43MDcgMCAwIDAgLS43MDctLjcwN3ptMCAuMDk0aDkuMjYxYy4zNCAwIC42MTQuMjc0LjYxNC42MTN2MTEuMjQ2YzAgLjM0LS4yNzQuNjE0LS42MTQuNjE0aC05LjI2YS42MTMuNjEzIDAgMCAxIC0uNjE4LS42MTR2LTExLjI0NWMwLS4zNC4yNzQtLjYxMy42MTgtLjYxM3ptMCAwIiBmaWxsPSIjMjEyMTIxIi8+PC9zdmc+")
}
.icon-gif, .icon-png, .icon-jpg, .icon-jpeg, .icon-gif {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNhNWQ2YTciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNjOGU2YzkiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjE4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDkuMTg5IiB4Mj0iMjQ5LjE4OSIgeGxpbms6aHJlZj0iI2EiIHkxPSIyMzMuNSIgeTI9IjI1NC42NjciLz48bGluZWFyR3JhZGllbnQgaWQ9ImoiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzY2YmI2YSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzgxYzc4NCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJrIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEwLjU4MzM0Mzc1IiB4Mj0iMTAuNTgzMzQzNzUiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTQuMDE2ODc1IiB5Mj0iMS40NDkxNTYyNSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI5NDAiIHgyPSI5NDAiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ii8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmg3LjYxdi42NjRoLTcuNjF6bTAgMCIgZmlsbD0idXJsKCNiKSIvPjxwYXRoIGQ9Im0xMS41NzggMTQuMDE2aDEuMzJ2LS42NmgtMS4zMnptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2YpIi8+PHBhdGggZD0ibTExLjU3OCAxNC4wMTZoMS4zMnYuNjY0aC0xLjMyem0wIDAiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJtOS4yNyAxLjQ1aC01Ljk2MWEuNjYuNjYgMCAwIDAgLS42NjQuNjZ2MTEuMjQ1YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtOC4yNzd6bTAgMCIgZmlsbD0idXJsKCNoKSIvPjxwYXRoIGQ9Im05LjI2MiA0LjU5aDMuMTRsLjQ5Ni40OTZ2LjY2aC0zLjYzNnptMCAwIiBmaWxsPSJ1cmwoI2kpIi8+PHBhdGggZD0ibTIuNjQ1IDEzLjA5OHYuMjU3YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtLjI1N2EuNjYuNjYgMCAwIDEgLS42Ni42NjRoLTguOTNhLjY2NC42NjQgMCAwIDEgLS42NjQtLjY2NHptMCAwIiBmaWxsLW9wYWNpdHk9Ii4yMzUiLz48cGF0aCBkPSJtMy4zMDkgMS40NWEuNjYuNjYgMCAwIDAgLS42NjQuNjZ2LjI1YzAtLjM2OC4yOTYtLjY2NS42NjQtLjY2NWg1Ljk2bDMuNjMgMy42M3YtLjI0N2wtMy42MzEtMy42Mjh6bTAgMCIgZmlsbD0iI2Y2ZjZmNiIgZmlsbC1vcGFjaXR5PSIuNTg4Ii8+PHBhdGggZD0ibTEyLjg5OCA1LjA3OC0zLjYyOC0zLjYyOHYyLjk2NWMwIC4zNjcuMjk2LjY2NC42NjQuNjY0em0wIDAiIGZpbGw9InVybCgjaykiLz48cGF0aCBkPSJtOS4yNyA0LjI1OHYuMTU2YzAgLjM2Ny4yOTYuNjY0LjY2NC42NjRoMi45NjRsLS4xNTYtLjE1NmgtMi44MDhhLjY2NC42NjQgMCAwIDEgLS42NjQtLjY2NHptMCAwIiBmaWxsLW9wYWNpdHk9Ii4yMzUiLz48cGF0aCBkPSJtOS4yNyAxLjQ1di4yNDVsMy4zODIgMy4zODNoLjI0NnptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zOTIiLz48cGF0aCBkPSJtOS4yNyAxLjQwMmEuMDQ3LjA0NyAwIDAgMCAtLjA0Ny4wNDd2Mi45NjVjMCAuMzk1LjMxNi43MTEuNzEuNzExaDIuOTY1Yy4wMiAwIC4wNC0uMDEyLjA0My0uMDMxLjAwOC0uMDE2LjAwNC0uMDM1LS4wMDctLjA1MWwtMy42My0zLjYyOWMtLjAwNy0uMDA4LS4wMjMtLjAxMi0uMDM0LS4wMTJ6bS4wNDYuMTYgMy40NyAzLjQ3aC0yLjg1M2EuNjE0LjYxNCAwIDAgMSAtLjYxOC0uNjE4em0wIDAiIGZpbGw9IiMyMTIxMjEiLz48cGF0aCBkPSJtMy4zMDkgMS40MDJhLjcwOC43MDggMCAwIDAgLS43MTEuNzA3djExLjI0NmMwIC4zOTEuMzE2LjcwNy43MS43MDdoOC45M2MuMzkgMCAuNzA3LS4zMTYuNzA3LS43MDd2LTguMjc3YzAtLjAxNi0uMDA0LS4wMjctLjAxMS0uMDM1bC0zLjYzLTMuNjI5Yy0uMDA3LS4wMDgtLjAxOS0uMDEyLS4wMzQtLjAxMnptMCAuMDk0aDUuOTQxbDMuNjAyIDMuNjAydjguMjU3YzAgLjM0LS4yNzQuNjE0LS42MTQuNjE0aC04LjkzYS42MTMuNjEzIDAgMCAxIC0uNjE3LS42MTR2LTExLjI0NWMwLS4zNC4yNzQtLjYxMy42MTgtLjYxM3ptMCAwIiBmaWxsPSIjMjEyMTIxIi8+PHBhdGggLine truncated
}
.icon-mp3, .icon-wav, .icon-flac, .icon-ogg {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmNjODAiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmUwYjIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjI2MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjQ5LjE4OSIgeDI9IjI0OS4xODkiIHhsaW5rOmhyZWY9IiNhIiB5MT0iMjMzLjUiIHkyPSIyNTQuNjY3Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJqIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmE3MjYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmI3NGQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iayIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIxMC41ODMzNDM3NSIgeDI9IjEwLjU4MzM0Mzc1IiB4bGluazpocmVmPSIjaiIgeTE9IjE0LjAxNjg3NSIgeTI9IjEuNDQ5MTU2MjUiLz48bGluZWFyR3JhZGllbnQgaWQ9ImwiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iNTIuOTE1MzAzNDIiIHgyPSI1Mi45MTUzMDM0MiIgeGxpbms6aHJlZj0iI2oiIHkxPSIyMzMuNDk0MzIwNDQiIHkyPSItMTY4LjY2NzI3OTU2Ii8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmg3LjYxdi42NjRoLTcuNjF6bTAgMCIgZmlsbD0idXJsKCNiKSIvPjxwYXRoIGQ9Im0xMS41NzggMTQuMDE2aDEuMzJ2LS42NmgtMS4zMnptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2YpIi8+PHBhdGggZD0ibTExLjU3OCAxNC4wMTZoMS4zMnYuNjY0aC0xLjMyem0wIDAiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJtOS4yNyAxLjQ1aC01Ljk2MWEuNjYuNjYgMCAwIDAgLS42NjQuNjZ2MTEuMjQ1YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtOC4yNzd6bTAgMCIgZmlsbD0idXJsKCNoKSIvPjxwYXRoIGQ9Im0yLjY0NSAxMy4wOTh2LjI1N2MwIC4zNjguMjk2LjY2LjY2NC42Nmg4LjkzYy4zNjYgMCAuNjYtLjI5Mi42Ni0uNjZ2LS4yNTdhLjY2LjY2IDAgMCAxIC0uNjYuNjY0aC04LjkzYS42NjQuNjY0IDAgMCAxIC0uNjY0LS42NjR6bTAgMCIgZmlsbC1vcGFjaXR5PSIuMjM1Ii8+PHBhdGggZD0ibTkuMjYyIDQuNTA4aDMuMTRsLjQ5Ni40OTZ2LjY2aC0zLjYzNnptMCAwIiBmaWxsPSJ1cmwoI2kpIi8+PHBhdGggZD0ibTMuMzA5IDEuNDVhLjY2LjY2IDAgMCAwIC0uNjY0LjY2di4yNWMwLS4zNjguMjk2LS42NjUuNjY0LS42NjVoNS45NmwzLjYzIDMuNjN2LS4yNDdsLTMuNjMxLTMuNjI4em0wIDAiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjM5MiIvPjxwYXRoIGQ9Im0xMi44OTggNS4wNzgtMy42MjgtMy42Mjh2Mi45NjVjMCAuMzY3LjI5Ni42NjQuNjY0LjY2NHptMCAwIiBmaWxsPSJ1cmwoI2spIi8+PHBhdGggZD0ibTkuMjcgNC4yNTh2LjE1NmMwIC4zNjcuMjk2LjY2NC42NjQuNjY0aDIuOTY0bC0uMTU2LS4xNTZoLTIuODA4YS42NjQuNjY0IDAgMCAxIC0uNjY0LS42NjR6bTAgMCIgZmlsbC1vcGFjaXR5PSIuMjM1Ii8+PHBhdGggZD0ibTkuMjcgMS40NXYuMjQ1bDMuMzgyIDMuMzgzaC4yNDZ6bTAgMCIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIuMzkyIi8+PHBhdGggZD0ibTkuMjcgMS40MDJhLjA0Ny4wNDcgMCAwIDAgLS4wNDcuMDQ3djIuOTY1YzAgLjM5NS4zMTYuNzExLjcxLjcxMWgyLjk2NWMuMDIgMCAuMDQtLjAxMi4wNDMtLjAzMS4wMDgtLjAxNi4wMDQtLjAzNS0uMDA3LS4wNTFsLTMuNjMtMy42MjljLS4wMDctLjAwOC0uMDIzLS4wMTItLjAzNC0uMDEyem0uMDQ2LjE2IDMuNDcgMy40N2gtMi44NTNhLjYxNC42MTQgMCAwIDEgLS42MTgtLjYxOHptMCAwIiBmaWxsPSIjMjEyMTIxIi8+PHBhdGggZD0ibTMuMzA5IDEuNDAyYS43MDguNzA4IDAgMCAwIC0uNzExLjcwN3YxMS4yNDZjMCAuMzkxLjMxNi43MDcuNzEuNzA3aDguOTNjLjM5IDAgLjcwNy0uMzE2LjcwNy0uNzA3di04LjI3N2MwLS4wMTYtLjAwNC0uMDI3LS4wMTEtLjAzNWwtMy42My0zLjYyOWMtLjAwNy0uMDA4LS4wMTktLjAxMi0uMDM0LS4wMTJ6bTAgLjA5NGg1Ljk0MWwzLjYwMiAzLjYwMnY4LjI1N2MwIC4zNC0uMjc0LjYxNC0uNjE0LjYxNGgtOC45M2EuNjEzLjYxMyAwIDAgMSAtLjYxNy0uNjE0di0xMS4yNDVjMC0uMzQuMjc0LS42MTMuNjE4LS42MTN6bTAgLine truncated
}
.icon-mp4, .icon-mkv, .icon-m4v, .icon-avi, .icon-ogv, .icon-mov {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNiMzlkZGIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkMWM0ZTkiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjE4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDkuMTg5IiB4Mj0iMjQ5LjE4OSIgeGxpbms6aHJlZj0iI2EiIHkxPSIyMzMuNSIgeTI9IjI1NC42NjciLz48bGluZWFyR3JhZGllbnQgaWQ9ImoiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzdlNTdjMiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzk1NzVjZCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJrIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEwLjU4MzM0Mzc1IiB4Mj0iMTAuNTgzMzQzNzUiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTQuMDE2ODc1IiB5Mj0iMS40NDkxNTYyNSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ibCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDguNzA4IiB4Mj0iMjQ4LjcwOCIgeGxpbms6aHJlZj0iI2oiIHkxPSIyMzMuNSIgeTI9Ii0xNjguNjY3Ii8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmg3LjYxdi42NjRoLTcuNjF6bTAgMCIgZmlsbD0idXJsKCNiKSIvPjxwYXRoIGQ9Im0xMS41NzggMTQuMDE2aDEuMzJ2LS42NmgtMS4zMnptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2YpIi8+PHBhdGggZD0ibTExLjU3OCAxNC4wMTZoMS4zMnYuNjY0aC0xLjMyem0wIDAiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJtOS4yNyAxLjQ1aC01Ljk2MWEuNjYuNjYgMCAwIDAgLS42NjQuNjZ2MTEuMjQ1YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtOC4yNzd6bTAgMCIgZmlsbD0idXJsKCNoKSIvPjxwYXRoIGQ9Im05LjI2MiA0LjU5aDMuMTRsLjQ5Ni40OTZ2LjY2aC0zLjYzNnptMCAwIiBmaWxsPSJ1cmwoI2kpIi8+PHBhdGggZD0ibTIuNjQ1IDEzLjA5OHYuMjU3YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtLjI1N2EuNjYuNjYgMCAwIDEgLS42Ni42NjRoLTguOTNhLjY2NC42NjQgMCAwIDEgLS42NjQtLjY2NHptMCAwIiBmaWxsLW9wYWNpdHk9Ii4yMzUiLz48cGF0aCBkPSJtMy4zMDkgMS40NWEuNjYuNjYgMCAwIDAgLS42NjQuNjZ2LjI1YzAtLjM2OC4yOTYtLjY2NS42NjQtLjY2NWg1Ljk2bDMuNjMgMy42M3YtLjI0N2wtMy42MzEtMy42Mjh6bTAgMCIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIuMzkyIi8+PHBhdGggZD0ibTEyLjg5OCA1LjA3OC0zLjYyOC0zLjYyOHYyLjk2NWMwIC4zNjcuMjk2LjY2NC42NjQuNjY0em0wIDAiIGZpbGw9InVybCgjaykiLz48cGF0aCBkPSJtOS4yNyAxLjQ1di4yNDVsMy4zODIgMy4zODNoLjI0NnptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zOTIiLz48cGF0aCBkPSJtOS4yNyAxLjQwMmEuMDQ3LjA0NyAwIDAgMCAtLjA0Ny4wNDd2Mi45NjVjMCAuMzk1LjMxNi43MTEuNzEuNzExaDIuOTY1Yy4wMiAwIC4wNC0uMDEyLjA0My0uMDMxLjAwOC0uMDE2LjAwNC0uMDM1LS4wMDctLjA1MWwtMy42My0zLjYyOWMtLjAwNy0uMDA4LS4wMjMtLjAxMi0uMDM0LS4wMTJ6bS4wNDYuMTYgMy40NyAzLjQ3aC0yLjg1M2EuNjE0LjYxNCAwIDAgMSAtLjYxOC0uNjE4em0wIDAiIGZpbGw9IiMyMTIxMjEiLz48cGF0aCBkPSJtMy4zMDkgMS40MDJhLjcwOC43MDggMCAwIDAgLS43MTEuNzA3djExLjI0NmMwIC4zOTEuMzE2LjcwNy43MS43MDdoOC45M2MuMzkgMCAuNzA3LS4zMTYuNzA3LS43MDd2LTguMjc3YzAtLjAxNi0uMDA0LS4wMjctLjAxMS0uMDM1bC0zLjYzLTMuNjI5Yy0uMDA3LS4wMDgtLjAxOS0uMDEyLS4wMzQtLjAxMnptMCAuMDk0aDUuOTQxbDMuNjAyIDMuNjAydjguMjU3YzAgLjM0LS4yNzQuNjE0LS42MTQuNjE0aC04LjkzYS42MTMuNjEzIDAgMCAxIC0uNjE3LS42MTR2LTExLjI0NWMwLS4zNC4yNzQtLjYxMy42MTgtLjYxM3ptMCAwIiBmaWxsPSIjMjEyMTIxIi8+PHBhdGggZD0ibTIwMS4xMDYtMzEuMTQzYy01Ljg3NS4xMjUtMTAuNjI0IDQuNzUtMTAuNjI0IDEwLjYyNHYxMjYuOTg5YzAgOCA4LjYyNCAxMy4xMjQgMTUuNjIzIDkuMjVsMTE2LjQ5LTYzLjQ5NWM3LjM3My00IDcuMzczLTE0Line truncated
}
.icon-pdf {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI3LjkzNzUiIHgyPSI3LjkzNzUiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3Atb3BhY2l0eT0iLjMxNCIvPjxzdG9wIG9mZnNldD0iLjIyMiIgc3RvcC1vcGFjaXR5PSIuMjc1Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAtLjA3MDMyIDAgMjUuMDczIDMxLjc5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iNDUwLjkwOSIgY3k9IjE4OS41NzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAuMDM5MDcgLjA3MDMyIDAgLTkuMTk3IC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iNDUwLjkwOSIgY3k9IjE4OS41NzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAtLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYiIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC0uMDcwMzIgMCAyNS4wNzMgLTMuNzY0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2IiLz48bGluZWFyR3JhZGllbnQgaWQ9ImciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjAzNzY3IDAgMCAuMTA4NyAtMi45MjcgMTYuODIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjMwNi45MTciIHgyPSIzMDUuOTU1IiB5MT0iLTI1Ljc5MiIgeTI9Ii0xNDEuNDE1Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNlZjlhOWEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmNkZDIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZWY1MzUwIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZTU3MzczIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC41NTYxNCAwIDAgMTMuMTQ2MTggLTM1My45NzMgMjAzNC4xOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTY1LjQ4NSIgeDI9IjE2NS40ODUiIHhsaW5rOmhyZWY9IiNoIiB5MT0iLTI1Ljc5MiIgeTI9Ii0xNDEuNDE1Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJqIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ijc2MCIgeDI9Ijc2MCIgeGxpbms6aHJlZj0iI2giIHkxPSIxNjk1LjExNyIgeTI9IjE3NS4xMTciLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aDcuOTM3di42NjRoLTcuOTM2em0wIDAiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtMTEuOTA2IDE0LjAxNmgxLjMyNHYtLjY2aC0xLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTExLjkwNiAxNC4wMTZoMS4zMjR2LjY2NGgtMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNmKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ1aDkuMjYxYy4zNjQgMCAuNjYuMjk2LjY2LjY2djExLjI0NWEuNjYuNjYgMCAwIDEgLS42Ni42NmgtOS4yNmEuNjYuNjYgMCAwIDEgLS42NjQtLjY2di0xMS4yNDVjMC0uMzYzLjI5Ni0uNjYuNjY0LS42NnptMCAwIiBmaWxsPSJ1cmwoI2cpIi8+PHBhdGggZD0ibTQwMC4xMiAxNzUuMjU5Yy00NC40MDYgMC04MC4zMDggMzUuNDMtODAuMzA4IDc5LjgzNXYxMzYwLjAyNmMwIDQ0LjQwNiAzNS45MDIgNzkuODM1IDgwLjMwNyA3OS44MzVoMTE5Ljk4OXYtMTUxOS42OTV6bTAgMCIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlPSIjMjEyMTIxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMTEuMzM5IiB0cmFuc2Zvcm09Im1hdHJpeCguMDA4MjY5MDIgLjAwMDEyNzMgLS4wMDAxMjczIC4wMDgyNjkwMiAwIDApIi8+PHBhdGggZD0ibTMuMzA5IDEzLjk4YS42NjQuNjY0IDAgMCAxIC0uNjY0LS42NjR2LS4wODJjMCAuMzY4LjI5Ni42NjQuNjY0LjY2NGg5LjI2MWMuMzY0IDAgLjY2LS4yOTYuNjYtLjY2NHYuMDgyYS42NjMuNjYzIDAgMCAxIC0uNjYuNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjE5NiIvPjxwYXRoIGQ9Im02NzkuNzc4IDE3NS4yNTl2OTU5LjkwOGM1OS45OTQtMTYwLjE0MiAxMDAuMTQ4LTE2MC4xNDIgMTYwLjE0MiAwdi05NTkuOTA3em0wIDAiIGZpbGw9InVybCgjaikiIHN0cm9rZT0iIzIxMjEyMSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjExLjMzOSIgdHJhbnNmb3JtPSJtYXRyaXgoLjAwODI2OTAyIC4wMDAxMjczIC0uMDAwMTI3MyAuMDA4MjY5MDIgMCAwKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ4NGEuNjY0LjY2NCAwIDAgMCAtLjY2NC42NjR2LjA4MmMwLS4zNjcuMjk2LS42NjQuNjY0LS42NjRoOS4yNjFjLjM2NCAwIC42Ni4yOTcuNjYuNjY0di0uMDgyYS42NjMuNjYzIDAgMCAwIC0uNjYtLjY2NHptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zOTIiLz48cGF0aCBkPSJtMy4zMDkgMS40MDJhLjcwOC43MDggMCAwIDAgLS43MTEuNzA3djExLjI0NmMwIC4zOTEuMzE2LjcwNy43MS43MDdoOS4yNjJjLjM5IDAgLjcwNy0uMzE2LjcwNy0uNzA3di0xMS4yNDVhLjcwNy43MDcgMCAwIDAgLS43MDctLjcwN3ptMCAuMDk0aDkuMjYxYy4zNCAwIC42MTQuMjc0LjYxNC42MTN2MTEuMjQ2YzAgLjM0LS4yNzQuNjE0LS42MTQuNjE0aC05LjI2YS42MTMuNjEzIDAgMCAxIC0uNjE4LS42MTR2LTExLjI0NWMwLS4zNC4yNzQtLjYxMy42MTgtLjYxM3ptMCAwIiBmaWxsPSIjMjEyMTIxIi8+PC9zdmc+");
}
.icon-ppt, .icon-pptx {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmFiOTEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmNjYmMiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjE4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDkuMTg5IiB4Mj0iMjQ5LjE4OSIgeGxpbms6aHJlZj0iI2EiIHkxPSIyMzMuNSIgeTI9IjI1NC42NjciLz48bGluZWFyR3JhZGllbnQgaWQ9ImoiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2ZmNzA0MyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmOGE2NSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJrIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEwLjU4MzM0Mzc1IiB4Mj0iMTAuNTgzMzQzNzUiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTQuMDE2ODc1IiB5Mj0iMS40NDkxNTYyNSIvPjxmaWx0ZXIgaWQ9ImwiIGhlaWdodD0iMTAwJSIgd2lkdGg9IjEwMCUiIHg9IjAlIiB5PSIwJSI+PGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUdyYXBoaWMiIHZhbHVlcz0iMCAwIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMSAwIi8+PC9maWx0ZXI+PG1hc2sgaWQ9Im0iPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIgZmlsbC1vcGFjaXR5PSIuOTg4IiBmaWx0ZXI9InVybCgjbCkiLz48L21hc2s+PG1hc2sgaWQ9Im4iPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIgZmlsbC1vcGFjaXR5PSIuOTg4IiBmaWx0ZXI9InVybCgjbCkiLz48L21hc2s+PGxpbmVhckdyYWRpZW50IGlkPSJvIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ijk1OS45ODU2NDkyNiIgeDI9Ijk1OS45ODU2NDkyNiIgeGxpbms6aHJlZj0iI2oiIHkxPSIxNjk1LjA5NDAzNTUyIiB5Mj0iMTc1LjExMzE1NTk2Ii8+PGNsaXBQYXRoIGlkPSJwIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiLz48L2NsaXBQYXRoPjxtYXNrIGlkPSJxIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiIGZpbGwtb3BhY2l0eT0iLjk4OCIgZmlsdGVyPSJ1cmwoI2wpIi8+PC9tYXNrPjxsaW5lYXJHcmFkaWVudCBpZD0iciIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2My40OTY4IiB4Mj0iNjMuNDk2OCIgeGxpbms6aHJlZj0iI2oiIHkxPSIyMzMuNDk0ODkwMDgiIHkyPSItMTY0LjEzMTI3OTU2Ii8+PGNsaXBQYXRoIGlkPSJzIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiLz48L2NsaXBQYXRoPjxjbGlwUGF0aCBpZD0idCI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6Ii8+PC9jbGlwUGF0aD48cGF0aCBkPSJtMy45NjkgMTQuMDE2aDcuNjF2LjY2NGgtNy42MXptMCAwIiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggZD0ibTExLjU3OCAxNC4wMTZoMS4zMnYtLjY2aC0xLjMyem0wIDAiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aC0xLjMyNHYuNjY0aDEuMzI0em0wIDAiIGZpbGw9InVybCgjZSkiLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aC0xLjMyNHYtLjY2aDEuMzI0em0wIDAiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTEuNTc4IDE0LjAxNmgxLjMydi42NjRoLTEuMzJ6bTAgMCIgZmlsbD0idXJsKCNnKSIvPjxwYXRoIGQ9Im05LjI3IDEuNDVoLTUuOTYxYS42Ni42NiAwIDAgMCAtLjY2NC42NnYxMS4yNDVjMCAuMzY4LjI5Ni42Ni42NjQuNjZoOC45M2MuMzY2IDAgLjY2LS4yOTIuNjYtLjY2di04LjI3N3ptMCAwIiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0ibTIuNjQ1IDEzLjA5OHYuMjU3YzAgLjM2OC4yOTYuNjYuNjY0LjY2aDguOTNjLjM2NiAwIC42Ni0uMjkyLjY2LS42NnYtLjI1N2EuNjYuNjYgMCAwIDEgLS42Ni42NjRoLTguOTNhLjY2NC42NjQgMCAwIDEgLS42NjQtLjY2NHptMCAwIiBmaWxsLW9wYWNpdHk9Ii4yMzUiLz48cGF0aCBkPSJtOS4yNjIgNC41OWgzLjE0bC40OTYuNDk2di42NmgtMy42MzZ6bTAgMCIgZmlsbD0idXJsKCNpKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ1YS42Ni42NiAwIDAgMCAtLjY2NC42NnYuMjVjMC0uMzY4LjI5Ni0uNjY1LjY2NC0uNjY1aDUuOTZsMy42MyAzLjYzdi0uMjQ3bC0zLjYzMS0zLjYyOHptMCAwIiBmaWxsPSIjZjZmNmY2IiBmaWxsLW9wYWNpdHk9Ii41ODgiLz48cGF0aCBkPSJtMTIuODk4IDUuMDc4LTMuNjI4LTMuNjI4djIuOTY1YzAgLjM2Ny4yOTYuNjY0LjY2NC42NjR6bTAgMCIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Im05LjI3IDQuMjU4di4xNTZjMCAuMzY3LjI5Ni42NjQuNjY0LjY2NGgyLjk2NGwtLjE1Line truncated
}
.icon-srt {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGxpbmVhckdyYWRpZW50IGlkPSJhIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjcuOTM4MjYiIHgyPSI3LjkzODI2IiB5MT0iMTQuMDE2OTY4NSIgeTI9IjE0LjY3ODQ5MDUwMDAyIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3Atb3BhY2l0eT0iLjI3NDUxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTM3MjYiLz48c3RvcCBvZmZzZXQ9Ii4yMjIyMjIiIHN0b3Atb3BhY2l0eT0iLjI3NDUxIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjQ1MC45MDg5MzYiIGN5PSIxODkuNTc5MzYxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDAwMDAwOSAtLjAzOTA2NjIgLS4wNzAzMTkyIC0uMDAwMDAwMDUgMjUuMDczMDQzIDMxLjc5NzY2NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjY2NTYiIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iNDUwLjkwODkzNiIgY3k9IjE4OS41NzkzNjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLS4wMDAwMDAwOSAuMDM5MDY2MiAuMDcwMzE5MiAuMDAwMDAwMDUgLTkuMTk2NTI0IC0zLjc2Mzc0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NjY1NiIgeGxpbms6aHJlZj0iI2IiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImUiIGN4PSI0NTAuOTA4OTM2IiBjeT0iMTg5LjU3OTM2MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtLjAwMDAwMDA5IC0uMDM5MDY2MiAuMDcwMzE5MiAtLjAwMDAwMDA1IC05LjE5NjUyNCAzMS43OTc2NjYpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY2NjU2IiB4bGluazpocmVmPSIjYiIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDg5MzYiIGN5PSIxODkuNTc5MzYxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDAwMDAwOSAuMDM5MDY2MiAtLjA3MDMxOTIgLjAwMDAwMDA1IDI1LjA3MzA0MiAtMy43NjM3NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjY2NTYiIHhsaW5rOmhyZWY9IiNiIi8+PGxpbmVhckdyYWRpZW50IGlkPSJnIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMzc2NzQ4IDAgMCAuMTA4NzA2IC0yLjkyNzAwNyAxNi44MjA2NzQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjMwNi45MTY2NTYiIHgyPSIzMDUuOTU0NTU5IiB5MT0iLTI1Ljc5MTY3NiIgeTI9Ii0xNDEuNDE0NTgxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4MGNiYzQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMmRmZGIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMjZhNjlhIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNGRiNmFjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC41NTYxNDMgMCAwIDEzLjE0NjE4NCAtMzUzLjk3MjY1NiAyMDM0LjE4MDE3NikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTY1LjQ4NDg0OCIgeDI9IjE2NS40ODQ4NDgiIHhsaW5rOmhyZWY9IiNoIiB5MT0iLTI1Ljc5MTY3MiIgeTI9Ii0xNDEuNDE0NTgxIi8+PGxpbmVhckdyYWRpZW50IGlkPSJqIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY5MDIzMjUwMDMiIHgyPSI4LjI2OTAyMzI1MDAzIiB4bGluazpocmVmPSIjaCIgeTE9IjE0LjAxNjk2NzUiIHkyPSIxLjQ0ODA1MzAwMDAzIi8+PHBhdGggZD0ibTMuOTY4NzUgMTQuMDE1NjI1aDcuOTM3NXYuNjY0MDYzaC03LjkzNzV6bTAgMCIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Im0xMS45MDYyNSAxNC4wMTU2MjVoMS4zMjQyMTl2LS42NjAxNTZoLTEuMzI0MjE5em0wIDAiIGZpbGw9InVybCgjYykiLz48cGF0aCBkPSJtMy45Njg3NSAxNC4wMTU2MjVoLTEuMzI0MjE5di42NjQwNjNoMS4zMjQyMTl6bTAgMCIgZmlsbD0idXJsKCNkKSIvPjxwYXRoIGQ9Im0zLjk2ODc1IDE0LjAxNTYyNWgtMS4zMjQyMTl2LS42NjAxNTZoMS4zMjQyMTl6bTAgMCIgZmlsbD0idXJsKCNlKSIvPjxwYXRoIGQ9Im0xMS45MDYyNSAxNC4wMTU2MjVoMS4zMjQyMTl2LjY2NDA2M2gtMS4zMjQyMTl6bTAgMCIgZmlsbD0idXJsKCNmKSIvPjxwYXRoIGQ9Im0zLjMwODU5NCAxLjQ0OTIxOWg5LjI2MTcxOGMuMzYzMjgyIDAgLjY2MDE1Ny4yOTY4NzUuNjYwMTU3LjY2MDE1NnYxMS4yNDYwOTRjMCAuMzY3MTg3LS4yOTY4NzUuNjYwMTU2LS42NjAxNTcuNjYwMTU2aC05LjI2MTcxOGMtLjM2NzE4OCAwLS42NjQwNjMtLjI5Mjk2OS0uNjY0MDYzLS42NjAxNTZ2LTExLjI0NjA5NGMwLS4zNjMyODEuMjk2ODc1LS42NjAxNTYuNjY0MDYzLS42NjAxNTZ6bTAgMCIgZmlsbD0idXJsKCNnKSIvPjxwYXRoIGQ9Im00MDAuMTE5MjkyIDE3NS4yNTg4NjNjLTQ0LjQwNTIxMSAwLTgwLjMwNzI5NiAzNS40Mjk2OS04MC4zMDcyOTYgNzkuODM0OXYxMzYwLjAyNzY3NmMwIDQ0LjQwNTIxMSAzNS45MDIwODUgNzkuODM0OSA4MC4zMDcyOTYgNzkuODM0OWgxMTkuOTg4NTQ4di0xNTE5LjY5NzQ3NnptMCAwIiBmaWxsPSJ1cmwoI2kpIiBzdHJva2U9IiMyMTIxMjEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxMS4zMzg1ODMiIHRyYW5zZm9ybT0ic2NhbGUoLjAwODI2OTAyKSIvPjxwYXRoIGQ9Im0zLjMwODU5NCAxMy45ODA0NjljLS4zNjcxODggMC0uNjY0MDYzLS4yOTY4NzUtLjY2NDA2My0uNjY0MDYzdi0uMDgyMDMxYzAgLjM2NzE4Ny4yOTY4NzUuNjY0MDYzLjY2NDA2My42NjQwNjNoOS4yNjE3MThjLjM2MzI4MiAwIC42NjAxNTctLjI5Njg3Ni42NjAxNTctLjY2NDA2M3YuMDgyMDMxYzAgLjM2NzE4OC0uMjk2ODc1LjY2NDA2My0uNjYwMTU3LjY2NDA2M3ptMCAwIiBmaWxsLW9wYWNpdHk9Ii4xOTYwNzgiLz48cGF0aCBkPSJtMy4zMDg1OTQgMS40ODQzNzVjLS4zNjcxODggMC0uNjY0MDYzLjI5Njg3NS0uNjY0MDYzLjY2NDA2M3YuMDgyMDMxYzAtLjM2NzE4OC4yOTY4NzUtLjY2NDA2My42NjQwNjMtLjY2NDA2M2g5LjI2MTcxOGMuMzYzMjgyIDAgLjY2MDE1Ny4yOTY4NzUuNjYwMTU3LjY2NDA2M3YtLjA4MjAzMWMwLS4zNjcxODgtLjI5Njg3NS0uNjY0MDYzLS42NjAxNTctLjY2NDA2M3ptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zOTIxNTciLz48cGF0aCBkPSJtMy4zMDg1OTQgMS40MDIzNDRjLS4zOTQ1MzIgMC0uNzEwOTM4LjMxNjQwNi0uNzEwOTM4LjcwNzAzMXYxMS4yNDYwOTRjMCAuMzkwNjI1LjMxNjQwNi43MDcwMzEuNzEwOTM4LjcwNzAzMWg5LjI2MTcxOGMuMzkwNjI2IDAgLjcwNzAzMi0uMzE2NDA2LjcwNzAzMi0uNzA3MDMxdi0xMS4yNDYwOTRjMC0uMzkwNjI1LS4zMTY0MDYtLjcwNzAzMS0uNzA3MDMyLS43MDcwLine truncated
}
.icon-xls, .icon-xlsx, .icon-csv {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjguMjY3NSIgeDI9IjguMjY3NSIgeGxpbms6aHJlZj0iI2EiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iYyI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4zMTQiLz48c3RvcCBvZmZzZXQ9Ii4yMjIiIHN0b3Atb3BhY2l0eT0iLjI3NSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9ImQiIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC0uMDM5MDcgLS4wNzAzMiAwIDI0Ljc0MiAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZSIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAtMy43NjQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYyIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAuMDcwMzIgMCAtOS4xOTcgMzEuNzk4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2MiLz48cmFkaWFsR3JhZGllbnQgaWQ9ImciIGN4PSI0NTAuOTA5IiBjeT0iMTg5LjU3OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwIC4wMzkwNyAtLjA3MDMyIDAgMjQuNzQyIC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNjIi8+PGxpbmVhckdyYWRpZW50IGlkPSJoIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC4wMDgyNjkwMiAuMDAwMTI3MyAtLjAwMDEyNzMgLjAwODI2OTAyIDAgMCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iOTQwIiB4Mj0iOTQwIiB5MT0iMTY5NS4xMTgiIHkyPSIxNzUuMTE4Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4MGNiYzQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiMmRmZGIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMDE0OTUgMCAwIC4wNTQ3IDcuNTIxIC04LjE4KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIyNDkuMTg5IiB4Mj0iMjQ5LjE4OSIgeGxpbms6aHJlZj0iI2EiIHkxPSIyMzMuNSIgeTI9IjI1NC42NjciLz48bGluZWFyR3JhZGllbnQgaWQ9ImoiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzI2YTY5YSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzRkYjZhYyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJrIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjEwLjU4MzM0Mzc1IiB4Mj0iMTAuNTgzMzQzNzUiIHhsaW5rOmhyZWY9IiNqIiB5MT0iMTQuMDE2ODc1IiB5Mj0iMS40NDkxNTYyNSIvPjxmaWx0ZXIgaWQ9ImwiIGhlaWdodD0iMTAwJSIgd2lkdGg9IjEwMCUiIHg9IjAlIiB5PSIwJSI+PGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUdyYXBoaWMiIHZhbHVlcz0iMCAwIDAgMCAxIDAgMCAwIDAgMSAwIDAgMCAwIDEgMCAwIDAgMSAwIi8+PC9maWx0ZXI+PG1hc2sgaWQ9Im0iPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIgZmlsbC1vcGFjaXR5PSIuOTg4IiBmaWx0ZXI9InVybCgjbCkiLz48L21hc2s+PGxpbmVhckdyYWRpZW50IGlkPSJuIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjI0OC43MDgiIHgyPSIyNDguNzA4IiB4bGluazpocmVmPSIjaiIgeTE9IjIzMy41IiB5Mj0iLTE2OC42NjciLz48Y2xpcFBhdGggaWQ9Im8iPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIvPjwvY2xpcFBhdGg+PG1hc2sgaWQ9InAiPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIgZmlsbC1vcGFjaXR5PSIuOTg4IiBmaWx0ZXI9InVybCgjbCkiLz48L21hc2s+PGNsaXBQYXRoIGlkPSJxIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiLz48L2NsaXBQYXRoPjxtYXNrIGlkPSJyIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiIGZpbGwtb3BhY2l0eT0iLjk4OCIgZmlsdGVyPSJ1cmwoI2wpIi8+PC9tYXNrPjxjbGlwUGF0aCBpZD0icyI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6Ii8+PC9jbGlwUGF0aD48bWFzayBpZD0idCI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6IiBmaWxsLW9wYWNpdHk9Ii45ODgiIGZpbHRlcj0idXJsKCNsKSIvPjwvbWFzaz48Y2xpcFBhdGggaWQ9InUiPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIvPjwvY2xpcFBhdGg+PG1hc2sgaWQ9InYiPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIgZmlsbC1vcGFjaXR5PSIuOTg4IiBmaWx0ZXI9InVybCgjbCkiLz48L21hc2s+PGNsaXBQYXRoIGlkPSJ3Ij48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiLz48L2NsaXBQYXRoPjxtYXNrIGlkPSJ4Ij48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiIGZpbGwtb3BhY2l0eT0iLjk4OCIgZmlsdGVyPSJ1cmwoI2wpIi8+PC9tYXNrPjxjbGlwUGF0aCBpZD0ieSI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6Ii8+PC9jbGlwUGF0aD48bWFzayBpZD0ieiI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6IiBmaWxsLW9wYWNpdHk9Ii45ODgiIGZpbHRlcj0idXJsKCNsKSIvPjwvbWFzaz48Y2xpcFBhdGggaWQ9IkEiPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIvPjwvY2xpcFBhdGg+PG1hc2sgaWQ9IkIiPjxwYXRoIGQ9Im0wIDBoMTZ2MTZoLTE2eiIgZmlsbC1vcGFjaXR5PSIuOTg4IiBmaWx0ZXI9InVybCgjbCkiLz48L21hc2s+PGNsaXBQYXRoIGlkPSJDIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiLz48L2NsaXBQYXRoPjxtYXNrIGlkPSJEIj48cGF0aCBkPSJtMCAwaDE2djE2aC0xNnoiIGZpbGwtb3BhY2l0eT0iLjk4OCIgZmlsdGVyPSJ1cmwoI2wpIi8+PC9tYXNrPjxjbGlwUGF0aCBpZD0iRSI+PHBhdGggZD0ibTAgMGgxNnYxNmgtMTZ6Ii8+PC9jbGlwUGF0aD48cGF0aCBkPSJtMy45NjkgMTQuMDE2aDcuNjF2LjY2NGgtNy42MXptMCAwIiBmaWxsPSJ1cmwoI2IpIi8+PHBhdGggZD0ibTExLjU3OCAxNC4wMTZoMS4zMnYtLjY2aC0xLjMyem0wIDAiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aC0xLjMyNHYuNjY0aDEuMzI0em0wIDAiIGZpbGw9InVybCgjZSkiLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aC0xLjMyNHYtLjY2aDEuMzI0em0wIDAiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTEuNTc4IDE0LjAxNmgxLjMydi42NjRoLTEuMzJ6bTAgLine truncated
}
.icon-zip, .icon-tar, .icon-gz, .icon-bz2, .icon-rar, .icon-7z {
background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjE2cHQiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI3LjkzNzUiIHgyPSI3LjkzNzUiIHkxPSIxNC4wMTY4NzUiIHkyPSIxNC42NzgzNDM3NSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLW9wYWNpdHk9Ii4yNzUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3Atb3BhY2l0eT0iLjMxNCIvPjxzdG9wIG9mZnNldD0iLjIyMiIgc3RvcC1vcGFjaXR5PSIuMjc1Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLS4wMzkwNyAtLjA3MDMyIDAgMjUuMDczIDMxLjc5OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJkIiBjeD0iNDUwLjkwOSIgY3k9IjE4OS41NzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAuMDM5MDcgLjA3MDMyIDAgLTkuMTk3IC0zLjc2NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiByPSIyMS4xNjciIHhsaW5rOmhyZWY9IiNiIi8+PHJhZGlhbEdyYWRpZW50IGlkPSJlIiBjeD0iNDUwLjkwOSIgY3k9IjE4OS41NzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCAtLjAzOTA3IC4wNzAzMiAwIC05LjE5NyAzMS43OTgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgcj0iMjEuMTY3IiB4bGluazpocmVmPSIjYiIvPjxyYWRpYWxHcmFkaWVudCBpZD0iZiIgY3g9IjQ1MC45MDkiIGN5PSIxODkuNTc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAgLjAzOTA3IC0uMDcwMzIgMCAyNS4wNzMgLTMuNzY0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHI9IjIxLjE2NyIgeGxpbms6aHJlZj0iI2IiLz48bGluZWFyR3JhZGllbnQgaWQ9ImciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjAzNzY3IDAgMCAuMTA4NyAtMi45MjcgMTYuODIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjMwNi45MTciIHgyPSIzMDUuOTU1IiB5MT0iLTI1Ljc5MiIgeTI9Ii0xNDEuNDE1Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmNjODAiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZmUwYjIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZhNzI2Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZiNzRkIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC41NTYxNCAwIDAgMTMuMTQ2MTggLTM1My45NzMgMjAzNC4xOCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTY1LjQ4NSIgeDI9IjE2NS40ODUiIHhsaW5rOmhyZWY9IiNoIiB5MT0iLTI1Ljc5MiIgeTI9Ii0xNDEuNDE1Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJqIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ijc2MCIgeDI9Ijc2MCIgeGxpbms6aHJlZj0iI2giIHkxPSIxNjk1LjExNyIgeTI9IjE3NS4xMTciLz48cGF0aCBkPSJtMy45NjkgMTQuMDE2aDcuOTM3di42NjRoLTcuOTM2em0wIDAiIGZpbGw9InVybCgjYSkiLz48cGF0aCBkPSJtMTEuOTA2IDE0LjAxNmgxLjMyNHYtLjY2aC0xLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LjY2NGgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTMuOTY5IDE0LjAxNmgtMS4zMjR2LS42NmgxLjMyNHptMCAwIiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0ibTExLjkwNiAxNC4wMTZoMS4zMjR2LjY2NGgtMS4zMjR6bTAgMCIgZmlsbD0idXJsKCNmKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ1aDkuMjYxYy4zNjQgMCAuNjYuMjk2LjY2LjY2djExLjI0NWEuNjYuNjYgMCAwIDEgLS42Ni42NmgtOS4yNmEuNjYuNjYgMCAwIDEgLS42NjQtLjY2di0xMS4yNDVjMC0uMzYzLjI5Ni0uNjYuNjY0LS42NnptMCAwIiBmaWxsPSJ1cmwoI2cpIi8+PHBhdGggZD0ibTQwMC4xMiAxNzUuMjU5Yy00NC40MDYgMC04MC4zMDggMzUuNDMtODAuMzA4IDc5LjgzNXYxMzYwLjAyNmMwIDQ0LjQwNiAzNS45MDIgNzkuODM1IDgwLjMwNyA3OS44MzVoMTE5Ljk4OXYtMTUxOS42OTV6bTAgMCIgZmlsbD0idXJsKCNpKSIgc3Ryb2tlPSIjMjEyMTIxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iMTEuMzM5IiB0cmFuc2Zvcm09Im1hdHJpeCguMDA4MjY5MDIgLjAwMDEyNzMgLS4wMDAxMjczIC4wMDgyNjkwMiAwIDApIi8+PHBhdGggZD0ibTMuMzA5IDEzLjk4YS42NjQuNjY0IDAgMCAxIC0uNjY0LS42NjR2LS4wODJjMCAuMzY4LjI5Ni42NjQuNjY0LjY2NGg5LjI2MWMuMzY0IDAgLjY2LS4yOTYuNjYtLjY2NHYuMDgyYS42NjMuNjYzIDAgMCAxIC0uNjYuNjY0em0wIDAiIGZpbGwtb3BhY2l0eT0iLjE5NiIvPjxwYXRoIGQ9Im02NzkuNzc4IDE3NS4yNTl2OTU5LjkwOGM1OS45OTQtMTYwLjE0MiAxMDAuMTQ4LTE2MC4xNDIgMTYwLjE0MiAwdi05NTkuOTA3em0wIDAiIGZpbGw9InVybCgjaikiIHN0cm9rZT0iIzIxMjEyMSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjExLjMzOSIgdHJhbnNmb3JtPSJtYXRyaXgoLjAwODI2OTAyIC4wMDAxMjczIC0uMDAwMTI3MyAuMDA4MjY5MDIgMCAwKSIvPjxwYXRoIGQ9Im0zLjMwOSAxLjQ4NGEuNjY0LjY2NCAwIDAgMCAtLjY2NC42NjR2LjA4MmMwLS4zNjcuMjk2LS42NjQuNjY0LS42NjRoOS4yNjFjLjM2NCAwIC42Ni4yOTcuNjYuNjY0di0uMDgyYS42NjMuNjYzIDAgMCAwIC0uNjYtLjY2NHptMCAwIiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zOTIiLz48cGF0aCBkPSJtMy4zMDkgMS40MDJhLjcwOC43MDggMCAwIDAgLS43MTEuNzA3djExLjI0NmMwIC4zOTEuMzE2LjcwNy43MS43MDdoOS4yNjJjLjM5IDAgLjcwNy0uMzE2LjcwNy0uNzA3di0xMS4yNDVhLjcwNy43MDcgMCAwIDAgLS43MDctLjcwN3ptMCAuMDk0aDkuMjYxYy4zNCAwIC42MTQuMjc0LjYxNC42MTN2MTEuMjQ2YzAgLjM0LS4yNzQuNjE0LS42MTQuNjE0aC05LjI2YS42MTMuNjEzIDAgMCAxIC0uNjE4LS42MTR2LTExLjI0NWMwLS4zNC4yNzQtLjYxMy42MTgtLjYxM3ptMCAwIiBmaWxsPSIjMjEyMTIxIi8+PC9zdmc+");
}
Vendored
+84
View File
@@ -0,0 +1,84 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="theme-color" content="rgb(45,52,54)">
<meta name="msapplication-navbutton-color" content="rgb(45,52,54)">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width">
<link rel="manifest" href='data:application/manifest+json,{"name":"{{.Title}}","short_name":"{{.Title}}","description":" ","icons":[{"src":"data:image/svg+xml;base64,favicon_will_be_here","sizes":"150x150","type":"image/svg+xml"}],"background":"rgb(45,52,54)","theme_color":"rgb(45,52,54)","display":"standalone"}' />
<title>{{.Title}}</title>
<link href="data:image/svg+xml;base64,favicon_will_be_here" rel="icon" type="image/svg+xml" />
<style type="text/css">css_will_be_here</style>
<script>
window.ro = {{.Ro}}
window.extraPath = {{.ExtraPath}}.slice(0, -1)
window.onload = function () { js_will_be_here }
</script>
</head>
<body>
<div onclick="window.helpOff()" style="display: none;" id="help"><table id="helpTable"><tbody>
<tr><td>Arrows/Enter</td><td>browse files/folders and pictures</td></tr>
<tr><td>Ctrl/Meta + Enter</td><td>download selected item as archive</td></tr>
<tr><td>Ctrl/Meta + C</td><td>copy URL to clipboard</td></tr>
<tr><td>Ctrl/Meta + E</td><td>rename item</td></tr>
<tr><td>Ctrl/Meta + Del</td><td>delete item</td></tr>
<tr><td>Ctrl/Meta + U</td><td>upload new file/folder</td></tr>
<tr><td>Ctrl/Meta + M</td><td>create a new directory</td></tr>
<tr><td>Ctrl/Meta + X</td><td>cut selected path</td></tr>
<tr><td>Ctrl/Meta + V</td><td>paste previously selected paths to directory</td></tr>
<tr><td>Ctrl + click</td><td>download selected item as archive</td></tr>
<tr><td>click file icon </td><td>rename item</td></tr>
<tr><td>double click file icon</td><td>delete item</td></tr>
<tr><td>drag-and-drop item on UI</td><td>move item</td></tr>
<tr><td>drag-and-drop external item</td><td>upload file/folders</td></tr>
<tr><td>any other letter</td><td>fuzzy search</td></tr>
</tbody></table></div>
<div style="display: none;" onclick="window.quitAll()" id="quitAll"><i style="display: none;" id="toast">cant reach server</i></div>
<textarea style="display: none;" id="text-editor"></textarea>
<div id="drop-grid"></div>
<input type="file" id="clickupload" style="display:none"/>
<h1 onclick="return titleClick(event)">.{{.Title}}</h1>
<div id="icHolder">
{{if not .Ro}}
<div style="display:none;" onclick="document.getElementById('clickupload').click()" class="ic icon-large-upload manualUp"></div>
<div onclick="window.displayPad()" class="ic icon-large-pad"></div>
<div class="ic icon-large-folder" onclick="window.mkdirBtn()"></div>
{{end}}
</div>
<div id="pics" style="display:none;"> <img draggable="false" onclick="window.picsNav()" id="picsHolder" /></div>
<div id="video" style="display:none;"> <video controls id="videoHolder"></video></div>
<table id="linkTable">
{{range .RowsFolders}}
<tr>
<td class="iconRow"><i ondblclick="return rm(event)" onclick="return rename(event)" class="btn icon icon-{{.Ext}} icon-blank"></i></td>
<td class="file-size"><code>{{.Size}}</code></td>
<td class="arrow"><div class="arrow-icon"></div></td>
<td class="display-name"><a class="list-links" oncontextmenu="return setCursorTo(event.target.innerText)" onclick="return onClickLink(event)" href="{{.Href}}">{{.Name}}</a></td>
</tr>
{{end}}
{{range .RowsFiles}}
<tr>
<td class="iconRow"><i ondblclick="return rm(event)" onclick="return rename(event)" class="btn icon icon-{{.Ext}} icon-blank"></i></td>
<td class="file-size"><code>{{.Size}}</code></td>
<td class="arrow"><div class="arrow-icon"></div></td>
<td class="display-name"><a class="list-links" oncontextmenu="return setCursorTo(event.target.innerText)" onclick="return onClickLink(event)" href="{{.Href}}">{{.Name}}</a></td>
</tr>
{{end}}
</table>
</body>
<div id="upBar" class="bar">
<span style="display: none;" class="barName" id="upBarName"></span>
<div style="display: none; background-color: green;" class="barPc" id="upBarPc">1%</div>
</div>
<div id="ok" class="notif icon-large-ok"></div>
<div id="sad" class="notif icon-large-sad-server"></div>
</html>