Need to fix bugs
|
@ -18,6 +18,7 @@ RunMode = release
|
||||||
ServerApi = https://api.casaos.zimaboard.com
|
ServerApi = https://api.casaos.zimaboard.com
|
||||||
Handshake =
|
Handshake =
|
||||||
Token =
|
Token =
|
||||||
|
NickName =
|
||||||
|
|
||||||
|
|
||||||
[user]
|
[user]
|
||||||
|
|
8
main.go
|
@ -36,13 +36,15 @@ func init() {
|
||||||
|
|
||||||
go service.UDPService()
|
go service.UDPService()
|
||||||
|
|
||||||
go service.UDPConnect([]string{})
|
|
||||||
service.Summary = make(map[string]model.FileSummaryModel)
|
service.Summary = make(map[string]model.FileSummaryModel)
|
||||||
service.UDPAddressMap = make(map[string]string)
|
service.UDPAddressMap = make(map[string]string)
|
||||||
//go service.SocketConnect()
|
//go service.SocketConnect()
|
||||||
|
|
||||||
route.InitFunction()
|
route.InitFunction()
|
||||||
|
|
||||||
|
go service.SendIPToServer()
|
||||||
|
go service.LoopFriend()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// @title casaOS API
|
// @title casaOS API
|
||||||
|
@ -69,10 +71,12 @@ func main() {
|
||||||
//service.SyncTask(sqliteDB)
|
//service.SyncTask(sqliteDB)
|
||||||
cron2 := cron.New() //创建一个cron实例
|
cron2 := cron.New() //创建一个cron实例
|
||||||
//every day execution
|
//every day execution
|
||||||
err := cron2.AddFunc("0 0/1 * * * *", func() {
|
err := cron2.AddFunc("0 0/5 * * * *", func() {
|
||||||
//service.PushIpInfo(*&config.ServerInfo.Token)
|
//service.PushIpInfo(*&config.ServerInfo.Token)
|
||||||
//service.UpdataDDNSList(mysqldb)
|
//service.UpdataDDNSList(mysqldb)
|
||||||
//service.SyncTask(sqliteDB)
|
//service.SyncTask(sqliteDB)
|
||||||
|
service.SendIPToServer()
|
||||||
|
service.LoopFriend()
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
|
|
@ -6,3 +6,11 @@ type AppAnalyse struct {
|
||||||
UUId string `json:"uuid"`
|
UUId string `json:"uuid"`
|
||||||
Language string `json:"language"`
|
Language string `json:"language"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ConnectionStatus struct {
|
||||||
|
From string `json:"from"`
|
||||||
|
To string `json:"to"`
|
||||||
|
Error string `json:"error"`
|
||||||
|
UUId string `json:"uuid"`
|
||||||
|
Event string `json:"event"`
|
||||||
|
}
|
||||||
|
|
|
@ -43,4 +43,5 @@ type FileSummaryModel struct {
|
||||||
BlockSize int `json:"block_size"`
|
BlockSize int `json:"block_size"`
|
||||||
Length int `json:"length"`
|
Length int `json:"length"`
|
||||||
Size int64 `json:"size"`
|
Size int64 `json:"size"`
|
||||||
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ type UserModel struct {
|
||||||
Description string
|
Description string
|
||||||
Initialized bool
|
Initialized bool
|
||||||
Avatar string
|
Avatar string
|
||||||
|
NickName string
|
||||||
}
|
}
|
||||||
|
|
||||||
//服务配置
|
//服务配置
|
||||||
|
|
51
pkg/quic_helper/config.go
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
package quic_helper
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/rsa"
|
||||||
|
"crypto/tls"
|
||||||
|
"crypto/x509"
|
||||||
|
"encoding/pem"
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
"github.com/lucas-clemente/quic-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Setup a bare-bones TLS config for the server
|
||||||
|
func GetGenerateTLSConfig(token string) *tls.Config {
|
||||||
|
key, err := rsa.GenerateKey(rand.Reader, 1024)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
template := x509.Certificate{SerialNumber: big.NewInt(1)}
|
||||||
|
certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)})
|
||||||
|
certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
|
||||||
|
|
||||||
|
tlsCert, err := tls.X509KeyPair(certPEM, keyPEM)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return &tls.Config{
|
||||||
|
Certificates: []tls.Certificate{tlsCert},
|
||||||
|
NextProtos: []string{token},
|
||||||
|
SessionTicketsDisabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func GetClientTlsConfig(otherToken string) *tls.Config {
|
||||||
|
return &tls.Config{
|
||||||
|
InsecureSkipVerify: true,
|
||||||
|
NextProtos: []string{otherToken},
|
||||||
|
SessionTicketsDisabled: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetQUICConfig() *quic.Config {
|
||||||
|
return &quic.Config{
|
||||||
|
ConnectionIDLength: 4,
|
||||||
|
KeepAlive: true,
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,6 +40,10 @@ const (
|
||||||
|
|
||||||
//shortcuts
|
//shortcuts
|
||||||
SHORTCUTS_URL_ERROR = 70001
|
SHORTCUTS_URL_ERROR = 70001
|
||||||
|
|
||||||
|
//persion
|
||||||
|
PERSION_REMOTE_ERROR = 80001
|
||||||
|
PERSION_DOWN_NOT_EXIST = 80002
|
||||||
)
|
)
|
||||||
|
|
||||||
var MsgFlags = map[int]string{
|
var MsgFlags = map[int]string{
|
||||||
|
@ -81,6 +85,9 @@ var MsgFlags = map[int]string{
|
||||||
FILE_READ_ERROR: "File read error",
|
FILE_READ_ERROR: "File read error",
|
||||||
FILE_DELETE_ERROR: "Delete error",
|
FILE_DELETE_ERROR: "Delete error",
|
||||||
SHORTCUTS_URL_ERROR: "URL error",
|
SHORTCUTS_URL_ERROR: "URL error",
|
||||||
|
|
||||||
|
PERSION_REMOTE_ERROR: "Remote connection error",
|
||||||
|
PERSION_DOWN_NOT_EXIST: "Download record does not exist",
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取错误信息
|
//获取错误信息
|
||||||
|
|
|
@ -248,6 +248,25 @@ func CheckToken2_11() {
|
||||||
config.AppInfo.RootPath = "/casaOS"
|
config.AppInfo.RootPath = "/casaOS"
|
||||||
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
||||||
}
|
}
|
||||||
|
// if len(config.ServerInfo.Handshake) == 0 {
|
||||||
|
// config.Cfg.Section("app").Key("RootPath").SetValue("/casaOS")
|
||||||
|
// config.AppInfo.RootPath = "/casaOS"
|
||||||
|
// config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
||||||
|
// }
|
||||||
|
if len(config.FileSettingInfo.ShareDir) == 0 {
|
||||||
|
config.Cfg.Section("file").Key("ShareDir").SetValue("/DATA")
|
||||||
|
config.FileSettingInfo.ShareDir[0] = "/DATA"
|
||||||
|
|
||||||
|
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(config.FileSettingInfo.DownloadDir) == 0 {
|
||||||
|
config.Cfg.Section("file").Key("DownloadDir").SetValue("/DATA/share")
|
||||||
|
config.FileSettingInfo.DownloadDir = "/DATA/share"
|
||||||
|
file.IsNotExistMkDir(config.FileSettingInfo.DownloadDir)
|
||||||
|
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
||||||
|
}
|
||||||
|
|
||||||
// str := []string{}
|
// str := []string{}
|
||||||
// str = append(str, "ddd")
|
// str = append(str, "ddd")
|
||||||
// str = append(str, "aaa")
|
// str = append(str, "aaa")
|
||||||
|
|
|
@ -39,7 +39,7 @@ func InitRouter() *gin.Engine {
|
||||||
//set user
|
//set user
|
||||||
r.POST("/v1/user/setusernamepwd", v1.Set_Name_Pwd)
|
r.POST("/v1/user/setusernamepwd", v1.Set_Name_Pwd)
|
||||||
//get user info
|
//get user info
|
||||||
r.GET("/v1/user/info", v1.UserInfo)
|
r.GET("/v1/user/info", v1.GetUserInfo)
|
||||||
|
|
||||||
v1Group := r.Group("/v1")
|
v1Group := r.Group("/v1")
|
||||||
|
|
||||||
|
@ -50,13 +50,13 @@ func InitRouter() *gin.Engine {
|
||||||
{
|
{
|
||||||
|
|
||||||
//chang head
|
//chang head
|
||||||
v1UserGroup.POST("/changhead", v1.Up_Load_Head)
|
v1UserGroup.POST("/head", v1.PostUserHead)
|
||||||
//chang user name
|
//chang user name
|
||||||
v1UserGroup.PUT("/changusername", v1.Chang_User_Name)
|
v1UserGroup.PUT("/changusername", v1.PutUserName)
|
||||||
//chang pwd
|
//chang pwd
|
||||||
v1UserGroup.PUT("/changuserpwd", v1.Chang_User_Pwd)
|
v1UserGroup.PUT("/changuserpwd", v1.PutUserPwd)
|
||||||
//edit user info
|
//edit user info
|
||||||
v1UserGroup.POST("/changuserinfo", v1.Chang_User_Info)
|
v1UserGroup.POST("/info", v1.PostUserChangeInfo)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,13 +291,14 @@ func InitRouter() *gin.Engine {
|
||||||
v1PersonGroup.Use()
|
v1PersonGroup.Use()
|
||||||
{
|
{
|
||||||
v1PersonGroup.GET("/test", v1.PersonTest)
|
v1PersonGroup.GET("/test", v1.PersonTest)
|
||||||
v1PersonGroup.GET("/users", v1.GetPersionFriend) //用户列表
|
v1PersonGroup.GET("/users", v1.GetPersionFriend)
|
||||||
v1PersonGroup.POST("/user", v1.PostAddPersionFriend) //添加用户
|
v1PersonGroup.POST("/user", v1.PostAddPersionFriend)
|
||||||
v1PersonGroup.GET("/directory", v1.GetPersionDirectory) //文件列表
|
v1PersonGroup.GET("/directory", v1.GetPersionDirectory)
|
||||||
v1PersonGroup.GET("/file", v1.GetPersionFile) //下载文件
|
v1PersonGroup.GET("/file", v1.GetPersionFile)
|
||||||
v1PersonGroup.PUT("/edit/:token", v1.PutPersionNick) //修改好友
|
v1PersonGroup.GET("/refile/:uuid", v1.GetPersionReFile)
|
||||||
v1PersonGroup.GET("/list", v1.GetPersionDownloadList) //下载列表(需要考虑试试下载速度)
|
v1PersonGroup.PUT("/nick/:token", v1.PutPersionNick)
|
||||||
v1PersonGroup.DELETE("/file/id", v1.DeletePersionDownloadFile)
|
v1PersonGroup.GET("/list", v1.GetPersionDownloadList)
|
||||||
|
v1PersonGroup.DELETE("/file/:uuid", v1.DeletePersionDownloadFile)
|
||||||
// v1PersonGroup.PUT("/state/:id", v1.PutPersionCancelDownload) //修改下载状态(开始暂停删除)
|
// v1PersonGroup.PUT("/state/:id", v1.PutPersionCancelDownload) //修改下载状态(开始暂停删除)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,10 @@ package v1
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/IceWhaleTech/CasaOS/model"
|
"github.com/IceWhaleTech/CasaOS/model"
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
||||||
|
@ -21,13 +24,13 @@ func PersonTest(c *gin.Context) {
|
||||||
//service.MyService.Person().GetPersionInfo("fb2333a1-72b2-4cb4-9e31-61ccaffa55b9")
|
//service.MyService.Person().GetPersionInfo("fb2333a1-72b2-4cb4-9e31-61ccaffa55b9")
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
msg := model.MessageModel{}
|
||||||
msg.Type = "hello"
|
msg.Type = types.PERSONHELLO
|
||||||
msg.Data = ""
|
msg.Data = ""
|
||||||
msg.From = config.ServerInfo.Token
|
msg.From = config.ServerInfo.Token
|
||||||
msg.To = token
|
msg.To = token
|
||||||
msg.UUId = uuid.NewV4().String()
|
msg.UUId = uuid.NewV4().String()
|
||||||
|
|
||||||
dd, err := service.Dial("", msg)
|
dd, err := service.Dial(msg, true)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
@ -35,14 +38,56 @@ func PersonTest(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary add friend
|
// @Summary retry download file
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept application/json
|
// @Accept application/json
|
||||||
// @Tags persion
|
// @Tags persion
|
||||||
// @Param token formData int true "Opponent token"
|
// @Param uui path string true "download uuid"
|
||||||
|
// @Param path query string true "file path"
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /persion/file/{id} [delete]
|
// @Router /persion/refile/{uuid} [get]
|
||||||
|
func GetPersionReFile(c *gin.Context) {
|
||||||
|
|
||||||
|
path := c.Query("path")
|
||||||
|
uuid := c.Param("uuid")
|
||||||
|
|
||||||
|
if len(path) == 0 && len(uuid) == 0 {
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
task := service.MyService.Download().GetDownloadById(uuid)
|
||||||
|
if reflect.DeepEqual(task, model2.PersionDownloadDBModel{}) {
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
token := task.From
|
||||||
|
if _, ok := service.UDPAddressMap[token]; !ok {
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
m := model.MessageModel{}
|
||||||
|
m.Data = path
|
||||||
|
m.From = config.ServerInfo.Token
|
||||||
|
m.To = token
|
||||||
|
m.Type = types.PERSONDOWNLOAD
|
||||||
|
m.UUId = uuid
|
||||||
|
go service.Dial(m, false)
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Summary download file
|
||||||
|
// @Produce application/json
|
||||||
|
// @Accept application/json
|
||||||
|
// @Tags persion
|
||||||
|
// @Param token query string true "opponent token"
|
||||||
|
// @Param path query string true "file path"
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @Success 200 {string} string "ok"
|
||||||
|
// @Router /persion/file [get]
|
||||||
func GetPersionFile(c *gin.Context) {
|
func GetPersionFile(c *gin.Context) {
|
||||||
|
|
||||||
path := c.Query("path")
|
path := c.Query("path")
|
||||||
|
@ -51,15 +96,18 @@ func GetPersionFile(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//任务标识
|
if _, ok := service.UDPAddressMap[token]; !ok {
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// task id
|
||||||
uuid := uuid.NewV4().String()
|
uuid := uuid.NewV4().String()
|
||||||
|
|
||||||
//2.添加数据库
|
|
||||||
|
|
||||||
task := model2.PersionDownloadDBModel{}
|
task := model2.PersionDownloadDBModel{}
|
||||||
task.UUID = uuid
|
task.UUID = uuid
|
||||||
task.Name = ""
|
task.Name = ""
|
||||||
task.Length = 0
|
task.Length = 0
|
||||||
|
task.From = token
|
||||||
task.Size = 0
|
task.Size = 0
|
||||||
task.State = types.DOWNLOADAWAIT
|
task.State = types.DOWNLOADAWAIT
|
||||||
task.Type = 0
|
task.Type = 0
|
||||||
|
@ -69,12 +117,9 @@ func GetPersionFile(c *gin.Context) {
|
||||||
m.Data = path
|
m.Data = path
|
||||||
m.From = config.ServerInfo.Token
|
m.From = config.ServerInfo.Token
|
||||||
m.To = token
|
m.To = token
|
||||||
m.Type = "file_data"
|
m.Type = types.PERSONDOWNLOAD
|
||||||
m.UUId = uuid
|
m.UUId = uuid
|
||||||
_, err := service.Dial("192.168.2.224:9902", m)
|
go service.Dial(m, false)
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
||||||
}
|
}
|
||||||
|
@ -83,13 +128,13 @@ func GetPersionFile(c *gin.Context) {
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept application/json
|
// @Accept application/json
|
||||||
// @Tags persion
|
// @Tags persion
|
||||||
// @Param token formData int true "Opponent token"
|
// @Param uuid path string true "download uuid"
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /persion/file/{id} [delete]
|
// @Router /persion/file/{uuid} [delete]
|
||||||
func DeletePersionDownloadFile(c *gin.Context) {
|
func DeletePersionDownloadFile(c *gin.Context) {
|
||||||
|
|
||||||
id := c.Param("id")
|
id := c.Param("uuid")
|
||||||
if len(id) == 0 {
|
if len(id) == 0 {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
||||||
return
|
return
|
||||||
|
@ -104,25 +149,35 @@ func DeletePersionDownloadFile(c *gin.Context) {
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept application/json
|
// @Accept application/json
|
||||||
// @Tags persion
|
// @Tags persion
|
||||||
// @Param state query int true "wait:1,loading:1,pause:2,finish:3,error:4" Enums(0,1,2,4)
|
// @Param state query int true "wait:1,downloading:1,pause:2,finish:3,error:4" Enums(0,1,2,4)
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /persion/list [get]
|
// @Router /persion/list [get]
|
||||||
func GetPersionDownloadList(c *gin.Context) {
|
func GetPersionDownloadList(c *gin.Context) {
|
||||||
state := c.DefaultQuery("state", "")
|
state := c.DefaultQuery("state", "")
|
||||||
list := service.MyService.Download().GetDownloadListByState(state)
|
list := service.MyService.Download().GetDownloadListByState(state)
|
||||||
|
//if it is downloading, it need to add 'already'
|
||||||
|
if state == strconv.Itoa(types.DOWNLOADING) {
|
||||||
|
for i := 0; i < len(list); i++ {
|
||||||
|
tempDir := config.AppInfo.RootPath + "/temp" + "/" + list[i].UUID
|
||||||
|
files, err := ioutil.ReadDir(tempDir)
|
||||||
|
if err == nil {
|
||||||
|
list[i].Already = len(files)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary add friend
|
// @Summary edit friend's nick
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept application/json
|
// @Accept application/json
|
||||||
// @Tags persion
|
// @Tags persion
|
||||||
// @Param token formData int true "Opponent token"
|
// @Param token path string true "token"
|
||||||
|
// @Param nick formData string true "nick name"
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /persion/edit/{token} [put]
|
// @Router /persion/nick/{token} [put]
|
||||||
func PutPersionNick(c *gin.Context) {
|
func PutPersionNick(c *gin.Context) {
|
||||||
token := c.Param("token")
|
token := c.Param("token")
|
||||||
nick := c.PostForm("nick")
|
nick := c.PostForm("nick")
|
||||||
|
@ -137,16 +192,20 @@ func PutPersionNick(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary get friends list
|
// @Summary get friend list
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept application/json
|
// @Accept application/json
|
||||||
// @Tags persion
|
// @Tags persion
|
||||||
// @Param token formData int true "Opponent token"
|
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /persion/users [get]
|
// @Router /persion/users [get]
|
||||||
func GetPersionFriend(c *gin.Context) {
|
func GetPersionFriend(c *gin.Context) {
|
||||||
list := service.MyService.Friend().GetFriendList()
|
list := service.MyService.Friend().GetFriendList()
|
||||||
|
for i := 0; i < len(list); i++ {
|
||||||
|
if v, ok := service.UDPAddressMap[list[i].Token]; ok && len(v) > 0 {
|
||||||
|
list[i].OnLine = true
|
||||||
|
}
|
||||||
|
}
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,15 +225,13 @@ func PostAddPersionFriend(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
msg := model.MessageModel{}
|
||||||
msg.Type = "connection"
|
msg.Type = types.PERSONCONNECTION
|
||||||
msg.Data = token
|
msg.Data = token
|
||||||
msg.From = config.ServerInfo.Token
|
msg.From = config.ServerInfo.Token
|
||||||
msg.To = token
|
msg.To = token
|
||||||
msg.UUId = uuid.NewV4().String()
|
msg.UUId = uuid.NewV4().String()
|
||||||
|
|
||||||
_, err := service.Dial("", msg)
|
go service.Dial(msg, true)
|
||||||
|
|
||||||
fmt.Println(err)
|
|
||||||
|
|
||||||
friend := model2.FriendModel{}
|
friend := model2.FriendModel{}
|
||||||
friend.Token = token
|
friend.Token = token
|
||||||
|
@ -186,7 +243,8 @@ func PostAddPersionFriend(c *gin.Context) {
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept application/json
|
// @Accept application/json
|
||||||
// @Tags persion
|
// @Tags persion
|
||||||
// @Param token query int true "Opponent token"
|
// @Param token query string true "Opponent token"
|
||||||
|
// @Param path query string true "dir path"
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /persion/directory [get]
|
// @Router /persion/directory [get]
|
||||||
|
@ -197,23 +255,30 @@ func GetPersionDirectory(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//任务标识
|
if _, ok := service.UDPAddressMap[token]; !ok {
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PERSION_REMOTE_ERROR, Message: oasis_err2.GetMsg(oasis_err2.PERSION_REMOTE_ERROR)})
|
||||||
|
return
|
||||||
|
}
|
||||||
uuid := uuid.NewV4().String()
|
uuid := uuid.NewV4().String()
|
||||||
m := model.MessageModel{}
|
m := model.MessageModel{}
|
||||||
m.Data = path
|
m.Data = path
|
||||||
m.From = config.ServerInfo.Token
|
m.From = config.ServerInfo.Token
|
||||||
m.To = token
|
m.To = token
|
||||||
m.Type = "directory"
|
m.Type = types.PERSONDIRECTORY
|
||||||
m.UUId = uuid
|
m.UUId = uuid
|
||||||
result, err := service.Dial(service.UDPAddressMap[token], m)
|
result, err := service.Dial(m, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR), Data: err.Error()})
|
||||||
|
return
|
||||||
}
|
}
|
||||||
dataModel := []model.Path{}
|
dataModel := []model.Path{}
|
||||||
if m.UUId == m.UUId {
|
if uuid == m.UUId {
|
||||||
dataModelByte, _ := json.Marshal(result.Data)
|
dataModelByte, _ := json.Marshal(result.Data)
|
||||||
err := json.Unmarshal(dataModelByte, &dataModel)
|
err := json.Unmarshal(dataModelByte, &dataModel)
|
||||||
fmt.Println(err)
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR), Data: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: dataModel})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: dataModel})
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ func Set_Name_Pwd(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//开始设置
|
//开始设置
|
||||||
err := user_service.SetUser(username, pwd, "", "", "")
|
err := user_service.SetUser(username, pwd, "", "", "", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: fmt.Sprintf("%v", err)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: fmt.Sprintf("%v", err)})
|
||||||
return
|
return
|
||||||
|
@ -102,7 +102,7 @@ func Login(c *gin.Context) {
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /user/changhead [post]
|
// @Router /user/changhead [post]
|
||||||
func Up_Load_Head(c *gin.Context) {
|
func PostUserHead(c *gin.Context) {
|
||||||
file, _, _ := c.Request.FormFile("file")
|
file, _, _ := c.Request.FormFile("file")
|
||||||
user_service.UpLoadFile(file, config.UserInfo.Head)
|
user_service.UpLoadFile(file, config.UserInfo.Head)
|
||||||
c.JSON(http.StatusOK,
|
c.JSON(http.StatusOK,
|
||||||
|
@ -122,7 +122,7 @@ func Up_Load_Head(c *gin.Context) {
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /user/changusername [put]
|
// @Router /user/changusername [put]
|
||||||
func Chang_User_Name(c *gin.Context) {
|
func PutUserName(c *gin.Context) {
|
||||||
if config.ServerInfo.LockAccount {
|
if config.ServerInfo.LockAccount {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ACCOUNT_LOCK, Message: oasis_err2.GetMsg(oasis_err2.ACCOUNT_LOCK)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ACCOUNT_LOCK, Message: oasis_err2.GetMsg(oasis_err2.ACCOUNT_LOCK)})
|
||||||
return
|
return
|
||||||
|
@ -133,7 +133,7 @@ func Chang_User_Name(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.ERROR, Message: oasis_err2.GetMsg(oasis_err2.ERROR)})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user_service.SetUser(username, "", "", "", "")
|
user_service.SetUser(username, "", "", "", "", "")
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ func Chang_User_Name(c *gin.Context) {
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /user/changuserpwd [put]
|
// @Router /user/changuserpwd [put]
|
||||||
func Chang_User_Pwd(c *gin.Context) {
|
func PutUserPwd(c *gin.Context) {
|
||||||
oldpwd := c.PostForm("oldpwd")
|
oldpwd := c.PostForm("oldpwd")
|
||||||
pwd := c.PostForm("pwd")
|
pwd := c.PostForm("pwd")
|
||||||
if config.UserInfo.PWD != oldpwd {
|
if config.UserInfo.PWD != oldpwd {
|
||||||
|
@ -161,53 +161,57 @@ func Chang_User_Pwd(c *gin.Context) {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_IS_EMPTY, Message: oasis_err2.GetMsg(oasis_err2.PWD_IS_EMPTY)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_IS_EMPTY, Message: oasis_err2.GetMsg(oasis_err2.PWD_IS_EMPTY)})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user_service.SetUser("", pwd, "", "", "")
|
user_service.SetUser("", pwd, "", "", "", "")
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS)})
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary 修改用户信息
|
// @Summary edit user info
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept multipart/form-data
|
// @Accept multipart/form-data
|
||||||
// @Tags user
|
// @Tags user
|
||||||
// @Param username formData string false "User Name"
|
// @Param user_name formData string false "User Name"
|
||||||
// @Param email formData string false "Email"
|
// @Param email formData string false "Email"
|
||||||
// @Param description formData string false "Description"
|
// @Param description formData string false "Description"
|
||||||
// @Param pwd formData string false "Password"
|
// @Param pwd formData string false "Password"
|
||||||
// @Param oldpwd formData string false "Old password"
|
// @Param old_pwd formData string false "Old password"
|
||||||
|
// @Param nick_name formData string false "nick name"
|
||||||
// @Security ApiKeyAuth
|
// @Security ApiKeyAuth
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /user/changuserinfo [post]
|
// @Router /user/info [post]
|
||||||
func Chang_User_Info(c *gin.Context) {
|
func PostUserChangeInfo(c *gin.Context) {
|
||||||
username := c.PostForm("username")
|
username := c.PostForm("user_name")
|
||||||
email := c.PostForm("email")
|
email := c.PostForm("email")
|
||||||
description := c.PostForm("description")
|
description := c.PostForm("description")
|
||||||
oldpwd := c.PostForm("oldpwd")
|
nickName := c.PostForm("nick_name")
|
||||||
|
oldpwd := c.PostForm("old_pwd")
|
||||||
pwd := c.PostForm("pwd")
|
pwd := c.PostForm("pwd")
|
||||||
if len(pwd) > 0 && config.UserInfo.PWD != oldpwd {
|
if len(pwd) > 0 && config.UserInfo.PWD != oldpwd {
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_INVALID, Message: oasis_err2.GetMsg(oasis_err2.PWD_INVALID)})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.PWD_INVALID, Message: oasis_err2.GetMsg(oasis_err2.PWD_INVALID)})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user_service.SetUser(username, pwd, "", email, description)
|
user_service.SetUser(username, pwd, "", email, description, nickName)
|
||||||
data := make(map[string]string, 2)
|
data := make(map[string]string, 2)
|
||||||
|
|
||||||
data["token"] = jwt2.GetToken(username, pwd)
|
data["token"] = jwt2.GetToken(username, pwd)
|
||||||
data["user_name"] = username
|
data["user_name"] = username
|
||||||
data["head"] = config.UserInfo.Head
|
data["head"] = config.UserInfo.Head
|
||||||
|
data["nick_name"] = config.UserInfo.NickName
|
||||||
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: data})
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: data})
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Summary 获取用户详情
|
// @Summary get user info
|
||||||
// @Produce application/json
|
// @Produce application/json
|
||||||
// @Accept mapplication/json
|
// @Accept mapplication/json
|
||||||
// @Tags user
|
// @Tags user
|
||||||
// @Success 200 {string} string "ok"
|
// @Success 200 {string} string "ok"
|
||||||
// @Router /user/info [get]
|
// @Router /user/info [get]
|
||||||
func UserInfo(c *gin.Context) {
|
func GetUserInfo(c *gin.Context) {
|
||||||
var u = make(map[string]string, 2)
|
var u = make(map[string]string, 2)
|
||||||
u["user_name"] = config.UserInfo.UserName
|
u["user_name"] = config.UserInfo.UserName
|
||||||
u["head"] = config.UserInfo.Head
|
u["head"] = config.UserInfo.Head
|
||||||
u["email"] = config.UserInfo.Email
|
u["email"] = config.UserInfo.Email
|
||||||
u["description"] = config.UserInfo.Description
|
u["description"] = config.UserInfo.Description
|
||||||
|
u["nick_name"] = config.UserInfo.NickName
|
||||||
c.JSON(http.StatusOK,
|
c.JSON(http.StatusOK,
|
||||||
model.Result{
|
model.Result{
|
||||||
Success: oasis_err2.SUCCESS,
|
Success: oasis_err2.SUCCESS,
|
||||||
|
|
|
@ -21,6 +21,7 @@ type CasaService interface {
|
||||||
ShareAppFile(body []byte) string
|
ShareAppFile(body []byte) string
|
||||||
PushHeart(id, t string, language string)
|
PushHeart(id, t string, language string)
|
||||||
PushAppAnalyse(uuid, t string, name, language string)
|
PushAppAnalyse(uuid, t string, name, language string)
|
||||||
|
PushConnectionStatus(uuid, err string, from, to, event string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type casaService struct {
|
type casaService struct {
|
||||||
|
@ -162,6 +163,26 @@ func (o *casaService) PushAppAnalyse(uuid, t string, name, language string) {
|
||||||
info := model.ServerAppList{}
|
info := model.ServerAppList{}
|
||||||
json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info)
|
json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info)
|
||||||
|
|
||||||
|
}
|
||||||
|
func (o *casaService) PushConnectionStatus(uuid, err string, from, to, event string) {
|
||||||
|
|
||||||
|
m := model.ConnectionStatus{}
|
||||||
|
m.UUId = uuid
|
||||||
|
m.Error = err
|
||||||
|
m.From = from
|
||||||
|
m.To = to
|
||||||
|
m.Event = event
|
||||||
|
b, _ := json.Marshal(m)
|
||||||
|
|
||||||
|
head := make(map[string]string)
|
||||||
|
|
||||||
|
head["Authorization"] = GetToken()
|
||||||
|
|
||||||
|
infoS := httper2.Post(config.ServerInfo.ServerApi+"/v1/analyse/app", b, "application/json", head)
|
||||||
|
|
||||||
|
info := model.ServerAppList{}
|
||||||
|
json2.Unmarshal([]byte(gjson.Get(infoS, "data").String()), &info)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCasaService() CasaService {
|
func NewCasaService() CasaService {
|
||||||
|
|
|
@ -12,6 +12,7 @@ type DownloadService interface {
|
||||||
DelDownload(uuid string)
|
DelDownload(uuid string)
|
||||||
GetDownloadById(uuid string) model2.PersionDownloadDBModel
|
GetDownloadById(uuid string) model2.PersionDownloadDBModel
|
||||||
GetDownloadListByState(state string) []model2.PersionDownloadDBModel
|
GetDownloadListByState(state string) []model2.PersionDownloadDBModel
|
||||||
|
SetDownloadError(m model2.PersionDownloadDBModel)
|
||||||
}
|
}
|
||||||
type downloadService struct {
|
type downloadService struct {
|
||||||
db *gorm.DB
|
db *gorm.DB
|
||||||
|
@ -24,6 +25,11 @@ func (d *downloadService) EditDownloadState(m model2.PersionDownloadDBModel) {
|
||||||
d.db.Model(&m).Where("uuid = ?", m.UUID).Update("state", m.State)
|
d.db.Model(&m).Where("uuid = ?", m.UUID).Update("state", m.State)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//failed during download
|
||||||
|
func (d *downloadService) SetDownloadError(m model2.PersionDownloadDBModel) {
|
||||||
|
d.db.Model(&m).Updates(m)
|
||||||
|
}
|
||||||
|
|
||||||
func (d *downloadService) DelDownload(uuid string) {
|
func (d *downloadService) DelDownload(uuid string) {
|
||||||
var m model2.PersionDownloadDBModel
|
var m model2.PersionDownloadDBModel
|
||||||
d.db.Where("uuid = ?", uuid).Delete(&m)
|
d.db.Where("uuid = ?", uuid).Delete(&m)
|
||||||
|
|
|
@ -9,6 +9,9 @@ type PersionDownloadDBModel struct {
|
||||||
BlockSize int `json:"block_size"`
|
BlockSize int `json:"block_size"`
|
||||||
Length int `json:"length"` //slice length
|
Length int `json:"length"` //slice length
|
||||||
Hash string `json:"hash"`
|
Hash string `json:"hash"`
|
||||||
|
Error string `json:"error"`
|
||||||
|
From string `json:"from"`
|
||||||
|
Already int `json:"already" gorm:"-"`
|
||||||
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"`
|
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"`
|
||||||
UpdatedAt int64 `gorm:"autoCreateTime;autoUpdateTime" json:"updated_at"`
|
UpdatedAt int64 `gorm:"autoCreateTime;autoUpdateTime" json:"updated_at"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ type FriendModel struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Token string `gorm:"column:token;primary_key" json:"token"`
|
Token string `gorm:"column:token;primary_key" json:"token"`
|
||||||
Profile string `json:"profile"`
|
Profile string `json:"profile"`
|
||||||
|
OnLine bool `json:"on_line" gorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *FriendModel) TableName() string {
|
func (p *FriendModel) TableName() string {
|
||||||
|
|
|
@ -3,26 +3,18 @@ package service
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"crypto/cipher"
|
|
||||||
"crypto/rand"
|
|
||||||
"crypto/rsa"
|
|
||||||
"crypto/tls"
|
|
||||||
"crypto/x509"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"encoding/pem"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"math/big"
|
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/IceWhaleTech/CasaOS/model"
|
"github.com/IceWhaleTech/CasaOS/model"
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
||||||
|
"github.com/IceWhaleTech/CasaOS/pkg/quic_helper"
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
||||||
httper2 "github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
|
httper2 "github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
|
||||||
model2 "github.com/IceWhaleTech/CasaOS/service/model"
|
model2 "github.com/IceWhaleTech/CasaOS/service/model"
|
||||||
|
@ -33,13 +25,6 @@ import (
|
||||||
|
|
||||||
type PersonService interface {
|
type PersonService interface {
|
||||||
GetPersionInfo(token string) (m model.PersionModel, err error)
|
GetPersionInfo(token string) (m model.PersionModel, err error)
|
||||||
Handshake(m model.ConnectState)
|
|
||||||
Download(m model.MessageModel)
|
|
||||||
GetFileDetail(uuid, path, to string)
|
|
||||||
SendFileData(m model.MessageModel, blockSize int, length int)
|
|
||||||
ReplyGetFileDetail(m model.MessageModel)
|
|
||||||
ReceiveFileData(m model.MessageModel)
|
|
||||||
ReceiveGetFileDetail(m model.MessageModel)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type personService struct {
|
type personService struct {
|
||||||
|
@ -68,311 +53,6 @@ func (p *personService) GetPersionInfo(token string) (m model.PersionModel, err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//尝试连接
|
|
||||||
func (p *personService) Handshake(m model.ConnectState) {
|
|
||||||
//1先进行udp打通成功
|
|
||||||
|
|
||||||
srcAddr := &net.UDPAddr{
|
|
||||||
IP: net.IPv4zero, Port: 9904} //注意端口必须固定
|
|
||||||
dstAddr := &net.UDPAddr{
|
|
||||||
IP: net.ParseIP(config.ServerInfo.Handshake), Port: 9527}
|
|
||||||
//DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。net必须是"udp"、"udp4"、"udp6";如果laddr不是nil,将使用它作为本地地址,否则自动选择一个本地地址。
|
|
||||||
//(conn)UDPConn代表一个UDP网络连接,实现了Conn和PacketConn接口
|
|
||||||
conn, err := net.DialUDP("udp", srcAddr, dstAddr)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
b, _ := json.Marshal(m)
|
|
||||||
if _, err = conn.Write(b); err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
data := make([]byte, 1024)
|
|
||||||
//ReadFromUDP从c读取一个UDP数据包,将有效负载拷贝到b,返回拷贝字节数和数据包来源地址。
|
|
||||||
//ReadFromUDP方***在超过一个固定的时间点之后超时,并返回一个错误。
|
|
||||||
n, _, err := conn.ReadFromUDP(data)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("error during read: %s", err)
|
|
||||||
}
|
|
||||||
toPersion := model.PersionModel{}
|
|
||||||
err = json.Unmarshal(data[:n], &toPersion)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
//websocket 连接
|
|
||||||
// bidirectionHole(srcAddr, &anotherPeer)
|
|
||||||
|
|
||||||
//2udp打洞成功向服务器汇报打洞结果
|
|
||||||
//3转udp打洞
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
var ipAddress chan string
|
|
||||||
|
|
||||||
type sysConn struct {
|
|
||||||
conn *net.UDPConn
|
|
||||||
header string
|
|
||||||
auth cipher.AEAD
|
|
||||||
}
|
|
||||||
|
|
||||||
func UDPConnect(ips []string) {
|
|
||||||
|
|
||||||
//m := model.ConnectState{}
|
|
||||||
|
|
||||||
//MyService.Person().Handshake(m)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup a bare-bones TLS config for the server
|
|
||||||
func generateTLSConfig() *tls.Config {
|
|
||||||
key, err := rsa.GenerateKey(rand.Reader, 1024)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
template := x509.Certificate{SerialNumber: big.NewInt(1)}
|
|
||||||
certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)})
|
|
||||||
certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
|
|
||||||
|
|
||||||
tlsCert, err := tls.X509KeyPair(certPEM, keyPEM)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return &tls.Config{
|
|
||||||
Certificates: []tls.Certificate{tlsCert},
|
|
||||||
NextProtos: []string{"bench"},
|
|
||||||
SessionTicketsDisabled: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//首次获取文件信息
|
|
||||||
func (p *personService) GetFileList(uuid, path, to string) {
|
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Type = "file_list"
|
|
||||||
msg.Data = path
|
|
||||||
msg.To = to
|
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
msg.UUId = uuid
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
fmt.Println(b)
|
|
||||||
// if ip, ok := PersonUDPMap[msg.To]; ok {
|
|
||||||
// _, err := UDPconn.WriteToUDP(b, ip)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("写入错误", err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//接收
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//首次获取文件信息
|
|
||||||
func (p *personService) GetFileDetail(uuid, path, to string) {
|
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Type = "file_detail"
|
|
||||||
msg.Data = path
|
|
||||||
msg.To = to
|
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
msg.UUId = uuid
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
fmt.Println(b)
|
|
||||||
// if ip, ok := PersonUDPMap[msg.To]; ok {
|
|
||||||
// _, err := UDPconn.WriteToUDP(b, ip)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("写入错误", err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//创建临时文件夹
|
|
||||||
file.MkDir("/oasis/download/" + uuid)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *personService) Download(m model.MessageModel) {
|
|
||||||
fDetail, err := os.Stat("/Users/liangjianli/Documents/images")
|
|
||||||
//发送需要发送的数据摘要
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("未获取到文件信息")
|
|
||||||
}
|
|
||||||
summary := model.FileSummaryModel{}
|
|
||||||
summary.Hash = file.GetHashByPath(fDetail.Name())
|
|
||||||
summary.BlockSize, summary.Length = file.GetBlockInfo(fDetail.Size())
|
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Type = "download-reply"
|
|
||||||
msg.Data = summary
|
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
msg.UUId = ""
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
|
|
||||||
fmt.Println(b)
|
|
||||||
|
|
||||||
// if ip, ok := PersonUDPMap[m.From]; ok {
|
|
||||||
// _, err := UDPconn.WriteToUDP(b, ip)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("写入错误", err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
//receive file data
|
|
||||||
func (p *personService) ReceiveFileData(m model.MessageModel) {
|
|
||||||
//task := p.GetDownloadById(m.UUId)
|
|
||||||
task := model2.PersionDownloadDBModel{}
|
|
||||||
|
|
||||||
//需要重置参数
|
|
||||||
tempPath := "/oasis/download/" + task.UUID
|
|
||||||
tempFilePath := tempPath + "/" + task.Name
|
|
||||||
fmt.Println(tempFilePath)
|
|
||||||
filePath := "/oasis/download/" + task.Name
|
|
||||||
|
|
||||||
bss, _ := json.Marshal(m.Data)
|
|
||||||
tran := model.TranFileModel{}
|
|
||||||
err := json.Unmarshal(bss, &tran)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
// if file.ComparisonHash(tran.Hash) {
|
|
||||||
// f, err := os.Create(tempFilePath + strconv.Itoa(tran.Index))
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("创建文件错误", err)
|
|
||||||
// }
|
|
||||||
// defer f.Close()
|
|
||||||
// // _, err = f.Write(tran.Data)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("写入错误", err, tran.Index)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
var k int
|
|
||||||
err = filepath.Walk(tempPath, func(filename string, fi os.FileInfo, err error) error { //遍历目录
|
|
||||||
if fi.IsDir() { // 忽略目录
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
k++
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("获取文件错误", err)
|
|
||||||
}
|
|
||||||
if task.Length == k {
|
|
||||||
//err := file.SpliceFiles(tempPath, filePath)
|
|
||||||
if err == nil {
|
|
||||||
if h := file.GetHashByPath(filePath); h == task.Hash {
|
|
||||||
//最终文件比对成功
|
|
||||||
task.State = types.DOWNLOADFINISH
|
|
||||||
//p.EditDownloadState(task)
|
|
||||||
//remove temp path
|
|
||||||
file.RMDir(tempPath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//1:say hi
|
|
||||||
//2:发送文件名称
|
|
||||||
//3:发送数据
|
|
||||||
|
|
||||||
//========================================接收端============================================================================================
|
|
||||||
|
|
||||||
// reply file detail
|
|
||||||
func (p *personService) ReplyGetFileDetail(m model.MessageModel) {
|
|
||||||
path := m.Data.(string)
|
|
||||||
f, err := os.Stat(path)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
summary := model.FileSummaryModel{}
|
|
||||||
summary.Name = f.Name()
|
|
||||||
summary.Size = f.Size()
|
|
||||||
summary.Hash = file.GetHashByPath(path)
|
|
||||||
summary.BlockSize, summary.Length = file.GetBlockInfo(f.Size())
|
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Type = "file_detail_reply"
|
|
||||||
msg.Data = summary
|
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
msg.To = m.From
|
|
||||||
msg.UUId = m.UUId
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
// if ip, ok := PersonUDPMap[m.To]; ok {
|
|
||||||
// _, err := UDPconn.WriteToUDP(b, ip)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("写入错误", err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
fmt.Println(b)
|
|
||||||
//开始发送数据
|
|
||||||
p.SendFileData(m, summary.BlockSize, summary.Length)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *personService) SendFileData(m model.MessageModel, blockSize int, length int) {
|
|
||||||
path := m.Data.(string)
|
|
||||||
|
|
||||||
f, err := os.Open(path)
|
|
||||||
if err != nil {
|
|
||||||
//读取时移动了文件,需要保存数据到数据库
|
|
||||||
fmt.Println("读取失败", err)
|
|
||||||
}
|
|
||||||
buf := make([]byte, blockSize)
|
|
||||||
for i := 0; i < length; i++ {
|
|
||||||
tran := model.TranFileModel{}
|
|
||||||
_, err := f.Read(buf)
|
|
||||||
if err == io.EOF {
|
|
||||||
fmt.Println("读取完毕", err)
|
|
||||||
}
|
|
||||||
tran.Hash = file.GetHashByContent(buf)
|
|
||||||
tran.Index = i + 1
|
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Type = "file_data_reply"
|
|
||||||
msg.Data = tran
|
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
msg.To = m.From
|
|
||||||
msg.UUId = m.UUId
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
// if ip, ok := PersonUDPMap[m.To]; ok {
|
|
||||||
// _, err := UDPconn.WriteToUDP(b, ip)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println("写入错误", err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
fmt.Println(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 文件摘要返回
|
|
||||||
func (p *personService) ReceiveGetFileDetail(m model.MessageModel) {
|
|
||||||
|
|
||||||
// task := p.GetDownloadById("")
|
|
||||||
// bss, _ := json.Marshal(m.Data)
|
|
||||||
// summary := model.FileSummaryModel{}
|
|
||||||
// err := json.Unmarshal(bss, &summary)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println(err)
|
|
||||||
// }
|
|
||||||
// task.Hash = summary.Hash
|
|
||||||
// task.Length = summary.Length
|
|
||||||
// task.Size = summary.Size
|
|
||||||
|
|
||||||
// p.SaveDownloadState(task)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AsyncUDPConnect(dst *net.UDPAddr) {
|
|
||||||
for {
|
|
||||||
time.Sleep(2 * time.Second)
|
|
||||||
if _, err := UDPConn.WriteToUDP([]byte(dst.IP.String()+" is ok"), dst); err != nil {
|
|
||||||
log.Println("send msg fail", err)
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
fmt.Println(dst.IP)
|
|
||||||
fmt.Println(dst.IP.To4())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func NewPersonService(db *gorm.DB) PersonService {
|
func NewPersonService(db *gorm.DB) PersonService {
|
||||||
return &personService{db: db}
|
return &personService{db: db}
|
||||||
}
|
}
|
||||||
|
@ -383,18 +63,15 @@ var StreamList map[string]quic.Stream
|
||||||
var ServiceMessage chan model.MessageModel
|
var ServiceMessage chan model.MessageModel
|
||||||
|
|
||||||
func UDPService() {
|
func UDPService() {
|
||||||
quicConfig := &quic.Config{
|
|
||||||
ConnectionIDLength: 4,
|
|
||||||
KeepAlive: true,
|
|
||||||
}
|
|
||||||
srcAddr := &net.UDPAddr{
|
srcAddr := &net.UDPAddr{
|
||||||
IP: net.IPv4zero, Port: 9904} //注意端口必须固定
|
IP: net.IPv4zero, Port: 9904}
|
||||||
var err error
|
var err error
|
||||||
UDPConn, err = net.ListenUDP("udp", srcAddr)
|
UDPConn, err = net.ListenUDP("udp", srcAddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
listener, err := quic.Listen(UDPConn, generateTLSConfig(), quicConfig)
|
listener, err := quic.Listen(UDPConn, quic_helper.GetGenerateTLSConfig(config.ServerInfo.Token), quic_helper.GetQUICConfig())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
@ -467,8 +144,7 @@ func UDPService() {
|
||||||
func ProcessingContent(stream quic.Stream) {
|
func ProcessingContent(stream quic.Stream) {
|
||||||
for {
|
for {
|
||||||
prefixByte := make([]byte, 6)
|
prefixByte := make([]byte, 6)
|
||||||
c1, err := io.ReadFull(stream, prefixByte)
|
_, err := io.ReadFull(stream, prefixByte)
|
||||||
fmt.Println(c1)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -477,21 +153,19 @@ func ProcessingContent(stream quic.Stream) {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
messageByte := make([]byte, prefixLength)
|
messageByte := make([]byte, prefixLength)
|
||||||
t, err := io.ReadFull(stream, messageByte)
|
_, err = io.ReadFull(stream, messageByte)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println(t, err)
|
|
||||||
m := model.MessageModel{}
|
m := model.MessageModel{}
|
||||||
err = json.Unmarshal(messageByte, &m)
|
err = json.Unmarshal(messageByte, &m)
|
||||||
fmt.Println(m)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
if m.Type == "hello" {
|
if m.Type == types.PERSONHELLO {
|
||||||
//什么也不做
|
//nothing
|
||||||
continue
|
continue
|
||||||
} else if m.Type == "directory" {
|
} else if m.Type == types.PERSONDIRECTORY {
|
||||||
var list []model.Path
|
var list []model.Path
|
||||||
if m.Data.(string) == "" || m.Data.(string) == "/" {
|
if m.Data.(string) == "" || m.Data.(string) == "/" {
|
||||||
for _, v := range config.FileSettingInfo.ShareDir {
|
for _, v := range config.FileSettingInfo.ShareDir {
|
||||||
|
@ -506,7 +180,7 @@ func ProcessingContent(stream quic.Stream) {
|
||||||
m.From = config.ServerInfo.Token
|
m.From = config.ServerInfo.Token
|
||||||
SendData(stream, m)
|
SendData(stream, m)
|
||||||
break
|
break
|
||||||
} else if m.Type == "file_data" {
|
} else if m.Type == types.PERSONDOWNLOAD {
|
||||||
|
|
||||||
SendFileData(stream, m.Data.(string), m.From, m.UUId)
|
SendFileData(stream, m.Data.(string), m.From, m.UUId)
|
||||||
break
|
break
|
||||||
|
@ -522,7 +196,7 @@ func ProcessingContent(stream quic.Stream) {
|
||||||
mi := model2.FriendModel{}
|
mi := model2.FriendModel{}
|
||||||
mi.Avatar = config.UserInfo.Avatar
|
mi.Avatar = config.UserInfo.Avatar
|
||||||
mi.Profile = config.UserInfo.Description
|
mi.Profile = config.UserInfo.Description
|
||||||
mi.Name = config.UserInfo.UserName
|
mi.Name = config.UserInfo.NickName
|
||||||
m.To = m.From
|
m.To = m.From
|
||||||
m.Data = mi
|
m.Data = mi
|
||||||
m.Type = types.PERSONADDFRIEND
|
m.Type = types.PERSONADDFRIEND
|
||||||
|
@ -530,13 +204,16 @@ func ProcessingContent(stream quic.Stream) {
|
||||||
|
|
||||||
SendData(stream, m)
|
SendData(stream, m)
|
||||||
break
|
break
|
||||||
} else if m.Type == "connection" {
|
} else if m.Type == types.PERSONCONNECTION {
|
||||||
UDPAddressMap[m.From] = m.Data.(string)
|
if len(m.Data.(string)) > 0 {
|
||||||
fmt.Println("persion", m)
|
UDPAddressMap[m.From] = m.Data.(string)
|
||||||
|
} else {
|
||||||
|
delete(UDPAddressMap, m.From)
|
||||||
|
}
|
||||||
mi := model2.FriendModel{}
|
mi := model2.FriendModel{}
|
||||||
mi.Avatar = config.UserInfo.Avatar
|
mi.Avatar = config.UserInfo.Avatar
|
||||||
mi.Profile = config.UserInfo.Description
|
mi.Profile = config.UserInfo.Description
|
||||||
mi.Name = config.UserInfo.UserName
|
mi.Name = config.UserInfo.NickName
|
||||||
mi.Token = config.ServerInfo.Token
|
mi.Token = config.ServerInfo.Token
|
||||||
msg := model.MessageModel{}
|
msg := model.MessageModel{}
|
||||||
msg.Type = types.PERSONADDFRIEND
|
msg.Type = types.PERSONADDFRIEND
|
||||||
|
@ -544,7 +221,7 @@ func ProcessingContent(stream quic.Stream) {
|
||||||
msg.To = m.From
|
msg.To = m.From
|
||||||
msg.From = config.ServerInfo.Token
|
msg.From = config.ServerInfo.Token
|
||||||
msg.UUId = m.UUId
|
msg.UUId = m.UUId
|
||||||
Dial(m.Data.(string), msg)
|
Dial(msg, false)
|
||||||
|
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
|
@ -559,9 +236,25 @@ func ProcessingContent(stream quic.Stream) {
|
||||||
|
|
||||||
//文件分片发送
|
//文件分片发送
|
||||||
func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
|
func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
|
||||||
|
summary := model.FileSummaryModel{}
|
||||||
|
|
||||||
|
msg := model.MessageModel{}
|
||||||
|
msg.Type = types.PERSONSUMMARY
|
||||||
|
msg.From = config.ServerInfo.Token
|
||||||
|
msg.To = to
|
||||||
|
msg.UUId = uuid
|
||||||
|
|
||||||
fStat, err := os.Stat(filePath)
|
fStat, err := os.Stat(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
||||||
|
summary.Message = err.Error()
|
||||||
|
|
||||||
|
msg.Data = summary
|
||||||
|
|
||||||
|
summaryByte, _ := json.Marshal(msg)
|
||||||
|
summaryPrefixLength := file.PrefixLength(len(summaryByte))
|
||||||
|
summaryData := append(summaryPrefixLength, summaryByte...)
|
||||||
|
stream.Write(summaryData)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -569,25 +262,25 @@ func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
|
||||||
|
|
||||||
f, err := os.Open(filePath)
|
f, err := os.Open(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("读取失败", err)
|
|
||||||
|
summary.Message = err.Error()
|
||||||
|
msg.Data = summary
|
||||||
|
|
||||||
|
summaryByte, _ := json.Marshal(msg)
|
||||||
|
summaryPrefixLength := file.PrefixLength(len(summaryByte))
|
||||||
|
summaryData := append(summaryPrefixLength, summaryByte...)
|
||||||
|
stream.Write(summaryData)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
//先发送文件摘要
|
//send file summary first
|
||||||
|
|
||||||
summary := model.FileSummaryModel{}
|
|
||||||
summary.BlockSize = blockSize
|
summary.BlockSize = blockSize
|
||||||
summary.Hash = file.GetHashByPath(filePath)
|
summary.Hash = file.GetHashByPath(filePath)
|
||||||
summary.Length = length
|
summary.Length = length
|
||||||
summary.Name = fStat.Name()
|
summary.Name = fStat.Name()
|
||||||
summary.Size = fStat.Size()
|
summary.Size = fStat.Size()
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Type = "summary"
|
|
||||||
msg.Data = summary
|
msg.Data = summary
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
msg.To = to
|
|
||||||
msg.UUId = uuid
|
|
||||||
|
|
||||||
summaryByte, _ := json.Marshal(msg)
|
summaryByte, _ := json.Marshal(msg)
|
||||||
summaryPrefixLength := file.PrefixLength(len(summaryByte))
|
summaryPrefixLength := file.PrefixLength(len(summaryByte))
|
||||||
|
@ -610,13 +303,13 @@ func SendFileData(stream quic.Stream, filePath, to, uuid string) error {
|
||||||
tran.Index = i
|
tran.Index = i
|
||||||
tran.Length = length
|
tran.Length = length
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
fileMsg := model.MessageModel{}
|
||||||
msg.Type = "file_data"
|
fileMsg.Type = types.PERSONDOWNLOAD
|
||||||
msg.Data = tran
|
fileMsg.Data = tran
|
||||||
msg.From = config.ServerInfo.Token
|
fileMsg.From = config.ServerInfo.Token
|
||||||
msg.To = to
|
fileMsg.To = to
|
||||||
msg.UUId = uuid
|
fileMsg.UUId = uuid
|
||||||
b, _ := json.Marshal(msg)
|
b, _ := json.Marshal(fileMsg)
|
||||||
prefixLength := file.PrefixLength(len(b))
|
prefixLength := file.PrefixLength(len(b))
|
||||||
dataLength := file.DataLength(len(buf[:n]))
|
dataLength := file.DataLength(len(buf[:n]))
|
||||||
data := append(append(append(prefixLength, b...), dataLength...), buf[:n]...)
|
data := append(append(append(prefixLength, b...), dataLength...), buf[:n]...)
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
package service
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"net/url"
|
|
||||||
"reflect"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/IceWhaleTech/CasaOS/model"
|
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
|
||||||
model2 "github.com/IceWhaleTech/CasaOS/service/model"
|
|
||||||
"github.com/IceWhaleTech/CasaOS/types"
|
|
||||||
"github.com/gorilla/websocket"
|
|
||||||
uuid "github.com/satori/go.uuid"
|
|
||||||
)
|
|
||||||
|
|
||||||
var WebSocketConn *websocket.Conn
|
|
||||||
|
|
||||||
func SocketConnect() {
|
|
||||||
Connect()
|
|
||||||
ticker := time.NewTicker(time.Second * 5)
|
|
||||||
defer ticker.Stop()
|
|
||||||
done := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
defer close(done)
|
|
||||||
for {
|
|
||||||
_, message, err := WebSocketConn.ReadMessage()
|
|
||||||
if err != nil {
|
|
||||||
Connect()
|
|
||||||
}
|
|
||||||
msa := model.MessageModel{}
|
|
||||||
json.Unmarshal(message, &msa)
|
|
||||||
if msa.Type == "connection" {
|
|
||||||
bss, _ := json.Marshal(msa.Data)
|
|
||||||
content := model.PersionModel{}
|
|
||||||
err := json.Unmarshal(bss, &content)
|
|
||||||
fmt.Println(content)
|
|
||||||
fmt.Println(err)
|
|
||||||
//开始尝试udp链接
|
|
||||||
go UDPConnect(content.Ips)
|
|
||||||
} else if msa.Type == types.PERSONADDFRIEND {
|
|
||||||
// new add friend
|
|
||||||
uuid := uuid.NewV4().String()
|
|
||||||
mi := model2.FriendModel{}
|
|
||||||
mi.Avatar = config.UserInfo.Avatar
|
|
||||||
mi.Profile = config.UserInfo.Description
|
|
||||||
mi.Name = config.UserInfo.UserName
|
|
||||||
m := model.MessageModel{}
|
|
||||||
m.Data = mi
|
|
||||||
m.From = config.ServerInfo.Token
|
|
||||||
m.To = msa.From
|
|
||||||
m.Type = types.PERSONADDFRIEND
|
|
||||||
m.UUId = uuid
|
|
||||||
result, err := Dial("192.168.2.224:9902", m)
|
|
||||||
friend := model2.FriendModel{}
|
|
||||||
if err != nil && !reflect.DeepEqual(result, friend) {
|
|
||||||
dataModelByte, _ := json.Marshal(result.Data)
|
|
||||||
err := json.Unmarshal(dataModelByte, &friend)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(friend.Token) == 0 {
|
|
||||||
friend.Token = m.From
|
|
||||||
}
|
|
||||||
MyService.Friend().AddFriend(friend)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
msg := model.MessageModel{}
|
|
||||||
msg.Data = config.ServerInfo.Token
|
|
||||||
msg.Type = "refresh"
|
|
||||||
msg.From = config.ServerInfo.Token
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
for {
|
|
||||||
|
|
||||||
select {
|
|
||||||
case <-ticker.C:
|
|
||||||
err := WebSocketConn.WriteMessage(websocket.TextMessage, b)
|
|
||||||
if err != nil {
|
|
||||||
Connect()
|
|
||||||
}
|
|
||||||
case <-done:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func Connect() {
|
|
||||||
u := url.URL{Scheme: "ws", Host: config.ServerInfo.Handshake + ":8088", Path: "/v1/ws"}
|
|
||||||
for {
|
|
||||||
d, _, e := websocket.DefaultDialer.Dial(u.String(), nil)
|
|
||||||
if e == nil {
|
|
||||||
WebSocketConn = d
|
|
||||||
return
|
|
||||||
}
|
|
||||||
fmt.Println(e)
|
|
||||||
time.Sleep(time.Second * 5)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,7 +3,6 @@ package service
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"crypto/tls"
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -16,6 +15,7 @@ import (
|
||||||
|
|
||||||
"github.com/IceWhaleTech/CasaOS/model"
|
"github.com/IceWhaleTech/CasaOS/model"
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
||||||
|
"github.com/IceWhaleTech/CasaOS/pkg/quic_helper"
|
||||||
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
||||||
model2 "github.com/IceWhaleTech/CasaOS/service/model"
|
model2 "github.com/IceWhaleTech/CasaOS/service/model"
|
||||||
"github.com/IceWhaleTech/CasaOS/types"
|
"github.com/IceWhaleTech/CasaOS/types"
|
||||||
|
@ -28,37 +28,33 @@ var PeopleMap map[string]quic.Stream
|
||||||
var Message chan model.MessageModel
|
var Message chan model.MessageModel
|
||||||
var UDPAddressMap map[string]string
|
var UDPAddressMap map[string]string
|
||||||
|
|
||||||
func Dial(addr string, msg model.MessageModel) (m model.MessageModel, err error) {
|
func Dial(msg model.MessageModel, server bool) (m model.MessageModel, err error) {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
Message = make(chan model.MessageModel)
|
Message = make(chan model.MessageModel)
|
||||||
quicConfig := &quic.Config{
|
|
||||||
ConnectionIDLength: 4,
|
|
||||||
KeepAlive: true,
|
|
||||||
}
|
|
||||||
tlsConf := &tls.Config{
|
|
||||||
InsecureSkipVerify: true,
|
|
||||||
NextProtos: []string{"bench"},
|
|
||||||
SessionTicketsDisabled: true,
|
|
||||||
}
|
|
||||||
srcAddr := &net.UDPAddr{
|
srcAddr := &net.UDPAddr{
|
||||||
IP: net.IPv4zero, Port: 9904} //注意端口必须固定
|
IP: net.IPv4zero, Port: 9904} //注意端口必须固定
|
||||||
//addr
|
addr := UDPAddressMap[msg.To]
|
||||||
if len(addr) == 0 {
|
ticker := msg.To
|
||||||
|
if server {
|
||||||
addr = config.ServerInfo.Handshake + ":9527"
|
addr = config.ServerInfo.Handshake + ":9527"
|
||||||
|
ticker = "bench"
|
||||||
}
|
}
|
||||||
dstAddr, err := net.ResolveUDPAddr("udp", addr)
|
dstAddr, err := net.ResolveUDPAddr("udp", addr)
|
||||||
|
|
||||||
//DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。net必须是"udp"、"udp4"、"udp6";如果laddr不是nil,将使用它作为本地地址,否则自动选择一个本地地址。
|
//DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。net必须是"udp"、"udp4"、"udp6";如果laddr不是nil,将使用它作为本地地址,否则自动选择一个本地地址。
|
||||||
//(conn)UDPConn代表一个UDP网络连接,实现了Conn和PacketConn接口
|
//(conn)UDPConn代表一个UDP网络连接,实现了Conn和PacketConn接口
|
||||||
|
|
||||||
session, err := quic.DialContext(ctx, UDPConn, dstAddr, srcAddr.String(), tlsConf, quicConfig)
|
session, err := quic.DialContext(ctx, UDPConn, dstAddr, srcAddr.String(), quic_helper.GetClientTlsConfig(ticker), quic_helper.GetQUICConfig())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
go MyService.Casa().PushConnectionStatus(m.UUId, err.Error(), m.From, m.To, m.Type)
|
||||||
return m, err
|
return m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
stream, err := session.OpenStreamSync(ctx)
|
stream, err := session.OpenStreamSync(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
go MyService.Casa().PushConnectionStatus(m.UUId, err.Error(), m.From, m.To, m.Type)
|
||||||
session.CloseWithError(1, err.Error())
|
session.CloseWithError(1, err.Error())
|
||||||
return m, err
|
return m, err
|
||||||
}
|
}
|
||||||
|
@ -70,12 +66,13 @@ func Dial(addr string, msg model.MessageModel) (m model.MessageModel, err error)
|
||||||
go ReadContent(stream)
|
go ReadContent(stream)
|
||||||
result := <-Message
|
result := <-Message
|
||||||
stream.Close()
|
stream.Close()
|
||||||
|
go MyService.Casa().PushConnectionStatus(m.UUId, "OK", m.From, m.To, m.Type)
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SayHello(stream quic.Stream, to string) {
|
func SayHello(stream quic.Stream, to string) {
|
||||||
msg := model.MessageModel{}
|
msg := model.MessageModel{}
|
||||||
msg.Type = "hello"
|
msg.Type = types.PERSONHELLO
|
||||||
msg.Data = "hello"
|
msg.Data = "hello"
|
||||||
msg.To = to
|
msg.To = to
|
||||||
msg.From = config.ServerInfo.Token
|
msg.From = config.ServerInfo.Token
|
||||||
|
@ -83,8 +80,6 @@ func SayHello(stream quic.Stream, to string) {
|
||||||
SendData(stream, msg)
|
SendData(stream, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
var pathsss string
|
|
||||||
|
|
||||||
//发送数据
|
//发送数据
|
||||||
func SendData(stream quic.Stream, m model.MessageModel) {
|
func SendData(stream quic.Stream, m model.MessageModel) {
|
||||||
b, _ := json.Marshal(m)
|
b, _ := json.Marshal(m)
|
||||||
|
@ -99,41 +94,60 @@ var Summary map[string]model.FileSummaryModel
|
||||||
func ReadContent(stream quic.Stream) {
|
func ReadContent(stream quic.Stream) {
|
||||||
for {
|
for {
|
||||||
prefixByte := make([]byte, 6)
|
prefixByte := make([]byte, 6)
|
||||||
c1, err := io.ReadFull(stream, prefixByte)
|
_, err := io.ReadFull(stream, prefixByte)
|
||||||
fmt.Println(c1, err, string(prefixByte))
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
break
|
||||||
|
}
|
||||||
prefixLength, err := strconv.Atoi(string(prefixByte))
|
prefixLength, err := strconv.Atoi(string(prefixByte))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
break
|
||||||
|
}
|
||||||
messageByte := make([]byte, prefixLength)
|
messageByte := make([]byte, prefixLength)
|
||||||
t, err := io.ReadFull(stream, messageByte)
|
_, err = io.ReadFull(stream, messageByte)
|
||||||
fmt.Println(t, err, string(messageByte))
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
break
|
||||||
|
}
|
||||||
m := model.MessageModel{}
|
m := model.MessageModel{}
|
||||||
err = json.Unmarshal(messageByte, &m)
|
err = json.Unmarshal(messageByte, &m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
break
|
||||||
}
|
}
|
||||||
fmt.Println(m)
|
|
||||||
//传输数据需要继续读取
|
if m.Type == types.PERSONDOWNLOAD {
|
||||||
if m.Type == "file_data" {
|
|
||||||
dataModelByte, _ := json.Marshal(m.Data)
|
dataModelByte, _ := json.Marshal(m.Data)
|
||||||
dataModel := model.TranFileModel{}
|
dataModel := model.TranFileModel{}
|
||||||
err := json.Unmarshal(dataModelByte, &dataModel)
|
err := json.Unmarshal(dataModelByte, &dataModel)
|
||||||
fmt.Println(err)
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
dataLengthByte := make([]byte, 8)
|
dataLengthByte := make([]byte, 8)
|
||||||
t, err = io.ReadFull(stream, dataLengthByte)
|
_, err = io.ReadFull(stream, dataLengthByte)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
dataLength, err := strconv.Atoi(string(dataLengthByte))
|
dataLength, err := strconv.Atoi(string(dataLengthByte))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
dataByte := make([]byte, dataLength)
|
dataByte := make([]byte, dataLength)
|
||||||
t, err = io.ReadFull(stream, dataByte)
|
_, err = io.ReadFull(stream, dataByte)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
sum := md5.Sum(dataByte)
|
sum := md5.Sum(dataByte)
|
||||||
hash := hex.EncodeToString(sum[:])
|
hash := hex.EncodeToString(sum[:])
|
||||||
if dataModel.Hash != hash {
|
if dataModel.Hash != hash {
|
||||||
fmt.Println("hash不匹配", hash, dataModel.Hash)
|
fmt.Println("hash不匹配", hash, dataModel.Hash)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
tempPath := config.AppInfo.RootPath + "/temp" + "/" + m.UUId
|
tempPath := config.AppInfo.RootPath + "/temp" + "/" + m.UUId
|
||||||
|
@ -143,15 +157,29 @@ func ReadContent(stream quic.Stream) {
|
||||||
|
|
||||||
if os.IsNotExist(err) || tempFile.Size() == 0 {
|
if os.IsNotExist(err) || tempFile.Size() == 0 {
|
||||||
err = ioutil.WriteFile(filepath, dataByte, 0644)
|
err = ioutil.WriteFile(filepath, dataByte, 0644)
|
||||||
|
task := model2.PersionDownloadDBModel{}
|
||||||
|
task.UUID = m.UUId
|
||||||
|
task.Error = err.Error()
|
||||||
|
task.State = types.DOWNLOADERROR
|
||||||
|
MyService.Download().SetDownloadError(task)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if file.GetHashByPath(filepath) != dataModel.Hash {
|
if file.GetHashByPath(filepath) != dataModel.Hash {
|
||||||
os.Remove(filepath)
|
os.Remove(filepath)
|
||||||
err = ioutil.WriteFile(filepath, dataByte, 0644)
|
err = ioutil.WriteFile(filepath, dataByte, 0644)
|
||||||
|
task := model2.PersionDownloadDBModel{}
|
||||||
|
task.UUID = m.UUId
|
||||||
|
task.Error = err.Error()
|
||||||
|
task.State = types.DOWNLOADERROR
|
||||||
|
MyService.Download().SetDownloadError(task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
files, err := ioutil.ReadDir(tempPath)
|
files, err := ioutil.ReadDir(tempPath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
if len(files) >= dataModel.Length {
|
if len(files) >= dataModel.Length {
|
||||||
summary := Summary[m.UUId]
|
summary := Summary[m.UUId]
|
||||||
file.SpliceFiles(tempPath, config.FileSettingInfo.DownloadDir+"/"+summary.Name, dataModel.Length, 0)
|
file.SpliceFiles(tempPath, config.FileSettingInfo.DownloadDir+"/"+summary.Name, dataModel.Length, 0)
|
||||||
|
@ -161,6 +189,7 @@ func ReadContent(stream quic.Stream) {
|
||||||
task.UUID = m.UUId
|
task.UUID = m.UUId
|
||||||
task.State = types.DOWNLOADFINISH
|
task.State = types.DOWNLOADFINISH
|
||||||
MyService.Download().EditDownloadState(task)
|
MyService.Download().EditDownloadState(task)
|
||||||
|
delete(Summary, m.UUId)
|
||||||
} else {
|
} else {
|
||||||
os.Remove(config.FileSettingInfo.DownloadDir + "/" + summary.Name)
|
os.Remove(config.FileSettingInfo.DownloadDir + "/" + summary.Name)
|
||||||
task := model2.PersionDownloadDBModel{}
|
task := model2.PersionDownloadDBModel{}
|
||||||
|
@ -171,14 +200,12 @@ func ReadContent(stream quic.Stream) {
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
} else if m.Type == "summary" {
|
} else if m.Type == types.PERSONSUMMARY {
|
||||||
|
|
||||||
dataModel := model.FileSummaryModel{}
|
dataModel := model.FileSummaryModel{}
|
||||||
if m.UUId == m.UUId {
|
dataModelByte, _ := json.Marshal(m.Data)
|
||||||
dataModelByte, _ := json.Marshal(m.Data)
|
err := json.Unmarshal(dataModelByte, &dataModel)
|
||||||
err := json.Unmarshal(dataModelByte, &dataModel)
|
fmt.Println(err)
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
task := model2.PersionDownloadDBModel{}
|
task := model2.PersionDownloadDBModel{}
|
||||||
task.UUID = m.UUId
|
task.UUID = m.UUId
|
||||||
|
@ -189,17 +216,27 @@ func ReadContent(stream quic.Stream) {
|
||||||
task.BlockSize = dataModel.BlockSize
|
task.BlockSize = dataModel.BlockSize
|
||||||
task.Hash = dataModel.Hash
|
task.Hash = dataModel.Hash
|
||||||
task.Type = 0
|
task.Type = 0
|
||||||
|
task.From = m.From
|
||||||
|
if len(dataModel.Message) > 0 {
|
||||||
|
task.State = types.DOWNLOADERROR
|
||||||
|
task.Error = dataModel.Message
|
||||||
|
}
|
||||||
|
|
||||||
MyService.Download().SaveDownload(task)
|
MyService.Download().SaveDownload(task)
|
||||||
|
|
||||||
Summary[m.UUId] = dataModel
|
Summary[m.UUId] = dataModel
|
||||||
|
|
||||||
} else if m.Type == "connection" {
|
} else if m.Type == types.PERSONCONNECTION {
|
||||||
UDPAddressMap[m.From] = m.Data.(string)
|
|
||||||
fmt.Println("udpconn", m)
|
if len(m.Data.(string)) > 0 {
|
||||||
|
UDPAddressMap[m.From] = m.Data.(string)
|
||||||
|
} else {
|
||||||
|
delete(UDPAddressMap, m.From)
|
||||||
|
}
|
||||||
mi := model2.FriendModel{}
|
mi := model2.FriendModel{}
|
||||||
mi.Avatar = config.UserInfo.Avatar
|
mi.Avatar = config.UserInfo.Avatar
|
||||||
mi.Profile = config.UserInfo.Description
|
mi.Profile = config.UserInfo.Description
|
||||||
mi.Name = config.UserInfo.UserName
|
mi.Name = config.UserInfo.NickName
|
||||||
mi.Token = config.ServerInfo.Token
|
mi.Token = config.ServerInfo.Token
|
||||||
msg := model.MessageModel{}
|
msg := model.MessageModel{}
|
||||||
msg.Type = types.PERSONADDFRIEND
|
msg.Type = types.PERSONADDFRIEND
|
||||||
|
@ -207,7 +244,15 @@ func ReadContent(stream quic.Stream) {
|
||||||
msg.To = m.From
|
msg.To = m.From
|
||||||
msg.From = config.ServerInfo.Token
|
msg.From = config.ServerInfo.Token
|
||||||
msg.UUId = m.UUId
|
msg.UUId = m.UUId
|
||||||
Dial(m.Data.(string), msg)
|
go Dial(msg, false)
|
||||||
|
Message <- m
|
||||||
|
break
|
||||||
|
} else if m.Type == "get_ip" {
|
||||||
|
if len(m.Data.(string)) == 0 {
|
||||||
|
delete(UDPAddressMap, m.From)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
UDPAddressMap[m.From] = m.Data.(string)
|
||||||
Message <- m
|
Message <- m
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
|
@ -216,3 +261,37 @@ func ReadContent(stream quic.Stream) {
|
||||||
}
|
}
|
||||||
Message <- model.MessageModel{}
|
Message <- model.MessageModel{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SendIPToServer() {
|
||||||
|
msg := model.MessageModel{}
|
||||||
|
msg.Type = "hello"
|
||||||
|
msg.Data = ""
|
||||||
|
msg.From = config.ServerInfo.Token
|
||||||
|
msg.To = config.ServerInfo.Token
|
||||||
|
msg.UUId = uuid.NewV4().String()
|
||||||
|
|
||||||
|
Dial(msg, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoopFriend() {
|
||||||
|
list := MyService.Friend().GetFriendList()
|
||||||
|
for i := 0; i < len(list); i++ {
|
||||||
|
msg := model.MessageModel{}
|
||||||
|
msg.Type = "get_ip"
|
||||||
|
msg.Data = ""
|
||||||
|
msg.From = config.ServerInfo.Token
|
||||||
|
msg.To = list[i].Token
|
||||||
|
msg.UUId = uuid.NewV4().String()
|
||||||
|
Dial(msg, true)
|
||||||
|
|
||||||
|
msg.Type = "hello"
|
||||||
|
msg.Data = ""
|
||||||
|
msg.From = config.ServerInfo.Token
|
||||||
|
msg.To = list[i].Token
|
||||||
|
msg.UUId = uuid.NewV4().String()
|
||||||
|
if _, ok := UDPAddressMap[list[i].Token]; ok {
|
||||||
|
go Dial(msg, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserService interface {
|
type UserService interface {
|
||||||
SetUser(username, pwd, token, email, desc string) error
|
SetUser(username, pwd, token, email, desc, nickName string) error
|
||||||
UpLoadFile(file multipart.File, name string) error
|
UpLoadFile(file multipart.File, name string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ type user struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置用户名密码
|
//设置用户名密码
|
||||||
func (c *user) SetUser(username, pwd, token, email, desc string) error {
|
func (c *user) SetUser(username, pwd, token, email, desc, nickName string) error {
|
||||||
if len(username) > 0 {
|
if len(username) > 0 {
|
||||||
config.Cfg.Section("user").Key("UserName").SetValue(username)
|
config.Cfg.Section("user").Key("UserName").SetValue(username)
|
||||||
config.UserInfo.UserName = username
|
config.UserInfo.UserName = username
|
||||||
|
@ -36,6 +36,10 @@ func (c *user) SetUser(username, pwd, token, email, desc string) error {
|
||||||
config.Cfg.Section("user").Key("Description").SetValue(desc)
|
config.Cfg.Section("user").Key("Description").SetValue(desc)
|
||||||
config.UserInfo.Description = desc
|
config.UserInfo.Description = desc
|
||||||
}
|
}
|
||||||
|
if len(nickName) > 0 {
|
||||||
|
config.Cfg.Section("user").Key("NickName").SetValue(nickName)
|
||||||
|
config.UserInfo.NickName = nickName
|
||||||
|
}
|
||||||
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
config.Cfg.SaveTo(config.SystemConfigInfo.ConfigPath)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
package types
|
package types
|
||||||
|
|
||||||
const PERSONADDFRIEND = "add_user"
|
const PERSONADDFRIEND = "add_user"
|
||||||
|
const PERSONDOWNLOAD = "file_data"
|
||||||
|
const PERSONSUMMARY = "summary"
|
||||||
|
const PERSONCONNECTION = "connection"
|
||||||
|
const PERSONDIRECTORY = "directory"
|
||||||
|
const PERSONHELLO = "hello"
|
||||||
|
|
179
web/8ee7a98310ee94717fe1.worker.js
Normal file
Before Width: | Height: | Size: 91 KiB |
|
@ -1,72 +0,0 @@
|
||||||
<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M0 60C0 26.8629 26.8629 0 60 0V0C93.1371 0 120 26.8629 120 60V60C120 93.1371 93.1371 120 60 120V120C26.8629 120 0 93.1371 0 60V60Z" fill="url(#paint0_linear_582:2091)"/>
|
|
||||||
<g filter="url(#filter0_d_582:2091)">
|
|
||||||
<g filter="url(#filter1_iiiii_582:2091)">
|
|
||||||
<path d="M75.1248 42.125C75.1248 50.4783 68.3532 57.25 59.9999 57.25C51.6465 57.25 44.8749 50.4783 44.8749 42.125C44.8749 33.7717 51.6465 27 59.9999 27C68.3532 27 75.1248 33.7717 75.1248 42.125Z" fill="url(#paint1_linear_582:2091)"/>
|
|
||||||
<path d="M34.422 71.7327C41.316 66.1301 50.2453 62.75 59.9998 62.75C69.7544 62.75 78.6837 66.1301 85.5777 71.7327C89.5123 74.9302 89.5123 80.8198 85.5777 84.0174C78.6837 89.6199 69.7544 93 59.9998 93C50.2453 93 41.316 89.6199 34.422 84.0174C30.4874 80.8198 30.4874 74.9302 34.422 71.7327Z" fill="url(#paint2_linear_582:2091)"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<defs>
|
|
||||||
<filter id="filter0_d_582:2091" x="4" y="8" width="112" height="112" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
|
||||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
|
||||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
||||||
<feOffset dy="4"/>
|
|
||||||
<feGaussianBlur stdDeviation="6"/>
|
|
||||||
<feComposite in2="hardAlpha" operator="out"/>
|
|
||||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
|
||||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_582:2091"/>
|
|
||||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_582:2091" result="shape"/>
|
|
||||||
</filter>
|
|
||||||
<filter id="filter1_iiiii_582:2091" x="27.4711" y="23" width="63.0576" height="72" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
|
||||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
|
||||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
|
||||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
||||||
<feOffset dx="2" dy="2"/>
|
|
||||||
<feGaussianBlur stdDeviation="3"/>
|
|
||||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
|
||||||
<feColorMatrix type="matrix" values="0 0 0 0 0.495833 0 0 0 0 0.879 0 0 0 0 1 0 0 0 0.4 0"/>
|
|
||||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_582:2091"/>
|
|
||||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
||||||
<feOffset dx="-4" dy="-4"/>
|
|
||||||
<feGaussianBlur stdDeviation="3"/>
|
|
||||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
|
||||||
<feColorMatrix type="matrix" values="0 0 0 0 0.0205888 0 0 0 0 0.00944442 0 0 0 0 0.566667 0 0 0 0.2 0"/>
|
|
||||||
<feBlend mode="normal" in2="effect1_innerShadow_582:2091" result="effect2_innerShadow_582:2091"/>
|
|
||||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
||||||
<feOffset dx="1" dy="1"/>
|
|
||||||
<feGaussianBlur stdDeviation="1"/>
|
|
||||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
|
||||||
<feColorMatrix type="matrix" values="0 0 0 0 0.816667 0 0 0 0 0.945 0 0 0 0 1 0 0 0 0.2 0"/>
|
|
||||||
<feBlend mode="normal" in2="effect2_innerShadow_582:2091" result="effect3_innerShadow_582:2091"/>
|
|
||||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
||||||
<feOffset dx="-2" dy="-2"/>
|
|
||||||
<feGaussianBlur stdDeviation="2"/>
|
|
||||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
|
||||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00608333 0 0 0 0 0 0 0 0 0 0.304167 0 0 0 0.2 0"/>
|
|
||||||
<feBlend mode="normal" in2="effect3_innerShadow_582:2091" result="effect4_innerShadow_582:2091"/>
|
|
||||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
|
||||||
<feOffset dx="-1" dy="-1"/>
|
|
||||||
<feGaussianBlur stdDeviation="0.5"/>
|
|
||||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
|
||||||
<feColorMatrix type="matrix" values="0 0 0 0 0.075 0 0 0 0 0.778 0 0 0 0 1 0 0 0 0.2 0"/>
|
|
||||||
<feBlend mode="normal" in2="effect4_innerShadow_582:2091" result="effect5_innerShadow_582:2091"/>
|
|
||||||
</filter>
|
|
||||||
<linearGradient id="paint0_linear_582:2091" x1="60" y1="0" x2="60" y2="120" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop stop-color="#5A9CFF"/>
|
|
||||||
<stop offset="0.87897" stop-color="#2A23D5"/>
|
|
||||||
<stop offset="1" stop-color="#4A3CEC"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="paint1_linear_582:2091" x1="60" y1="40" x2="59.9998" y2="93" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop offset="0.0350902" stop-color="white"/>
|
|
||||||
<stop offset="0.525594" stop-color="#B0D4FF"/>
|
|
||||||
<stop offset="0.837131" stop-color="#DEEDFF"/>
|
|
||||||
<stop offset="1" stop-color="#FEFEFF"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="paint2_linear_582:2091" x1="60" y1="40" x2="59.9998" y2="93" gradientUnits="userSpaceOnUse">
|
|
||||||
<stop offset="0.0350902" stop-color="white"/>
|
|
||||||
<stop offset="0.525594" stop-color="#B0D4FF"/>
|
|
||||||
<stop offset="0.837131" stop-color="#DEEDFF"/>
|
|
||||||
<stop offset="1" stop-color="#FEFEFF"/>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
17
web/img/android-package-archive.c32c4fdb.svg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#9fda1e" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -89.043 4.424)" fill="#fff" opacity=".75">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
<path d="m32.883 44.933 2.1667-2.1667c0.33333-0.33333 0.33333-0.85 0-1.1833-0.33333-0.33333-0.85-0.33333-1.1833 0l-2.4667 2.4667c-1.3166-0.66667-2.8166-1.05-4.4-1.05-1.6 0-3.1001 0.38333-4.4332 1.05l-2.4833-2.4667c-0.33333-0.33333-0.85-0.33333-1.1833 0-0.33333 0.33333-0.33333 0.85 0 1.1833l2.1833 2.1833c-2.4667 1.8167-4.0833 4.7334-4.0833 8.05h20c0-3.3166-1.6167-6.2501-4.1168-8.0667zm-9.4547 4.4953h-1.4286v-1.4286h1.4286zm8.5713 0h-1.4286v-1.4286h1.4286z" enable-background="new" fill="#fff" opacity=".75" stroke-width="1.6667"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -1,25 +1,25 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
|
viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path fill="#A4C639" d="M32,0c17.7,0,32,14.3,32,32S49.7,64,32,64S0,49.7,0,32S14.3,0,32,0z"/>
|
<path fill="#A4C639" d="M32,0c17.7,0,32,14.3,32,32S49.7,64,32,64S0,49.7,0,32S14.3,0,32,0z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<path fill="#FFFFFF" d="M16.6,24.6c-1.4,0-2.6,1.2-2.6,2.6L14,38c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-10.9
|
<path fill="#FFFFFF" d="M16.6,24.6c-1.4,0-2.6,1.2-2.6,2.6L14,38c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-10.9
|
||||||
C19.3,25.7,18.1,24.6,16.6,24.6 M37.8,14.8l1.8-3.3c0.1-0.2,0-0.4-0.1-0.5c-0.2-0.1-0.4,0-0.5,0.1l-1.9,3.3
|
C19.3,25.7,18.1,24.6,16.6,24.6 M37.8,14.8l1.8-3.3c0.1-0.2,0-0.4-0.1-0.5c-0.2-0.1-0.4,0-0.5,0.1l-1.9,3.3
|
||||||
c-1.6-0.7-3.3-1.1-5.1-1.1c-1.8,0-3.6,0.4-5.1,1.1L25,11.2C24.9,11,24.7,11,24.5,11c-0.2,0.1-0.2,0.3-0.1,0.5l1.8,3.3
|
c-1.6-0.7-3.3-1.1-5.1-1.1c-1.8,0-3.6,0.4-5.1,1.1L25,11.2C24.9,11,24.7,11,24.5,11c-0.2,0.1-0.2,0.3-0.1,0.5l1.8,3.3
|
||||||
c-3.6,1.8-6,5.3-6,9.3l23.6,0C43.8,20.2,41.4,16.7,37.8,14.8 M26.6,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1
|
c-3.6,1.8-6,5.3-6,9.3l23.6,0C43.8,20.2,41.4,16.7,37.8,14.8 M26.6,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1
|
||||||
C27.6,19.5,27.2,19.9,26.6,19.9 M37.4,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1C38.4,19.5,37.9,19.9,37.4,19.9
|
C27.6,19.5,27.2,19.9,26.6,19.9 M37.4,19.9c-0.5,0-1-0.4-1-1c0-0.5,0.4-1,1-1c0.5,0,1,0.4,1,1C38.4,19.5,37.9,19.9,37.4,19.9
|
||||||
M20.3,25.1l0,16.8c0,1.5,1.3,2.8,2.8,2.8l1.9,0l0,5.7c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l3.5,0l0,5.7
|
M20.3,25.1l0,16.8c0,1.5,1.3,2.8,2.8,2.8l1.9,0l0,5.7c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l3.5,0l0,5.7
|
||||||
c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l1.9,0c1.5,0,2.8-1.2,2.8-2.8l0-16.8L20.3,25.1z M50,27.2
|
c0,1.4,1.2,2.6,2.6,2.6c1.5,0,2.6-1.2,2.6-2.6l0-5.7l1.9,0c1.5,0,2.8-1.2,2.8-2.8l0-16.8L20.3,25.1z M50,27.2
|
||||||
c0-1.4-1.2-2.6-2.6-2.6c-1.4,0-2.6,1.2-2.6,2.6l0,10.9c0,1.4,1.2,2.6,2.6,2.6c1.4,0,2.6-1.2,2.6-2.6L50,27.2z"/>
|
c0-1.4-1.2-2.6-2.6-2.6c-1.4,0-2.6,1.2-2.6,2.6l0,10.9c0,1.4,1.2,2.6,2.6,2.6c1.4,0,2.6-1.2,2.6-2.6L50,27.2z"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
17
web/img/application-apk.319706c4.svg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.667 -72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#84c835" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-14.713 -.1522)">
|
||||||
|
<path d="m22.651 6.7667v1.7198c0 0.073288 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059001 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000" fill="#fff"/>
|
||||||
|
<path d="m23.18 1.2105h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000" fill="#fff"/>
|
||||||
|
<path d="m25.359 10.922 0.80255-0.80255c0.12347-0.12347 0.12347-0.31485 0-0.43832s-0.31485-0.12347-0.43832 0l-0.91368 0.91368c-0.4877-0.24694-1.0433-0.38893-1.6298-0.38893-0.59266 0-1.1483 0.14199-1.6421 0.38893l-0.91985-0.91368c-0.12347-0.12347-0.31485-0.12347-0.43832 0s-0.12347 0.31485 0 0.43832l0.80873 0.80873c-0.91368 0.67291-1.5125 1.7533-1.5125 2.9818h7.4082c0-1.2285-0.59883-2.3151-1.5249-2.988zm-3.5021 1.6651h-0.52916v-0.52916h0.52916zm3.1749 0h-0.52916v-0.52916h0.52916z" enable-background="new" fill="#0c2809" opacity=".5" stroke-width=".61735"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
21
web/img/application-certificate.64a6804d.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.667 -72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f55" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m30.662 18.545-1.291 1.666-2.0508-0.4668-0.55664 2.0293-2.0742 0.35547 0.26367 2.0879-1.7812 1.123 1.0449 1.8281-1.2168 1.7188 1.6621 1.2891-0.46289 2.0527 2.0293 0.55469 0.35547 2.0742 0.8125-0.10352v10.404l4.5938-3.3418 4.5938 3.3418v-9.832l0.09766 0.02344 0.55664-2.0293 2.0742-0.35742-0.26562-2.0879 1.7812-1.1211-1.043-1.8301 1.2148-1.7168-1.6621-1.291 0.46484-2.0508-2.0293-0.55664-0.35547-2.0723-2.0879 0.26367-1.123-1.7812-1.8281 1.043zm1.3379 4.3066a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5z" color="#4d4d4d" color-rendering="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
13
web/img/application-dicom.fbef31c7.svg
Normal file
After Width: | Height: | Size: 5.9 KiB |
13
web/img/application-epub+zip.73eef8b2.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.667 -72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#84c835" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m8.4664 10.961-2.4942-2.4944 2.4942-2.4941 0.83147 0.83132-1.6629 1.6627 0.83142 0.83147 2.4942-2.4941-2.1727-2.1727c-0.17742-0.17757-0.4652-0.17757-0.64277 0l-3.5142 3.5142c-0.17742 0.17742-0.17742 0.4652 0 0.64277l3.5142 3.5141c0.17757 0.17757 0.46535 0.17757 0.64277 0l3.5142-3.5141c0.17742-0.17757 0.17742-0.46535 0-0.64277l-0.51016-0.51001z" enable-background="new" fill="#fff" stroke-width=".050576"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
13
web/img/application-illustrator.2ea791ae.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#341c05" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".5" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path class="st1" d="m6.8166 9.7034-0.3832 1.4552c-0.0097 0.03881-0.02425 0.0485-0.07276 0.0485h-0.71304c-0.04851 0-0.05821-0.01455-0.04851-0.07276l1.3776-4.8215c0.02425-0.08731 0.0388-0.16492 0.04851-0.4026 0-0.03395 0.01455-0.0485 0.0388-0.0485h1.0186c0.03395 0 0.04851 0.0097 0.05821 0.0485l1.5425 5.2338c0.0097 0.03881 0 0.06306-0.0388 0.06306h-0.8052c-0.0388 0-0.06306-0.0097-0.07276-0.04366l-0.4026-1.46zm1.3485-0.7858c-0.13582-0.53842-0.45596-1.7123-0.57722-2.2798h-0.0097c-0.10186 0.56752-0.35894 1.5279-0.56267 2.2798zm2.1828-2.6969c0-0.31044 0.21828-0.49476 0.49476-0.49476 0.29589 0 0.49476 0.19887 0.49476 0.49476 0 0.32014-0.20858 0.49476-0.50446 0.49476-0.28134 0-0.48506-0.17462-0.48506-0.49476zm0.05821 1.1011c0-0.0388 0.01455-0.05821 0.05821-0.05821h0.76154c0.0388 0 0.05821 0.01455 0.05821 0.05821v3.8271c0 0.0388-0.0097 0.05821-0.05821 0.05821h-0.75185c-0.04851 0-0.06306-0.02425-0.06306-0.06306v-3.8223z" enable-background="new" fill="#ff7c00" stroke-width=".048506"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
22
web/img/application-json.eea7b6c3.svg
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="b" x1="-666.12" x2="-553.27" y1="413.04" y2="525.91" gradientTransform="matrix(.99884 0 0 .9987 689.01 -388.84)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
|
||||||
|
<linearGradient id="a">
|
||||||
|
<stop stop-color="#3b3b3b" offset="0"/>
|
||||||
|
<stop stop-color="#fff" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="c" x1="-553.27" x2="-666.12" y1="525.91" y2="413.05" gradientTransform="matrix(.99884 0 0 .9987 689.01 -388.84)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
|
||||||
|
<linearGradient id="d" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#d)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(.049608 0 0 .049608 4.4978 4.4978)" enable-background="new" fill-rule="evenodd">
|
||||||
|
<path d="m79.865 119.1c35.398 48.255 70.04-13.469 69.989-50.587-0.0602-43.886-44.541-68.414-70.018-68.414-40.892 0-79.836 33.796-79.836 80.036 0 51.396 44.64 79.865 79.836 79.865-7.9645-1.1468-34.506-6.834-34.863-67.967-0.23987-41.347 13.488-57.866 34.805-50.599 0.47743 0.17707 23.514 9.2645 23.514 38.951 0 29.56-23.427 38.715-23.427 38.715z" color="#000000" fill="url(#b)"/>
|
||||||
|
<path d="m79.823 41.401c-23.39-8.0619-52.043 11.216-52.043 49.829 0 63.048 46.721 68.77 52.384 68.77 40.892 0 79.836-33.796 79.836-80.036 0-51.396-44.64-79.865-79.836-79.865 9.7481-1.35 52.541 10.55 52.541 69.037 0 38.141-31.953 58.905-52.735 50.033-0.47743-0.17707-23.514-9.2645-23.514-38.951 0-29.56 23.367-38.818 23.367-38.818z" color="#000000" fill="url(#c)"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2 KiB |
13
web/img/application-msonenote.4772ddbe.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#994b91" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m22 21c-0.554 0-1 0.446-1 1v20c0 0.554 0.446 1 1 1h18c0.554 0 1-0.446 1-1v-1h1c0.554 0 1-0.446 1-1v-4c0-0.186-0.064344-0.351-0.15234-0.5 0.088-0.149 0.15234-0.314 0.15234-0.5v-4c0-0.186-0.064344-0.351-0.15234-0.5 0.088-0.149 0.15234-0.314 0.15234-0.5v-4c0-0.554-0.446-1-1-1h-1v-3c0-0.554-0.446-1-1-1h-18zm1 3h7v1h-7v-1zm9 0h7v1h-7v-1zm9 2h1v4h-1v-4zm-18 1h7v1h-7v-1zm9 0h7v1h-7v-1zm-9 3h7v1h-7v-1zm9 0h7v1h-7v-1zm9 1h1v4h-1v-4zm-18 2h7v1h-7v-1zm9 0h7v1h-7v-1zm-9 3h7v1h-7v-1zm9 0h7v1h-7v-1zm9 0h1v4h-1v-4zm-18 3h7v1h-7v-1zm9 0h7v1h-7v-1z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
18
web/img/application-msoutlook.0c2789ef.svg
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#576dab" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-52.837 -2.8601)">
|
||||||
|
<path transform="translate(52.837 2.8601)" d="m32 17.301-13.363 10.025c-0.02875 0.0187-0.054801 0.0418-0.082031 0.0625l-0.015626 0.011719v0.001953c-0.3259 0.2559-0.53906 0.64931-0.53906 1.0977v12.199c2e-6 2 1.5771 2 2 2h24s2 0 2-2v-12.199c0-0.45851-0.22189-0.86016-0.56055-1.1152l0.005859-0.007813-13.445-10.076zm0 6.3984a5 5 0 0 1 5 5v1.5c0 0.831-0.669 1.5-1.5 1.5-0.61296 0-1.1359-0.36612-1.3691-0.89062a3 3 0 0 1-2.1309 0.89062 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3v1.5c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-1.5a4 4 0 0 0-4-4 4 4 0 0 0-4 4 4 4 0 0 0 4 4h3.5c0.277 0 0.5 0.223 0.5 0.5s-0.223 0.5-0.5 0.5h-3.5a5 5 0 0 1-5-5 5 5 0 0 1 5-5zm0 3a2 2 0 0 0-2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2z" enable-background="new" fill="#fff" opacity=".75"/>
|
||||||
|
<path transform="translate(52.837 2.8601)" d="m22.5 20.699c-0.831 0-1.5 0.66967-1.5 1.5v15.002c0 0.83033 0.669 1.498 1.5 1.498h19c0.831 0 1.5-0.66772 1.5-1.498v-15.002c0-0.83033-0.669-1.5-1.5-1.5h-19zm9.5 3a5 5 0 0 1 5 5v1.5c0 0.831-0.669 1.5-1.5 1.5-0.61296 0-1.1359-0.36612-1.3691-0.89062a3 3 0 0 1-2.1309 0.89062 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3v1.5c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-1.5a4 4 0 0 0-4-4 4 4 0 0 0-4 4 4 4 0 0 0 4 4h3.5c0.277 0 0.5 0.223 0.5 0.5s-0.223 0.5-0.5 0.5h-3.5a5 5 0 0 1-5-5 5 5 0 0 1 5-5zm0 3a2 2 0 0 0-2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0-2-2z" enable-background="new" fill="#fff"/>
|
||||||
|
<path d="m70.837 31.36 26.6 18.2-24.6-2e-4c-1 0-2-0.5-2-2z" enable-background="new" fill="#e8ebf0"/>
|
||||||
|
<path d="m96.837 49.56c2-2e-5 2-2 2-2l-1e-5 -16.2-26.6 18.2z" enable-background="new" fill="#f2f2fa"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
16
web/img/application-msword-template.5500dd0c.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4747b5" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -75.6 4.949)" fill="#fff" stroke-width=".088193">
|
||||||
|
<path d="m28.768 3.453c-1.2902 0.22976-2.5811 0.53461-3.8713 0.76016 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5677 0.52447 3.8486 0.75844h0.38441v-7.4082zm-0.49905 2.3996-0.5944 2.4951-0.48788-0.03847c-0.11193-0.55714-0.24233-1.1109-0.34248-1.6706-0.09847 0.54368-0.2265 1.0823-0.33928 1.6226-0.16159-0.0084-0.32392-0.01852-0.48635-0.02946-0.13971-0.74062-0.30388-1.4762-0.43432-2.2185 0.14392-0.0067 0.28868-0.01258 0.4326-0.01763 0.08668 0.53611 0.18512 1.0697 0.26087 1.6066 0.11867-0.55041 0.23994-1.1008 0.35777-1.6512 0.15991-0.0093 0.31979-0.01599 0.47969-0.02441 0.11193 0.56809 0.22634 1.1352 0.34753 1.7008 0.0951-0.58408 0.20033-1.1664 0.30217-1.7496 0.16832-0.0059 0.33662-0.01517 0.5041-0.02527z" enable-background="new"/>
|
||||||
|
<path d="m29.395 4.5113h2.6458v5.2916h-2.6458v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52823h2.1166v-0.2655h-2.1166v-0.52916h2.1166v-0.26458h-2.1166z" enable-background="new"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
26
web/img/application-octet-stream.4dbc6148.svg
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-1.4e-4,-1.5875)" fill="#b3b3b3">
|
||||||
|
<path d="m5.7553 8.1738h-0.30961v-1.6044q0-0.33776 0.014073-0.6333l-0.47849 0.40813-0.16888-0.2111 0.67552-0.53479h0.26739z"/>
|
||||||
|
<path d="m6.656 6.879q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m8.6404 6.879q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m10.625 6.879q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61922-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40812 0-0.61922-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m4.6717 10.054q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m7.7397 11.349h-0.30961v-1.6044q0-0.33776 0.014073-0.6333l-0.47849 0.40813-0.16888-0.2111 0.67552-0.53479h0.26739z"/>
|
||||||
|
<path d="m8.6404 10.054q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m10.625 10.054q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61922-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513 0 0.66145-0.2111 0.9992-0.19703 0.32369-0.61923 0.32369-0.40812 0-0.61922-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61923 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m4.6617 13.229q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513t-0.2111 0.9992q-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61922 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m6.6461 13.229q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61923 0.33776 0.2111 0.32369 0.2111 0.98513t-0.2111 0.9992q-0.19703 0.32369-0.61923 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61922 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
<path d="m9.7141 14.524h-0.30961v-1.6044q0-0.33776 0.014073-0.6333l-0.47849 0.40813-0.16888-0.2111 0.67552-0.53478h0.26739z"/>
|
||||||
|
<path d="m10.615 13.229q0-0.66145 0.19703-0.98513 0.2111-0.33776 0.61923-0.33776 0.4222 0 0.61922 0.33776 0.2111 0.32369 0.2111 0.98513t-0.2111 0.9992q-0.19703 0.32369-0.61922 0.32369-0.40813 0-0.61923-0.32369-0.19703-0.33776-0.19703-0.9992zm1.3229 0q0-0.59108-0.14073-0.81625-0.12666-0.22517-0.36591-0.22517-0.22517 0-0.36591 0.22517-0.12666 0.2111-0.12666 0.81625 0 0.61922 0.12666 0.8444 0.14073 0.2111 0.36591 0.2111 0.23925 0 0.36591-0.22517 0.14073-0.22517 0.14073-0.83032z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
21
web/img/application-ogg.776137df.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f9d351" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m41.001 20c-0.35521-0.0038-0.82743 0.05144-1.4557 0.14586l-10.455 1.5986c-2.5242 0.5375-2.5155 0.70467-2.5241 2.8372v17.303c-0.10526-0.07374-0.20912-0.1479-0.31794-0.22084v7.49e-4c-0.80196-0.53742-1.6567-0.91988-2.8047-0.91988-1.438 0-2.2955 0.55061-2.8147 1.2759-0.51913 0.72527-0.69129 1.6394-0.69129 2.3461 0 0.85215 0.29095 1.7616 0.92211 2.4546 0.63116 0.69303 1.6015 1.1784 2.9967 1.1784 1.5755 0 2.6837-0.43994 3.3103-1.2991 0.49328-0.67647 0.76605-1.5803 0.86337-2.695v-0.0032c0.01361-0.13524 0.02343-0.27417 0.03213-0.41727 0.01323-0.22035 0.0102-0.63259 0.0102-0.63259v-13.249c0-1.8927-9.1e-5 -2.0056 2.5248-2.4373l7.4349-1.1662c2.5294-0.33094 2.53-0.1008 2.53 1.3206v12.159c-0.10243-0.07178-0.20361-0.144-0.30947-0.21491v7.49e-4c-0.80196-0.53742-1.6563-0.91988-2.8044-0.91988-1.438 0-2.2959 0.55061-2.815 1.2759-0.51913 0.72523-0.69129 1.6394-0.69129 2.3461 0 0.85215 0.29133 1.7616 0.92245 2.4546 0.63116 0.69306 1.6015 1.1787 2.9967 1.1787 1.5755 0 2.6837-0.44032 3.3103-1.2995 0.49328-0.67647 0.76567-1.5799 0.863-2.6947v-0.0035c0.01361-0.13523 0.02343-0.27379 0.03213-0.41693 0.01323-0.22035 0.01058-0.63293 0.01058-0.63293v-18.432c0-1.66-0.01096-2.2097-1.0765-2.2216z" enable-background="new" fill="#fff" stroke-width="3.7796"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
13
web/img/application-pdf.319df017.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#e84f43" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m6.942 9.1745c0.26366-0.51679 0.56331-1.099 0.80315-1.6836l0.09483-0.23076c-0.31327-1.1921-0.50112-2.149-0.3333-2.7677 0.04518-0.16131 0.23201-0.25919 0.43176-0.25919l0.12172 0.0018h0.02234c0.27347-0.0042 0.40223 0.34367 0.41685 0.47892 0.02413 0.22525-0.08008 0.60646-0.08008 0.60646 0-0.15394 6e-3 -0.40268-0.09113-0.61733-0.1131-0.24837-0.22113-0.39674-0.31798-0.42026-0.0489 0.03266-0.09643 0.1003-0.11272 0.23041-0.03372 0.18243-0.04383 0.4127-0.04383 0.5314 0 0.41939 0.08258 0.97295 0.24486 1.5436 0.03061-0.08835 0.05755-0.17324 0.07897-0.25278 0.03328-0.12535 0.24483-0.95628 0.24483-0.95628s-0.05331 1.1061-0.12778 1.4408c-0.01596 0.07072-0.03356 0.14067-0.05189 0.21226 0.2676 0.7477 0.6988 1.415 1.2132 1.8953 0.20281 0.18954 0.45896 0.34238 0.70139 0.48168 0.52942-0.07565 1.0169-0.11138 1.4235-0.10688 0.53953 0.0071 0.93557 0.08691 1.0959 0.24488 0.07852 0.07678 0.11039 0.16951 0.12028 0.27346 0.0023 0.04044-0.01734 0.13546-0.02312 0.15931 0.0058-0.02887 0.0058-0.17083-0.42733-0.30908-0.34111-0.10904-0.9795-0.10565-1.7455-0.02411 0.88603 0.43348 1.7492 0.64886 2.0228 0.51974 0.06688-0.03259 0.148-0.14373 0.148-0.14373s-0.04822 0.21908-0.08284 0.27384c-0.04419 0.0595-0.13086 0.12396-0.21304 0.14569-0.43202 0.11526-1.5566-0.15146-2.537-0.71164-1.0953 0.16131-2.2982 0.45931-3.2625 0.77558-0.94754 1.6606-1.6599 2.4232-2.2394 2.1331l-0.21306-0.10714c-0.08661-0.04954-0.09983-0.17013-0.0798-0.26833 0.06757-0.33057 0.48208-0.82846 1.3147-1.3256 0.08962-0.05423 0.48884-0.26531 0.48884-0.26531s-0.29555 0.28605-0.36479 0.34219c-0.66458 0.5446-1.1551 1.2298-1.1428 1.4954l0.0024 0.02316c0.56454-0.08045 1.4111-1.2295 2.4995-3.3591m0.34492 0.17661c-0.18179 0.34238-0.35948 0.65982-0.52353 0.95129 0.90746-0.3802 1.8841-0.6235 2.8139-0.79634-0.12495-0.08628-0.24624-0.17764-0.36038-0.27422-0.51198-0.43346-0.90232-0.97424-1.1853-1.5433-0.17944 0.48342-0.39281 0.99712-0.7447 1.6626" enable-background="new" fill="#fff" stroke-width=".025916"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
16
web/img/application-pgp-signature.a482d859.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-.35818 .95866)" fill="#57688e" fill-opacity=".471" stroke-width=".427">
|
||||||
|
<path d="m10.692 4.262a1.73 1.73 0 0 0-0.162 0.194l-0.132 0.174-0.047-0.032c-0.066-0.044-0.129-0.054-0.189-0.027-0.04 0.018-0.138 0.142-0.774 0.979a42.55 42.55 0 0 0-0.728 0.97c0 6e-3 0.162 0.133 0.357 0.281l0.357 0.271 0.475-0.625c0.26-0.344 0.478-0.622 0.483-0.618 0.017 0.012 0.046 0.283 0.04 0.37a0.904 0.904 0 0 1-0.04 0.19c-0.033 0.101-0.037 0.108-0.626 0.885-0.325 0.43-0.596 0.795-0.6 0.81-0.015 0.04 0 0.114 0.03 0.157 0.05 0.073 0.175 0.096 0.246 0.045 0.05-0.036 1.215-1.587 1.253-1.668 0.108-0.231 0.132-0.528 0.066-0.82a1.896 1.896 0 0 0-0.095-0.307c-0.01-0.022 7e-3 -0.05 0.116-0.194 0.103-0.138 0.126-0.177 0.128-0.213 5e-3 -0.077-0.018-0.12-0.093-0.178l-0.07-0.055 0.14-0.186c0.115-0.154 0.14-0.194 0.142-0.23 7e-3 -0.153-0.151-0.252-0.277-0.173"/>
|
||||||
|
<path d="m7.483 8.058c-0.837 1.104-0.956 1.267-1.033 1.408-0.154 0.28-0.322 0.707-0.435 1.097-0.072 0.25-0.075 0.228 0.024 0.175 0.308-0.164 0.71-0.43 0.944-0.627 0.23-0.193 0.268-0.242 1.241-1.523l0.936-1.233-0.36-0.273c-0.198-0.15-0.362-0.273-0.365-0.272-3e-3 0-0.431 0.562-0.952 1.248m0.935 1.612a0.631 0.631 0 0 0-0.384 0.3 1.301 1.301 0 0 0-0.075 0.186 1.9 1.9 0 0 1-0.039 0.122c-0.01 0.014-0.288 0.08-0.45 0.108-0.384 0.067-0.488 0.092-0.525 0.127-0.074 0.068-0.017 0.136 0.087 0.106 0.028-9e-3 0.146-0.032 0.26-0.052s0.288-0.055 0.387-0.078a0.971 0.971 0 0 1 0.187-0.034 0.813 0.813 0 0 1-0.04 0.176l-0.046 0.168-0.105 0.045a1.34 1.34 0 0 0-0.182 0.098c-0.13 0.086-0.156 0.194-0.064 0.264 0.05 0.038 0.189 0.037 0.276 0 0.077-0.035 0.12-0.083 0.18-0.21 0.032-0.066 0.056-0.1 0.076-0.105 0.016-6e-3 0.153-0.032 0.306-0.063l0.31-0.064c0.03-7e-3 0.033-6e-3 0.024 0.022a0.735 0.735 0 0 1-0.057 0.109 0.315 0.315 0 0 0-0.047 0.115c0 0.043 0.036 0.086 0.066 0.075a0.08 0.08 0 0 1 0.033-9e-3 0.255 0.255 0 0 0 0.068-0.05c0.057-0.052 0.196-0.304 0.196-0.356 0-0.027 0.02-0.034 0.033-0.013 4e-3 7e-3 0.037 0.02 0.071 0.028 0.05 0.013 0.063 0.022 0.063 0.045 0 0.043 0.071 0.106 0.134 0.118a0.32 0.32 0 0 0 0.178-0.029c0.024-0.01 0.025-7e-3 0.017 0.03a0.897 0.897 0 0 1-0.09 0.158 2.288 2.288 0 0 0-0.232 0.45c-0.023 0.082-0.013 0.143 0.03 0.172 0.038 0.025 0.102 0.014 0.136-0.022a4.34 4.34 0 0 0 0.246-0.52 0.563 0.563 0 0 1 0.156-0.237c0.078-0.082 0.103-0.102 0.086-0.07-0.027 0.06-0.026 0.106 5e-3 0.134 0.065 0.06 0.16 0 0.242-0.148 0.049-0.09 0.085-0.116 0.266-0.201l0.095-0.043-0.01 0.051a1.081 1.081 0 0 1-0.072 0.175c-0.065 0.138-0.078 0.226-0.039 0.3 0.027 0.052 0.055 0.053 0.183 0.01 0.178-0.06 0.41-0.198 0.47-0.277 0.082-0.112 0.107-0.22 0.057-0.255-0.052-0.038-0.08-0.022-0.146 0.074a0.837 0.837 0 0 1-0.3 0.283c-0.05 0.026-0.093 0.043-0.097 0.038a5.018 5.018 0 0 1 0.165-0.445 0.281 0.281 0 0 0 0.023-0.08c0-0.04-0.05-0.084-0.09-0.084a0.958 0.958 0 0 0-0.204 0.084c-0.19 0.095-0.178 0.103-0.13-0.075 0.03-0.11 0.02-0.139-0.046-0.146-0.064-7e-3 -0.09 0.015-0.148 0.119a0.822 0.822 0 0 1-0.183 0.218c-0.127 0.117-0.132 0.121-0.162 0.1-0.045-0.032-0.07-0.027-0.178 0.027-0.106 0.053-0.141 0.06-0.168 0.028-0.022-0.026 0.013-0.04 0.207-0.078 0.187-0.036 0.21-0.046 0.21-0.085 0-0.062-0.05-0.122-0.142-0.163-0.159-0.07-0.177-0.075-0.247-0.057-0.075 0.02-0.186 0.127-0.202 0.194-0.015 0.069-0.062 0.049-0.062-0.028a0.243 0.243 0 0 0-0.062-0.127c-0.047-0.032-0.124 0.038-0.182 0.165l-0.046 0.099-0.102 0.022c-0.134 0.03-0.522 0.107-0.574 0.117-0.034 6e-3 -0.04 6e-3 -0.032-0.017l0.039-0.137c0.043-0.172 0.055-0.195 0.118-0.217a6.14 6.14 0 0 0 0.394-0.169 0.86 0.86 0 0 0 0.14-0.104c0.14-0.131 0.162-0.252 0.062-0.341a0.424 0.424 0 0 0-0.08-0.056 0.59 0.59 0 0 0-0.24-0.014zm0.179 0.191c0.028 0.028 0.028 0.03 3e-3 0.083a0.323 0.323 0 0 1-0.105 0.106c-0.085 0.058-0.35 0.165-0.36 0.146-0.01-0.032 0.075-0.223 0.13-0.284 0.072-0.082 0.093-0.09 0.208-0.084 0.074 7e-3 0.103 0.012 0.124 0.034m-0.908 1.158c-0.018 0.034-0.065 0.06-0.091 0.05-0.03-0.013-0.023-0.03 0.026-0.055 0.064-0.032 0.084-0.03 0.066 7e-3z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
11
web/img/application-pgp.ef9a65ff.svg
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#0093dd" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".2" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="M32 20c-4.432 0-8 3.568-8 8v4h-1v5.687l.406-.53c.582-.781 2.131-1.897 3.344-2.376.639-.252 2.173-.53 3.906-.719C33.267 33.77 38.2 34 40 32v-4c0-4.432-3.568-8-8-8zm.656.969c.38.022.751.066 1.125.156 1.345.323 1.496.634.188.375-2.06-.408-4.794.508-6.469 2.187-.5.503-1.133 1.334-1.406 1.844-.564 1.052-.475.374.125-.906 1.097-2.341 3.783-3.811 6.437-3.656zM32 24c2.216 0 4 1.784 4 4v4h-8v-4c0-2.216 1.784-4 4-4zm9 9.156l-1.063.875c-.577.492-1.48 1.164-2.03 1.5-1.126.688-3.795 1.656-4.595 1.656-.3 0-.476.073-.406.188.134.216 1.731.119 3.406-.219.55-.11 1.827-.61 2.844-1.125L41 35.094v-1.938zm0 2.156l-.563.782c-1.865 2.571-4.903 3.996-9.125 4.25-2.819.169-1.787.49 1.594.5 2.29.003 2.807-.067 4.188-.532.864-.29 1.581-.512 1.625-.468.157.157-1.533 1.556-2.469 2.031-1.793.91-3.014 1.165-6.25 1.312-2.299.105-3.243.224-3.688.47-.566.311-.192.333 7.032.343H41v-8.688z" fill="#fff" overflow="visible"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
13
web/img/application-photoshop.20ed858b.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#262626" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".5" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path class="st1" d="m5.4058 5.8326c0-0.03396 0.06791-0.05821 0.10671-0.05821 0.31044-0.01455 0.77124-0.02425 1.2515-0.02425 1.3436 0 1.8675 0.73729 1.8675 1.6832 0 1.2321-0.89251 1.7608-1.9887 1.7608-0.18432 0-0.24738-0.0097-0.37835-0.0097v1.8626c0 0.0388-0.01455 0.05821-0.05821 0.05821h-0.74214c-0.0388 0-0.05821-0.01455-0.05821-0.05821zm0.86341 2.5757c0.11156 0.0097 0.19888 0.0097 0.3929 0.0097 0.56752 0 1.1011-0.19887 1.1011-0.97012 0-0.61603-0.3832-0.92646-1.0283-0.92646-0.19402 0-0.37835 0.0097-0.46566 0.01455zm4.1715-0.57722c-0.3832 0-0.51416 0.19402-0.51416 0.35409 0 0.17462 0.08731 0.29589 0.60147 0.56267 0.76154 0.36865 0.99922 0.72274 0.99922 1.2418 0 0.7761-0.59177 1.1932-1.3921 1.1932-0.422 0-0.7858-0.08731-0.99437-0.20858-0.03395-0.01455-0.03881-0.0388-0.03881-0.07761v-0.71304c0-0.04851 0.02425-0.06306 0.05821-0.0388 0.30559 0.19888 0.65483 0.28618 0.97497 0.28618 0.3832 0 0.54327-0.16007 0.54327-0.37835 0-0.17462-0.11156-0.32984-0.60148-0.58207-0.68878-0.32984-0.97497-0.66453-0.97497-1.2224 0-0.62573 0.48991-1.1447 1.3388-1.1447 0.41715 0 0.70819 0.06306 0.86826 0.13582 0.03881 0.02425 0.04851 0.06306 0.04851 0.09701v0.66453c0 0.0388-0.02425 0.06306-0.07276 0.04851-0.21343-0.13582-0.52872-0.21828-0.844-0.21828z" enable-background="new" fill="#00c8ff" stroke-width=".048506"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
13
web/img/application-postscript.7a2e596a.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#eb253e" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m9.079 4.806-3.0219 3.5789c0.78705 0.12623 2.1162 1.1213 1.9157 2.4429 0.40838-0.9801-0.34159-2.1756-1.0618-2.6582l2.6359-3.1482c-0.14118-0.10395-0.25253-0.15596-0.46785-0.21536zm-1.0166 0.24952c-0.11754 4e-4 -0.20572 0.01781-0.20108 0.01781l-0.96522 1.1063c-0.54203 0.0297-1.0692 0.06686-1.5816 0.11883-0.36383 0.03712-0.6534 0.32669-0.70538 0.7128-0.07425 0.67568-0.11135 1.3885-0.11135 2.1236 0 0.73508 0.0371 1.4479 0.11135 2.131 0.05198 0.43075 0.34156 0.64607 0.70538 0.7128 1.0098 0.16335 2.4726 0.0074 2.4726-1.381 0-1.2994-2.131-1.8563-2.8587-1.4999l3.3635-4.0169c-0.07796-0.01949-0.15904-0.02544-0.22956-0.02522zm2.2194 1.1389s-1.8932 4.2026-2.0789 4.6333c-0.28215 0.63855-0.66826 1.1063-1.2251 1.2697 0.49005 0.02228 0.98007 0.02966 1.485 0.02966 1.1062 0 2.1607-0.05196 3.1482-0.14849 0.36372-0.03712 0.66083-0.33412 0.70538-0.7128 0.08178-0.6831 0.11876-1.3959 0.11876-2.131 0-0.73508-0.03699-1.4479-0.11876-2.1236-0.04455-0.3861-0.34155-0.67567-0.70538-0.7128-0.43065-0.04455-0.87618-0.08173-1.3292-0.10401z" clip-rule="evenodd" enable-background="new" fill="#fff" fill-rule="evenodd" stroke-width=".066145"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
14
web/img/application-rss_xml.5d705f41.svg
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#fc8f36" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m30.581 3.9566-3.1749-3.1749v1.852c0 0.73288 0.59001 1.3229 1.3229 1.3229z" fill="#fff" fill-rule="evenodd" opacity=".35" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m3.7381 13.706c0-0.163 0.056-0.3 0.169-0.41a0.56 0.56 0 0 1 0.411-0.168c0.159 0 0.293 0.056 0.403 0.168 0.112 0.11 0.168 0.247 0.168 0.41a0.554 0.554 0 0 1-0.168 0.406 0.548 0.548 0 0 1-0.403 0.165 0.565 0.565 0 0 1-0.411-0.165 0.548 0.548 0 0 1-0.169-0.406m-0.033-2.61v0.962c1.228 0 2.225 0.999 2.225 2.229h0.964c0-1.762-1.43-3.19-3.19-3.19zm1e-3 -2.102v1.063a4.229 4.229 0 0 1 4.224 4.23h1.066a5.294 5.294 0 0 0-5.29-5.293z" fill="#fff" font-size="13.59" font-weight="700"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
web/img/application-sql.e76bf92b.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<g fill="#888">
|
||||||
|
<rect x="18" y="24" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
|
||||||
|
<rect x="18" y="31" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
|
||||||
|
<rect x="18" y="38" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
|
||||||
|
<rect x="18" y="45" width="28" height="3" rx="0" ry="0" style="paint-order:markers stroke fill"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1 KiB |
19
web/img/application-vnd.appimage.50730ff3.svg
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#55c1ec" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(.90322 0 0 .90322 .81896 -.26851)" fill="#fff">
|
||||||
|
<path d="m8.467 6.238a3.44 3.44 0 0 0-3.44 3.44 3.44 3.44 0 0 0 3.44 3.439 3.44 3.44 0 0 0 3.44-3.44 3.44 3.44 0 0 0-3.44-3.44zm0 1.393a2.046 2.046 0 0 1 2.046 2.046 2.046 2.046 0 0 1-2.046 2.045 2.046 2.046 0 0 1-2.046-2.045 2.046 2.046 0 0 1 2.046-2.046z" opacity=".15" style="paint-order:stroke markers fill"/>
|
||||||
|
<g transform="translate(-4.2406e-8,-280.07)" style="paint-order:stroke markers fill">
|
||||||
|
<path d="m8.467 286.83a2.91 2.91 0 0 0-2.91 2.91 2.91 2.91 0 0 0 2.91 2.911 2.91 2.91 0 0 0 2.91-2.91 2.91 2.91 0 0 0-2.91-2.91zm0 1.323a1.587 1.587 0 0 1 1.587 1.588 1.587 1.587 0 0 1-1.587 1.587 1.587 1.587 0 0 1-1.588-1.587 1.587 1.587 0 0 1 1.588-1.588z"/>
|
||||||
|
<path d="m7.938 285.64h1.058v1.852h-1.058zm0 6.35h1.058v1.852h-1.058zm4.63-2.778v1.058h-1.852v-1.058zm-6.35 0v1.058h-1.852v-1.058zm5.522 3.055-0.747 0.748-1.31-1.31 0.748-0.748zm-4.49-4.49-0.747 0.748-1.31-1.31 0.748-0.748zm-1.309 5.238-0.748-0.748 1.31-1.31 0.748 0.748zm4.49-4.49-0.748-0.748 1.31-1.31 0.748 0.748z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
13
web/img/application-vnd.flatpak.8a781de6.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#40ace8" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m8.4665 4.3296-3.7041 1.9945v4.2847l3.7041 1.9945 3.7041-1.9945v-4.2847zm0 0.60098 2.8816 1.5516-2.8816 1.5516-2.8816-1.5516z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
21
web/img/application-vnd.flatpak.ref.26e20d79.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4d88cf" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m31.934 16-13.88 8.012-0.054 15.976 14 8.012 14-7.998-0.06-15.99-14.007-8.012zm0 1.27v11.568l1.63 0.974-1.63 0.94-11.748-6.787zm13.066 7.562v14.633l-13 7.443v-14.635z" color="#000000" fill="#fff" overflow="visible" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
13
web/img/application-vnd.iccprofile.0c017bee.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#fad65c" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m32 21c-1.876 7-7 11.134-7 15s3.134 7 7 7 7-3.134 7-7-5.124-8-7-15m4.8125 11.428c0.7688 1.0325 1.1851 2.285 1.1875 3.5723 0 3.3137-2.6863 6-6 6-1.2849-0.0025-2.535-0.41738-3.5664-1.1836 0.51355 0.12001 1.039 0.1816 1.5664 0.18359 3.866 0 7-3.134 7-7-0.0028-0.52949-0.06574-1.057-0.1875-1.5723" color="#4d4d4d" color-rendering="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" opacity=".9" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
29
web/img/application-vnd.kde.bluedevil-sendfile.a912311c.svg
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#567dd2" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m6.9643 6.9697 2.9935 2.9935-1.4968 1.4136v-5.8207l1.4968 1.4136-2.9935 2.6609" fill="none" stroke="#fff" stroke-linecap="square" stroke-width=".33261"/>
|
||||||
|
<g fill="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".52916">
|
||||||
|
<circle cx="5.2916" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
|
||||||
|
<circle cx="6.3499" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
|
||||||
|
<circle cx="10.583" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
|
||||||
|
<circle cx="11.641" cy="8.4665" r=".26458" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
13
web/img/application-vnd.ms-access.785a7627.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#c92429" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m8.6318 4.7624c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm1.5215 1.0251c-0.29991 0.0029-0.59981 0.02779-0.89515 0.06847v1.0954c0.82989 0.12523 1.6951 0.09973 2.495-0.17014 0.16933-0.07408 0.38355-0.1667 0.41883-0.37219-0.04762-0.25135-0.32974-0.34576-0.54052-0.42426-0.47844-0.14607-0.97833-0.20218-1.4782-0.19727zm2.0179 1.0475c-0.31397 0.25223-0.71884 0.33605-1.1069 0.39338-0.59883 0.07849-1.2074 0.07934-1.8062 0.0035v1.1429c0.74788 0.09613 1.516 0.09183 2.2524-0.08191 0.22577-0.06438 0.47632-0.1315 0.63419-0.31935 0.05644-0.3757 0.0071-0.75931 0.02648-1.1385zm-5.0809 0.25747c0.29544 0.98776 0.57597 1.9809 0.86789 2.9695-0.20372-0.01323-0.40755-0.02825-0.60951-0.04677-0.0538-0.22048-0.11103-0.44094-0.16924-0.66054-0.27075-8.75e-4 -0.54156-0.0098-0.81143-0.023-0.05203 0.20902-0.10498 0.41714-0.15877 0.62527-0.17286-0.01323-0.34478-0.02548-0.51675-0.03695 0.25752-0.92867 0.52557-1.8538 0.78133-2.7825 0.20549-0.01499 0.41012-0.02921 0.61649-0.04509zm-0.33163 0.52838c-0.05909 0.41892-0.19139 0.82191-0.28047 1.2347 0.19402 0.0017 0.38812 0.0026 0.58303 0.0035-0.10054-0.41274-0.22319-0.82011-0.30256-1.2381zm5.4125 0.62527c-0.3122 0.25135-0.71442 0.33515-1.1016 0.39247-0.60059 0.07938-1.2109 0.08112-1.8115 0.0044v1.1438c0.74964 0.09525 1.5204 0.09089 2.2586-0.08462 0.22489-0.06438 0.47533-0.1314 0.62967-0.32013 0.05203-0.3757 0.0072-0.75761 0.02481-1.136zm0 1.411c-0.31397 0.25135-0.71703 0.33603-1.1051 0.39247-0.59971 0.07938-1.2083 0.08112-1.808 0.0044 0 0.38011 0.0027 0.75933-0.0035 1.1394 0.6297 0.09084 1.2726 0.08915 1.9014-7e-3 0.34307-0.06967 0.73909-0.11994 0.98868-0.39157 0.05556-0.3757 8e-3 -0.75942 0.02648-1.1378z" enable-background="new" fill="#fff" stroke-width=".088193"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
32
web/img/application-vnd.ms-cab-compressed.011f2e86.svg
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#eca973" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-26.734 1.1705)" fill="#fff" opacity=".75">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
<path d="m3.7041 12.171v0.26458h3.1749v-0.26458zm0 0.52916v0.26458h2.6458v-0.26458zm0 0.52916v0.26458h3.1749v-0.26458zm0 0.52916v0.26458h2.1166v-0.26458z" color="#000000" fill="#d78a4d"/>
|
||||||
|
<g transform="matrix(1.25 0 0 1.25 -.92603 -2.5796)" fill="#d78a4d" stroke-width=".034981" aria-label="CAB">
|
||||||
|
<path d="m4.5267 10.416v0.14553q-0.069689-0.06491-0.14894-0.09702-0.078571-0.03211-0.16739-0.03211-0.1749 0-0.26782 0.10727-0.092918 0.10658-0.092918 0.30882 0 0.20155 0.092918 0.30882 0.092918 0.10658 0.26782 0.10658 0.088819 0 0.16739-0.03211 0.079254-0.03211 0.14894-0.09702v0.14416q-0.072422 0.04919-0.15373 0.07379-0.08062 0.0246-0.17081 0.0246-0.23161 0-0.36484-0.14143-0.13323-0.14211-0.13323-0.38739 0-0.24596 0.13323-0.38739 0.13323-0.14211 0.36484-0.14211 0.091552 0 0.17217 0.0246 0.081304 0.02391 0.15236 0.07242z"/>
|
||||||
|
<path d="m5.0808 10.473-0.1872 0.50763h0.37509zm-0.077887-0.13596h0.15646l0.38875 1.0201h-0.14348l-0.092918-0.26167h-0.45981l-0.092918 0.26167h-0.14553z"/>
|
||||||
|
<path d="m5.8351 10.87v0.37372h0.22136q0.11137 0 0.16466-0.04578 0.053975-0.04646 0.053975-0.14143 0-0.09565-0.053975-0.14074-0.053291-0.04578-0.16466-0.04578zm0-0.4195v0.30745h0.20428q0.10112 0 0.15031-0.03758 0.049875-0.03826 0.049875-0.11615 0-0.0772-0.049875-0.11546-0.049192-0.03826-0.15031-0.03826zm-0.13801-0.11342h0.35254q0.15782 0 0.24323 0.06559 0.085403 0.06559 0.085403 0.18652 0 0.0936-0.043726 0.14894-0.043726 0.05534-0.12845 0.06901 0.1018 0.02186 0.15782 0.09155 0.056707 0.069 0.056707 0.17286 0 0.13664-0.092918 0.21112-0.092918 0.07447-0.26441 0.07447h-0.36621z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
16
web/img/application-vnd.ms-excel.ec28c59f.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#008a50" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-20.433 -.26906)" fill="#fff" stroke-width=".088193">
|
||||||
|
<path d="m29.199 5.0315c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.4e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-0.86117 2.3092c-0.22469 0.46033-0.45024 0.9207-0.67914 1.3793 0.23143 0.47127 0.46794 0.93908 0.7002 1.4104-0.20281-0.01178-0.40476-0.02445-0.60757-0.03876-0.14306-0.35093-0.31732-0.68998-0.41999-1.0569-0.11445 0.34167-0.27773 0.66395-0.40901 0.99889-0.1843-0.0025-0.36863-0.01013-0.55293-0.0177 0.21628-0.4233 0.425-0.85005 0.64801-1.2708-0.18935-0.4334-0.39722-0.8583-0.59246-1.2892 0.18514-0.01094 0.37037-0.02181 0.55551-0.03191 0.12539 0.32905 0.26248 0.6538 0.36599 0.99126 0.11108-0.35766 0.27687-0.69422 0.41909-1.0401 0.19019-0.01346 0.38127-0.02524 0.5723-0.03449z" enable-background="new"/>
|
||||||
|
<path d="m29.825 6.0898v0.52916h0.79373v0.52916h-0.79373v0.26458h0.79373v0.53006h-0.79373v0.26367h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.52916h2.6458v-5.5561zm1.0583 0.52916h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.53006h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583z" enable-background="new"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2 KiB |
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3f755a" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796,0,0,3.7796,-77.229,-1.0169)" fill="#fff" stroke-width=".088193">
|
||||||
|
<path d="m29.199 5.0315c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.4e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-0.86117 2.3092c-0.22469 0.46033-0.45024 0.9207-0.67914 1.3793 0.23143 0.47127 0.46794 0.93908 0.7002 1.4104-0.20281-0.01178-0.40476-0.02445-0.60757-0.03876-0.14306-0.35093-0.31732-0.68998-0.41999-1.0569-0.11445 0.34167-0.27773 0.66395-0.40901 0.99889-0.1843-0.0025-0.36863-0.01013-0.55293-0.0177 0.21628-0.4233 0.425-0.85005 0.64801-1.2708-0.18935-0.4334-0.39722-0.8583-0.59246-1.2892 0.18514-0.01094 0.37037-0.02181 0.55551-0.03191 0.12539 0.32905 0.26248 0.6538 0.36599 0.99126 0.11108-0.35766 0.27687-0.69422 0.41909-1.0401 0.19019-0.01346 0.38127-0.02524 0.5723-0.03449z" enable-background="new"/>
|
||||||
|
<path d="m29.825 6.0898v0.52916h0.79373v0.52916h-0.79373v0.26458h0.79373v0.53006h-0.79373v0.26367h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.26458h0.79373v0.52916h-0.79373v0.52916h2.6458v-5.5561zm1.0583 0.52916h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.53006h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583zm0 0.79374h1.0583v0.52916h-1.0583zm0 0.79373h1.0583v0.52916h-1.0583z" enable-background="new"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2 KiB |
24
web/img/application-vnd.ms-htmlhelp.c8fb9bfd.svg
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3fa7d7" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m8.4365 4.4978a3.9687 3.9687 0 0 0-3.9387 3.9687 3.9687 3.9687 0 0 0 3.9687 3.9687 3.9687 3.9687 0 0 0 3.9687-3.9687 3.9687 3.9687 0 0 0-3.9687-3.9687 3.9687 3.9687 0 0 0-0.029972 0zm0.027388 1.5875a2.3812 2.3812 0 0 1 0.00258 0 2.3812 2.3812 0 0 1 2.3812 2.3812 2.3812 2.3812 0 0 1-2.3812 2.3812 2.3812 2.3812 0 0 1-2.3812-2.3812 2.3812 2.3812 0 0 1 2.3786-2.3812z" fill="#ff6e65" stroke-linecap="round" stroke-linejoin="round" stroke-width=".61164" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m4.862 6.821a3.948 3.948 0 0 0-0.364 1.645c0 0.587 0.134 1.144 0.364 1.646l1.389-0.794a2.378 2.378 0 0 1-0.166-0.852c0-0.3 0.064-0.587 0.166-0.851m-1.39-0.794m7.211 0-1.39 0.794c0.102 0.264 0.166 0.55 0.166 0.851 0 0.301-0.064 0.587-0.165 0.852l1.389 0.794c0.229-0.502 0.363-1.059 0.363-1.646 0-0.587-0.134-1.144-0.363-1.645m-4.457 3.862-0.794 1.388c0.502 0.23 1.059 0.364 1.646 0.364 0.587 0 1.144-0.134 1.645-0.364l-0.794-1.389c-0.264 0.102-0.55 0.166-0.851 0.166-0.301 0-0.587-0.064-0.852-0.166m0.852-6.184c-0.587 0-1.144 0.134-1.646 0.363l0.794 1.39c0.265-0.102 0.55-0.166 0.852-0.166 0.3 0 0.587 0.064 0.851 0.165l0.794-1.389a3.948 3.948 0 0 0-1.645-0.363" fill="#fff"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
13
web/img/application-vnd.ms-infopath.c0a76ad3.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8e50c7" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m38 18-4 4.5-1.26 1.5h3.26v3h-12v13h-3.238l1.238 1.5 4 4.5 4-4.5 1.26-1.5h-3.26v-3h12v-13h3.238l-1.238-1.5zm-10 13h8v2h-8z" color="#4d4d4d" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 982 B |
16
web/img/application-vnd.ms-powerpoint.b1a13336.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#e34e2b" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-17.672 1.3286)" fill="#fff" stroke-width=".088193">
|
||||||
|
<path d="m26.438 3.4338c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-1.9413 2.3328c0.25455-0.0054 0.4988 0.03123 0.69723 0.21071 0.38011 0.46125 0.27959 1.3096-0.28396 1.5857-0.2002 0.1023-0.42953 0.08832-0.64736 0.08126-8.75e-4 0.34483-0.0018 0.68958-9e-4 1.0344-0.17462-0.01499-0.35001-0.02994-0.52463-0.04405-0.0079-0.9419-0.0098-1.8411 7.75e-4 -2.783 0.24834-0.03094 0.50431-0.07957 0.75885-0.08497zm-0.02933 0.51107c-0.06946-0.0018-0.14052 0.0045-0.20567 0.0075-0.0026 0.29633-0.0043 0.59169 0.01421 0.88714 0.1755-0.02117 0.40304-0.0035 0.50358-0.18513 0.08378-0.17815 0.08904-0.40578-0.0115-0.57864-0.07331-0.10197-0.18485-0.12777-0.30062-0.13087z" enable-background="new"/>
|
||||||
|
<path d="m27.065 4.4921v0.87939c0.124-0.02662 0.25872-0.0767 0.39674-0.085v1.19h1.1827c-0.04202 0.36101-0.20295 0.73206-0.52128 0.92073-0.3122 0.2099-0.70894 0.2126-1.0582 0.10413 8.75e-4 0.17286-8.75e-4 0.52205 0 0.6949h2.1165v0.26458h-2.1165v0.52916h2.1165v0.26458h-2.1165v0.79374h2.6457v-5.5561zm0.66132 0.63406c0.56254 0.05826 1.0277 0.52454 1.0889 1.0857h-1.0889z" enable-background="new"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#813d17" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -66.793 5.0216)" fill="#fff" stroke-width=".088193">
|
||||||
|
<path d="m26.438 3.4338c-1.2902 0.22976-2.5811 0.53459-3.8713 0.76014 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5676 0.5245 3.8485 0.75847h0.38446v-7.4082zm-1.9413 2.3328c0.25455-0.0054 0.4988 0.03123 0.69723 0.21071 0.38011 0.46125 0.27959 1.3096-0.28396 1.5857-0.2002 0.1023-0.42953 0.08832-0.64736 0.08126-8.75e-4 0.34483-0.0018 0.68958-9e-4 1.0344-0.17462-0.01499-0.35001-0.02994-0.52463-0.04405-0.0079-0.9419-0.0098-1.8411 7.75e-4 -2.783 0.24834-0.03094 0.50431-0.07957 0.75885-0.08497zm-0.02933 0.51107c-0.06946-0.0018-0.14052 0.0045-0.20567 0.0075-0.0026 0.29633-0.0043 0.59169 0.01421 0.88714 0.1755-0.02117 0.40304-0.0035 0.50358-0.18513 0.08378-0.17815 0.08904-0.40578-0.0115-0.57864-0.07331-0.10197-0.18485-0.12777-0.30062-0.13087z" enable-background="new"/>
|
||||||
|
<path d="m27.065 4.4921v0.87939c0.124-0.02662 0.25872-0.0767 0.39674-0.085v1.19h1.1827c-0.04202 0.36101-0.20295 0.73206-0.52128 0.92073-0.3122 0.2099-0.70894 0.2126-1.0582 0.10413 8.75e-4 0.17286-8.75e-4 0.52205 0 0.6949h2.1165v0.26458h-2.1165v0.52916h2.1165v0.26458h-2.1165v0.79374h2.6457v-5.5561zm0.66132 0.63406c0.56254 0.05826 1.0277 0.52454 1.0889 1.0857h-1.0889z" enable-background="new"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
13
web/img/application-vnd.ms-publisher.32dbb1c3.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#56cc56" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m35 21c-0.554 0-1 0.446-1 1v2h-12c-0.554 0-1 0.446-1 1v17c0 0.554 0.446 1 1 1h17c0.554 0 1-0.446 1-1v-4h2c0.554 0 1-0.446 1-1v-15c0-0.554-0.446-1-1-1h-7zm0 1h7v15h-2v-12c0-0.554-0.446-1-1-1-1.556-0.611-4.061-0.985-4-2zm-12 5h15v4h-15v-4zm0 6h7v1h-7v-1zm8 0h7v1h-7v-1zm-8 3h7v1h-7v-1zm8 0h7v1h-7v-1zm-8 3h7v1h-7v-1zm8 0h7v1h-7v-1z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".9" shape-rendering="auto" solid-color="#000000" stroke-width="2" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
16
web/img/application-vnd.ms-word.0209c533.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3374d4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-20.002 1.3094)" fill="#fff" stroke-width=".088193">
|
||||||
|
<path d="m28.768 3.453c-1.2902 0.22976-2.5811 0.53461-3.8713 0.76016 0 1.9626-8.5e-4 3.9261 0 5.8896 1.2835 0.22471 2.5677 0.52447 3.8486 0.75844h0.38441v-7.4082zm-0.49905 2.3996-0.5944 2.4951-0.48788-0.03847c-0.11193-0.55714-0.24233-1.1109-0.34248-1.6706-0.09847 0.54368-0.2265 1.0823-0.33928 1.6226-0.16159-0.0084-0.32392-0.01852-0.48635-0.02946-0.13971-0.74062-0.30388-1.4762-0.43432-2.2185 0.14392-0.0067 0.28868-0.01258 0.4326-0.01763 0.08668 0.53611 0.18512 1.0697 0.26087 1.6066 0.11867-0.55041 0.23994-1.1008 0.35777-1.6512 0.15991-0.0093 0.31979-0.01599 0.47969-0.02441 0.11193 0.56809 0.22634 1.1352 0.34753 1.7008 0.0951-0.58408 0.20033-1.1664 0.30217-1.7496 0.16832-0.0059 0.33662-0.01517 0.5041-0.02527z" enable-background="new"/>
|
||||||
|
<path d="m29.395 4.5113h2.6458v5.2916h-2.6458v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52916h2.1166v-0.26458h-2.1166v-0.52823h2.1166v-0.2655h-2.1166v-0.52916h2.1166v-0.26458h-2.1166z" enable-background="new"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m19 16h6v32h-6z" color="#bebebe" fill="#68b723" overflow="visible"/>
|
||||||
|
<path d="m29 32h6v16h-6z" fill="#c6262e" overflow="visible"/>
|
||||||
|
<path d="m39 24h6v24h-6z" color="#bebebe" fill="#3689e6" overflow="visible"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 834 B |
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4d4d4d" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".35" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m40 24.505-8 4e-3 -4.441 7.691-1.555-2.695h-2v1h1.428l2.133 3.693 5.02-8.693h6.42v1h1zm-5 3c-1.662 0-3 1.338-3 3s1.338 3 3 3c0.773 0 1.469-0.298 2-0.775v0.775h1v-6h-1v0.775c-0.531-0.477-1.227-0.775-2-0.775m0 1c1.108 0 2 0.892 2 2s-0.892 2-2 2-2-0.892-2-2 0.892-2 2-2m-11.99 6.99c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h17.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5zm8 3c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h1.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5z" color="#000000" color-rendering="auto" fill="#afafaf" image-rendering="auto" shape-rendering="auto"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#808080" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m40 24.505-8 4e-3 -4.441 7.691-1.555-2.695h-2v1h1.428l2.133 3.693 5.02-8.693h6.42v1h1zm-5 3c-1.662 0-3 1.338-3 3s1.338 3 3 3c0.773 0 1.469-0.298 2-0.775v0.775h1v-6h-1v0.775c-0.531-0.477-1.227-0.775-2-0.775m0 1c1.108 0 2 0.892 2 2s-0.892 2-2 2-2-0.892-2-2 0.892-2 2-2m-11.99 6.99c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h17.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5zm8 3c-6e-3 0-0.01 0.223-0.01 0.5s4e-3 0.5 0.01 0.5h1.98c6e-3 0 0.01-0.223 0.01-0.5s-4e-3 -0.5-0.01-0.5z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#84603e" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m24 28.667c-2.9454 0-5.333 2.3877-5.333 5.3334 0 2.9455 2.3878 5.3334 5.333 5.3334 2.9454 0 5.333-2.3877 5.333-5.3334h-5.333zm8.0003 1.333v2h13v-2zm0.14351 6.0001-0.14351 2h13v-2zm-12.143 7.9999v1.9999h19.999l5.07e-4 -1.9999z" color="#000000" enable-background="new" fill="#fff" stroke-width="3.7796" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#396939" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m20 50h24v-20h-24zm2-18h4v4h-4zm6.0001 0h14v4h-14zm-6.0001 6.0001h4v4h-4zm6.0001 0h14v4h-14zm-6.0001 6.0001h4v4h-4zm6.0001 0h14v4h-14z" enable-background="new" fill="#fff" stroke-width="3.7796"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 874 B |
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#35677f" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m17 48.999v-2h20v2zm0-6.0001v-2h28v2zm0-6.0001v-2h28v2zm0-6.0001v-2h28v2z" enable-background="new" fill="#fff" stroke-width="3.7796"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 813 B |
After Width: | Height: | Size: 14 KiB |
13
web/img/application-vnd.snap.72d9809b.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m4.4314 4.6853 4.3741 4.3741v-2.7971zm5.0362 1.5966 3.034 1.3638-0.6679-1.3638zm-0.39338 0.09999v2.5419l1.8243-1.7127zm-1.3036 2.0513-2.0213 3.8145 2.9321-2.9322z" enable-background="new" fill="#c8c4b7" stroke-width=".13229"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 917 B |
13
web/img/application-vnd.visio.90d89058.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#3d58a5" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m22 21c-0.554 0-1 0.446-1 1v20c0 0.554 0.446 1 1 1h20c0.554 0 1-0.446 1-1v-20c0-0.554-0.446-1-1-1h-20zm15.5 2.5 3 2.9961-2.5 2.5v9h-3v2h-5v-2h-4v-9.0508c-1.1624-0.23728-1.998-1.2589-2-2.4453 0-1.3807 1.1193-2.5 2.5-2.5 1.1879 1.38e-4 2.2116 0.83613 2.4492 2h6.0508l2.5-2.5zm-8.5605 3.5c-0.1999 0.9805-0.96522 1.7474-1.9453 1.9492v8.0508h3v-2h5v2h2v-8l-2-2h-6.0488-0.005859z" fill="#fff" opacity=".75"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
16
web/img/application-x-ace.03fa0685.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#415aa2" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
23
web/img/application-x-addon.4a1bb379.svg
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#71cd4f" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m7.7527 4.4038c-0.48833-0.03224-1.0378 0.31461-1.0183 0.84901-0.05775 0.31806 0.24896 0.55539 0.23561 0.84243-0.18067 0.0792-0.31804 0.0792-0.44525 0.0792h-2.1166c0 0.61015 1e-6 1.4849 1e-6 2.095 0.16525 0.35983 0.50265-0.15404 0.76917-0.09846 0.50926-0.1066 0.96764 0.3398 0.99203 0.83311 0.06771 0.47064-0.11443 1.0824-0.64776 1.1771-0.28767 0.04857-0.59728-0.0047-0.83352-0.18047-0.28447-0.17171-0.30258 0.20506-0.27993 0.38962v2.134h2.4342c0.35983-0.16525-0.15404-0.50265-0.09846-0.76917-0.10654-0.50914 0.33976-0.96791 0.83311-0.99209 0.47065-0.06757 1.0824 0.11445 1.1771 0.64782 0.04857 0.28767-0.0047 0.59728-0.18047 0.83352-0.17171 0.28447 0.20506 0.30258 0.38962 0.27993l1.7948 1e-6v-2.4231c0.16921-0.36295 0.50633 0.16805 0.78146 0.08895 0.44172 0.08689 0.88936-0.2288 0.956-0.67343 0.11271-0.49203-0.02706-1.1447-0.56572-1.3173-0.34122-0.11621-0.68122 0.03221-0.96926 0.20758-0.26514 0.03742-0.19416-0.28348-0.20248-0.4489 0-0.50636-1e-6 -1.2773-1e-6 -1.7837l-1.852-1e-6h-0.23185c-0.36296-0.1692 0.16805-0.50633 0.08895-0.78146 0.08689-0.44172-0.2288-0.88936-0.67342-0.956-0.1106-0.02387-0.22396-0.03314-0.33697-0.03317z" color="#000000" fill="#fff"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
28
web/img/application-x-apple.500bd1f9.svg
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#F4F4F4;}
|
||||||
|
.st1{opacity:0.1;fill-rule:evenodd;clip-rule:evenodd;fill:url(#SVGID_1_);enable-background:new ;}
|
||||||
|
.st2{fill:#999999;}
|
||||||
|
</style>
|
||||||
|
<g id="图层_1">
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<path class="st0" d="M49.1,15.1h143.6c10.4,0,18.9,8.5,18.9,18.9v173.9c0,10.4-8.5,18.9-18.9,18.9H49.1
|
||||||
|
c-10.4,0-18.9-8.5-18.9-18.9V34C30.2,23.6,38.7,15.1,49.1,15.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-957.3084" y1="2609.5137" x2="-955.1654" y2="2607.3706" gradientTransform="matrix(2.3333 0 0 -2.3333 2411.3325 6281.5693)">
|
||||||
|
<stop offset="0" style="stop-color:#000000"/>
|
||||||
|
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path class="st1" d="M211.7,173.9l-52.9,52.9h34c10.5,0,18.9-8.4,18.9-18.9V173.9z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="图层_2">
|
||||||
|
<path class="st2" d="M41.1,31.4c0-4.2,3.4-6.2,3.6-6.3c-2-2.9-5-3.3-6.1-3.3c-2.6-0.3-5.1,1.5-6.4,1.5c-1.3,0-3.3-1.5-5.5-1.4
|
||||||
|
c-2.8,0-5.4,1.6-6.9,4.2c-2.9,5.1-0.8,12.6,2.1,16.8c1.4,2,3.1,4.3,5.3,4.2c2.1-0.1,2.9-1.4,5.4-1.4c2.5,0,3.3,1.4,5.5,1.3
|
||||||
|
c2.3,0,3.7-2.1,5.1-4.1c1.6-2.3,2.3-4.6,2.3-4.7C45.5,38.1,41.1,36.4,41.1,31.4L41.1,31.4z M36.9,19c1.2-1.4,1.9-3.4,1.7-5.3
|
||||||
|
c-1.7,0.1-3.7,1.1-4.9,2.5c-1.1,1.2-2,3.2-1.8,5.1C33.8,21.5,35.7,20.5,36.9,19L36.9,19z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
16
web/img/application-x-ar.3c76d5a5.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#2bacf2" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
16
web/img/application-x-arc.c4348636.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#87d07d" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
26
web/img/application-x-archive.3ecaf965.svg
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#deaa87" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-26.734 1.1705)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
16
web/img/application-x-arj.020953b3.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f38144" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
23
web/img/application-x-bittorrent.0e44cdf9.svg
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(.61734 0 0 .61734 -18.168 -19.05)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="2.1166" y="1.0583" width="12.7" height="14.816" ry="1.3229" fill="#8f76e4" stroke-width=".26458" style="paint-order:stroke fill markers"/>
|
||||||
|
<g transform="matrix(.066145 0 0 .066145 -1.0583 -1.852)" enable-background="new" fill="none" stroke="#8f76e4" stroke-width="8">
|
||||||
|
<path transform="matrix(4 0 0 4 16 27.999)" d="m34 17c-5.3575 0-10.312 2.8604-12.99 7.5-2.6786 4.6396-2.6786 10.36 0 15 2.6786 4.6396 7.633 7.5 12.99 7.5h22v-2h-22c-4.6458 0-8.9349-2.4765-11.258-6.5-2.3229-4.0235-2.3229-8.9765 0-13 2.3229-4.0235 6.6117-6.5 11.258-6.5v-2zm-0.58008 4.0156c-2.665 0.14145-5.2478 1.2484-7.209 3.2148-3.138 3.1463-4.0744 7.8801-2.3711 11.984 1.7032 4.1042 5.7165 6.7852 10.16 6.7852h22v-2h-22c-3.6409 0-6.9189-2.1879-8.3145-5.5508-1.3956-3.3628-0.62968-7.2268 1.9414-9.8047 2.5711-2.5779 6.4344-3.3534 9.8008-1.9668l0.76172-1.8496c-1.5407-0.63463-3.1705-0.89737-4.7695-0.8125zm0.36719 3.9902c-1.1298 0.033356-2.2597 0.33851-3.2871 0.93164-2.7398 1.5817-4.0806 4.8194-3.2617 7.875 0.81876 3.0556 3.5984 5.1875 6.7617 5.1875h22v-2h-22c-2.2677 0-4.2431-1.5146-4.8301-3.7051-0.58708-2.1905 0.36586-4.491 2.3301-5.625 1.9643-1.134 4.4315-0.80873 6.0352 0.79492l1.4141-1.4141c-1.398-1.398-3.2791-2.1005-5.1621-2.0449z" color="#000000" color-rendering="auto" dominant-baseline="auto" enable-background="accumulate" fill="#fff" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="none" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
|
||||||
|
</g>
|
||||||
|
<path d="m14.816 12.171-3.7041 3.7041h2.3812c0.73288 0 1.3229-0.59001 1.3229-1.3229z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="2.3333" style="paint-order:stroke fill markers"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
21
web/img/application-x-blender.1a5d4c35.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f37329" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m32 15.719-15 7.5723v17.225l15 7.7656 15-7.7656v-17.225zm0 2.2402 11.799 5.957-11.797 6.0684-11.781-6.0801zm-13 7.5664 12 6.1934v13.793l-12-6.2129zm26 0.02148v13.752l-12 6.2129v-13.791z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
16
web/img/application-x-bzdvi.ddea8a90.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8175c0" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
16
web/img/application-x-bzip-compressed-tar.b40885da.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#a469d8" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
16
web/img/application-x-bzip.821da79c.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#5c3183" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
25
web/img/application-x-cd-image.c1c970b2.svg
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#666" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m12.7 8.4665a4.2223 4.2223 0 0 0-4.2332-4.2332 4.2223 4.2223 0 0 0-4.2332 4.2332 4.2223 4.2223 0 0 0 4.2332 4.2332 4.2223 4.2223 0 0 0 4.2332-4.2332zm-2.6848 0c0 0.85305-0.679 1.5492-1.5484 1.5492a1.5414 1.5414 0 0 1-1.55-1.5492c0-0.85227 0.62827-1.5484 1.5492-1.5484s1.5484 0.71334 1.5484 1.5484z" fill="#fff" opacity=".75"/>
|
||||||
|
<path d="m8.4664 6.349a2.1175 2.1175 0 1 0 1e-3 4.235 2.1175 2.1175 0 0 0-1e-3 -4.235zm0 1.058a1.059 1.059 0 1 1-1e-3 2.118 1.059 1.059 0 0 1 0-2.118z" fill="#fff" opacity=".5" overflow="visible"/>
|
||||||
|
<path d="m8.4664 6.4815a1.985 1.985 0 1 0 1e-3 3.97 1.985 1.985 0 0 0-1e-3 -3.97zm0 0.992a0.993 0.993 0 1 1-1e-3 1.985 0.993 0.993 0 0 1 0-1.985z" fill="none" overflow="visible"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
17
web/img/application-x-chm.331e830f.svg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#59dd59" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(.25 0 0 .25 -5.9994 -6.9998)" enable-background="new" fill="#fff" shape-rendering="auto">
|
||||||
|
<path d="m152 96c-33.104 0-60 26.898-60 60s26.896 60 60 60 60-26.898 60-60-26.896-60-60-60zm2e-3 6a54 54 0 0 1 54 54 54 54 0 0 1-54 54 54 54 0 0 1-54-54 54 54 0 0 1 54-54z" color="#000000" color-rendering="auto" enable-background="accumulate" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
|
||||||
|
<path d="m148 148v40l8 1e-5v-40z" color="#000000" color-rendering="auto" enable-background="accumulate" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
|
||||||
|
<path d="m152 126c-3.3137 1e-5 -6 2.6863-6 6 1e-5 3.3137 2.6863 6 6 6 3.3137-1e-5 6-2.6863 6-6-1e-5 -3.3137-2.6863-6-6-6z" color="#000000" color-rendering="auto" enable-background="accumulate" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2 KiB |
21
web/img/application-x-clementine.904d933a.svg
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#ff8830" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m16.178 25.295a22.066 22.331 0 0 0-8.1777 1.5898v3.1836c2.4265-1.2598 4.9643-1.6913 8.1777-1.7129 0.29464-0.0032 0.5745 0.01829 0.86914 0.03125-0.04164 5.338-0.86591 16.338-3.8027 20.354-4.2467-11.062-3.7304-9.0909-0.86719 0.33398a3.334 3.3739 0 0 0-0.59961 0.42188l-1.3164-0.99805 0.6582 1.9121c-1.0419 0.15889-2.0814 0.15756-3.1191 0.15039v1.1348c0.99303-0.32071 2.0028-0.39211 3.1504 0.26367 0.04164 0.21067 0.14736 0.39467 0.24023 0.57617l-3.3906 1.3828v0.74805c1.3029-0.45113 2.5939-0.86031 3.8105-1.5234 0.19216 0.17502 0.44778 0.30054 0.7168 0.39453l-3.377 4.625c0.17952 0.21851 0.37419 0.42045 0.58789 0.60547 1.1487-1.596 1.8191-3.3727 3.4199-5.1094 0.22418 0.01945 0.48348 0.053905 0.74609 0.021485a22.483 22.752 0 0 0 0.16211 6.3203h2.248c-0.76491-2.1186-1.6258-4.2171-1.5098-6.5039 0.8519 0.33059 1.2962 0.75813 2.2441 1.4258-0.42595-0.64821-0.9474-1.0706-1.3125-1.8809a1.9985 2.0224 0 0 0 0.20508-0.41992c4.362 1.6789 8.4457 2.1504 12.875 4.8438l2.4219 1.8164a11.497 11.635 0 0 1-0.51953 0.71875h3.5742a21.877 22.14 0 0 0 0.26953-0.17578 21.858 22.12 0 0 0 3.7109-12.295c0-12.209-9.8481-22.234-22.092-22.234h-0.003907zm3.627 3.4219c7.302 1.452 13.675 7.255 15.059 14.055l-0.33008 0.42383c-0.6149 1.076-6.3794 2.9359-8.4707 3.6035-3.9937 0.86536-6.8539 2.9179-10.688 3.0605a2.8664 2.9007 0 0 0-0.83984-0.78711c2.3315-4.1939 1.5673-15.41 5.2695-20.355zm-11.805 3.1172v3.002c1.7111 4.5413 1.6459 3.6289 0-3.002zm26.297 12.816h0.001953l0.86523 0.8457c0 0.68062-0.071483 1.3461-0.18359 2.0332-0.56687 3.6267-1.2869 7.2114-2.7793 10.145l-3.1738-1.0566c-3.619-1.7826-9.0432-2.9442-12.902-5.5176 5.531-3.2119 12.103-4.5046 18.172-6.4492z" fill="#fff" stroke-width="3.0418"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
26
web/img/application-x-compressed-tar.9234c821.svg
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#b08888" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
13
web/img/application-x-deb.b48e65ac.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333 0 0 2.3333 -68.668 -72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="7.9999" y="4" width="48.001" height="55.999" ry="5" fill="#f85879" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m55.999 46.002-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8193" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m30.002 25v6.5002c0 0.277 0.223 0.5 0.5 0.5h3c0.27701 0 0.5-0.223 0.5-0.5v-6.5002zm1 4h2v2h-2z" color="#000000" fill="#fff" stroke-width="3.7796"/>
|
||||||
|
<path d="m32.002 4h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2z" color="#000000" fill="#fff" stroke-width="3.7796"/>
|
||||||
|
<path d="m25.354 34.799c-0.6899 0.05743-1.3772 0.09387-2.0547 0.17969l0.29688 0.04102c0.49799-0.18211 1.2278-0.10088 1.7578-0.2207zm-3.0098 0.31445c-1.1208 0.06757-2.6794 0.65311-2.1992 0.12109-1.8285 0.81627-5.0739 1.9648-6.8965 3.6738l-0.05859-0.38476c-0.83509 1.0023-3.6397 2.9896-3.8633 4.2891l-0.22656 0.05273c-0.43384 0.73586-0.71608 1.5716-1.0605 2.3281-0.014093 0.02403-0.025344 0.03645-0.039062 0.05859v5.9941c0.30021-0.8219 0.94987-1.7497 1.4727-3.0605l-0.39648-0.07031c0.76099-1.3265 4.3399-5.3323 6-5.127 0.80401-1.0097-0.15705-0.0021-0.31445-0.25586 1.7663-1.8275 2.3179-1.29 3.5098-1.6191 1.2846-0.76256-1.0972 0.29773-0.48828-0.29102 2.2223-0.56704 1.5703-1.2884 4.4688-1.5762 0.30598 0.17379-0.7063 0.26855-0.96095 0.49414 1.8507-0.90614 5.8533-0.70176 8.4571 0.5 3.0189 1.4119 6.4126 5.5848 6.5469 9.5099l0.15625 0.04102c-0.07658 1.5604 0.23584 3.3642-0.3125 5.0215l0.37109-0.78516c0.04392 1.1923-0.34828 1.7685-0.70312 2.793l-0.63477 0.32031c-0.52167 1.0137 0.04737 0.64332-0.32617 1.4492-0.40421 0.35897-1.015 0.91842-1.5918 1.4082h2.2734c0.30196-0.29251 0.55329-0.52279 0.66797-0.5293-0.28559 0.42965-0.1267 0.38839-0.13086 0.5293h0.04297c0.47622-0.92521-0.40688-0.41366 0.70508-2.0254l0.44922 0.61719c-0.16782-1.1075 1.3718-2.4511 1.2148-4.2012 0.35385-0.53494 0.39842 0.57962 0.02344 1.8105 0.52064-1.3656 0.13435-1.5857 0.26758-2.7129 0.14359 0.37896 0.33443 0.7814 0.43164 1.1816-0.33956-1.3201 0.34685-2.2248 0.51758-2.9922-0.16884-0.07435-0.52358 0.58197-0.60547-0.97657 0.01247-0.67708 0.18817-0.35081 0.25586-0.51758-0.13221-0.07657-0.47971-0.60026-0.69142-1.5957 0.15247-0.23449 0.41381 0.60661 0.62305 0.64062-0.13467-0.79116-0.36911-1.3945-0.37891-2.002-0.612-1.2782-0.21555 0.17266-0.71094-0.54688-0.6515-2.0303 0.53619-0.46872 0.61719-1.3906 0.98609 1.4287 1.5515 3.645 1.8105 4.5625-0.19741-1.1188-0.51872-2.2051-0.90821-3.2539 0.30059 0.12681-0.47698-2.2994 0.39648-0.69142-0.93226-3.4274-3.9882-6.6345-6.7988-8.1368 0.34304 0.31432 0.77214 0.71128 0.61719 0.77345-1.3986-0.83159-1.1493-0.89864-1.3496-1.25-1.1376-0.46343-1.2142 0.03715-1.9668 0-2.147-1.139-2.5576-1.0159-4.5332-1.7285l0.08594 0.41797c-1.4218-0.47379-1.657 0.1776-3.1934 0-0.09347-0.07208 0.49386-0.26048 0.97657-0.33008-1.375 0.18166-1.3089-0.27571-2.6543 0.04492 0.33062-0.23211 0.68238-0.38525 1.0352-0.58203zm1.1074 0.25586c0.39382 0.06982 0.85085 0.12644 0.78516 0.2207 0.43234-0.09573 0.52955-0.1832-0.78516-0.2207zm0.78516 0.2207-0.27344 0.05859 0.25586-0.02344 0.01758-0.03516zm0.98439 11.479c-2.1819 0.03591-4.2252 1.4201-4.9062 2.9258-1.1173 0.7033-1.2477 2.7119-1.7344 3.0801-0.43951 3.2276 0.2826 5.2193 1.7559 6.9238h1.7207c-1.3374-1.3635-2.233-3.214-2.2031-5.2949-0.04392 0.33166-0.12405 0.2496-0.21484 0.38281-0.21215-2.6901 1.2473-5.3891 3.7012-6.4941 2.4001-1.1875 5.2137-0.70114 6.9316 0.90235-0.94363-1.2368-2.8245-2.5472-5.0508-2.4258zm6.3359 5.5684c-0.0912 0.0023-0.20862 0.22946-0.26758 0.48242 0.1372 0.07208 0.24624 0.9373 0.37891 0.40234 0.04505-0.664-0.02001-0.88703-0.11133-0.88477zm8.0606 2.2344-0.10352 0.27344c-0.19847 1.4104-0.62982 2.8091-1.2871 4.1035 0.7265-1.3656 1.1917-2.8634 1.3906-4.377zm-8.5372 0.5c-0.0991 0.48854-0.36651 0.90939-0.61719 1.3555-1.3785 0.86807-0.12934-0.51441 0-1.041-1.4815 1.867-0.20158 1.1191-0.25586 1.6406 0.44069-0.60657 0.76008-1.2691 0.87306-1.9551zm-3.0078 2.8457c-0.59868 0.14654-1.2074 0.14882-1.8223 0.09375-0.73733 0.0098 0.1367 0.38075 1.0996 0.5293 0.26701-0.20822 0.50744-0.41865 0.72267-0.62305zm-9.3067 0.09961c0.16284 0.59767 0.49913 1.1058 0.8086 1.6289l-0.23242-0.66798c-0.25667-0.28426-0.40546-0.62139-0.57617-0.96095zm-0.56446 1.0059-0.10547 0.51953c0.03809 0.05172 0.07235 0.10398 0.10938 0.15625h0.38281c-0.12618-0.21645-0.23059-0.37445-0.38672-0.67578z" fill="#d70751" stroke-width=".49352"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.7 KiB |
14
web/img/application-x-designer.989966cd.svg
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#90d344" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m138.06 8.421-12-12v6.9998c0 2.77 2.23 5 5 5z" fill="#fff" fill-rule="evenodd" opacity=".35" stroke-width="3.7796" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m46.997 24-30 22h6v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2m-2-18.449v12.45h-16" fill="#fff" fill-rule="evenodd"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 953 B |
18
web/img/application-x-executable.039ba516.svg
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f4f4f4" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".1" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(.49563 0 0 .49563 -158.07 -64.931)" enable-background="new" opacity=".75" stroke-width=".13346">
|
||||||
|
<rect transform="rotate(90)" x="140.04" y="-343.99" width="16" height="16" color="#000000" enable-background="accumulate" fill="none"/>
|
||||||
|
<path d="m337.31 139.96-2.6322 0.39327v1.3534a6.4893 6.4775 43.146 0 1 2.6322 5e-3v-1.7515zm-5.3858 1.1906-2.0054 1.7049 0.98801 1.1776a6.4893 6.4775 43.146 0 1 2.0174-1.6908zm8.1287 0.0127-0.99285 1.1835a6.4893 6.4775 43.146 0 1 0.17056 0.0905 6.4893 6.4775 43.146 0 1 1.8446 1.6029l1.0051-1.1977zm-11.61 4.2168-0.44056 2.5954 1.5154 0.26739a6.4893 6.4775 43.146 0 1 0.45509-2.5927zm15.086 3e-3 -1.5228 0.26851a6.4893 6.4775 43.146 0 1 0.46365 2.5909l1.5329-0.27zm-13.682 4.6946-1.3515 0.78058h-3.4e-4l1.331 2.271 1.3381-0.77238a6.4893 6.4775 43.146 0 1-1.3172-2.2792zm12.301 3e-3a6.4893 6.4775 43.146 0 1-0.53478 1.2148 6.4893 6.4775 43.146 0 1-0.77388 1.0692l1.3388 0.77313 1.3016-2.2881zm-9.5569 3.4716-0.53479 1.4688 2.4795 0.88448 0.52585-1.4453a6.4893 6.4775 43.146 0 1-2.3034-0.79995 6.4893 6.4775 43.146 0 1-0.16721-0.10799zm6.8133 0.0153a6.4893 6.4775 43.146 0 1-2.4747 0.89752l0.53031 1.4565 2.4676-0.91651z" color="#000000" enable-background="accumulate" fill="#999"/>
|
||||||
|
<circle cx="336" cy="148" r="6.44" fill="none" opacity="1" stroke="#999" stroke-linecap="square" stroke-linejoin="round" stroke-width=".53382"/>
|
||||||
|
<circle cx="336" cy="148" r="4.44" fill="none" opacity="1" stroke="#999" stroke-linecap="square" stroke-linejoin="round" stroke-width=".53382"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
17
web/img/application-x-fictionbook+xml.70ffd254.svg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#afdde9" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(71.441 -.82775)">
|
||||||
|
<path transform="translate(-71.441 .82775)" d="m31 21.801v20.4h7s1-6.56e-4 1-0.97266v-14.57s0-0.97266-1-0.97266h-4v-3.8848h-3zm3.002 5.8281h2v12.629h-2v-12.629z"/>
|
||||||
|
<path d="m-45.441 43.028v-14.57h-1v-1.944h1v-2.914c0-0.971 1-0.971 1-0.971h3v1.943h-1v1.942h1v1.943h-1v14.57z" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
<rect x="15.983" y="4" width="1" height="56" ry="0" opacity=".15" style="paint-order:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
15
web/img/application-x-firmware.294b1536.svg
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<rect x="4.5" y="4.5" width="55" height="55" rx="3" ry="3" fill="#3a9d4a" overflow="visible"/>
|
||||||
|
<path d="m14 18v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2zm0 4v2h36v-2z" fill="#fff" font-family="sans-serif" font-weight="400" opacity=".5" overflow="visible" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/>
|
||||||
|
<path d="M18 13.5h28c.277 0 .5.223.5.5v37c0 .277-.223.5-.5.5H18a.499.499 0 0 1-.5-.5V14c0-.277.223-.5.5-.5z" fill="#4d4d4d" overflow="visible" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".498" stroke-width="0"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
13
web/img/application-x-flash-video.76dbbdb4.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f35450" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m19 43.604v6.396s10.285 1.514 14.812-12.198h8.188v-6h-5.726s2.174-7 7.726-7v-6s-8.64-1.99-14.192 12.413c-4.801 14.105-10.808 12.389-10.808 12.389z" color="#000000" fill="#fff" overflow="visible"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 855 B |
16
web/img/application-x-gzip.c1f8871c.svg
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#fec21a" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(3.7796 0 0 3.7796 -101.04 4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
14
web/img/application-x-gzpostscript.339f251e.svg
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f63163" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<g transform="matrix(3.7796,0,0,3.7796,-101.04,4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
15
web/img/application-x-java-archive.10bed785.svg
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#ff9230" style="paint-order:stroke fill markers"/>
|
||||||
|
<g fill="#fff">
|
||||||
|
<path d="m30.003 31v6.5002c0 0.27701 0.223 0.5 0.5 0.5h3c0.27701 0 0.5-0.223 0.5-0.5v-6.5002zm1 4h2v2h-2z" color="#000000" stroke-width="3.7796"/>
|
||||||
|
<path d="m32.002 4.0001v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2z" color="#000000" stroke-width="3.7796"/>
|
||||||
|
<path d="m21.391 21.055c1.8182 7.1629-6.4139 9.3261-9.3848 13.787-2.0231 3.0394 0.99325 6.3057 5.1055 10.016-1.6035-3.625-7.0413-6.7979 0.001953-12.361 8.7836-6.9333 4.2773-11.441 4.2773-11.441zm5.4355 8.8613c1.12e-4 0-14.853 3.709-7.7598 11.883 2.0941 2.4104-0.54883 4.5781-0.54883 4.5781s5.3129-2.7433 2.873-6.1797c-2.2797-3.2031-4.0264-4.7942 5.4355-10.281zm2.6289 14.602c-0.52186 0.0017-1.0761 0.09122-1.6445 0.29102-0.45578 0.16136-0.69531 0.53711-0.69531 0.53711s0.28921-0.1159 0.93164-0.25c2.6272-0.54744 6.3905 3.5171-1.75 7.7461-0.03776 0.1008-0.16222 0.21289-0.16211 0.21289 9.6812-2.545 7.5701-8.5453 3.3203-8.5371zm-17.443 0.41211c-0.45307-0.010459-1.9864 0.016966-4.0117 0.59961v0.85742c1.0592-0.71666 4.1523-1.4512 4.1523-1.4512s-0.047312-0.004059-0.13867-0.005859h-0.001953zm14.318 1.5859s-3.2754 0.58545-6.5391 0.85938c-3.9947 0.33514-8.2808 0.40114-10.432 0.11328-0.65614-0.08772-1.0894-0.19566-1.3594-0.31641v1.2949c4.2908 0.51786 11.611 0.35701 16.348-0.88867 0.83261-0.56821 1.9824-1.0625 1.9824-1.0625zm-16.016 3.3418c-1.519 0.50414-2.225 1.0217-2.3145 1.5v0.20117c0.31384 1.7215 8.8302 2.7944 16.674 0.5-1.091-0.38455-1.7852-1.0879-1.7852-1.0879-5.0205 0.96621-7.9204 0.93583-11.594 0.55664-2.8399-0.29354-0.98047-1.6699-0.98047-1.6699zm1.0391 4.75c-6.6709 1.864 4.0583 5.7136 12.553 2.0742-1.3912-0.54061-2.3887-1.1641-2.3887-1.1641-3.7879 0.71596-5.5443 0.77144-8.9824 0.37891-2.8376-0.32546-1.1816-1.2891-1.1816-1.2891zm18.945 3.5137s1.2262 1.0109-1.3516 1.793c-0.099226 0.030055-0.2282 0.056744-0.33594 0.085938h1.5625c1.1574-0.65952 1.3178-1.3407 0.125-1.8789z" clip-rule="evenodd" enable-background="new" fill-rule="evenodd" opacity=".35" stroke-width="1.3868"/>
|
||||||
|
</g>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
13
web/img/application-x-java.fdc1dc99.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(.26458)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#df5943" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m9.2608 4.4978c0.33263 1.3104-1.1733 1.7062-1.7168 2.5223-0.37011 0.55604 0.18168 1.1535 0.93397 1.8322-0.29336-0.66316-1.2882-1.2433 4e-4 -2.2611 1.6069-1.2684 0.7824-2.0934 0.7824-2.0934zm0.99418 1.6213c1.8e-5 0-2.7172 0.67846-1.4195 2.1738 0.38309 0.44098-0.10049 0.83749-0.10049 0.83749s0.97214-0.50173 0.52578-1.1304c-0.41705-0.58598-0.73675-0.87708 0.99425-1.8809zm0.4812 2.6711c-0.09547 3.25e-4 -0.19685 0.01688-0.30085 0.05343-0.08338 0.02952-0.12714 0.09814-0.12714 0.09814s0.05272-0.02122 0.17025-0.04575c0.48064-0.10015 1.1693 0.64343-0.31995 1.4171-0.0069 0.01844-0.02978 0.0391-0.02976 0.0391 1.7711-0.46559 1.3849-1.5635 0.60744-1.562zm-3.191 0.07551c-0.11666-0.0027-0.621 0.0048-1.2237 0.29635-0.8148 0.39398 2.0151 0.57346 3.4802 0.18811 0.15232-0.10395 0.36272-0.1942 0.36272-0.1942s-0.59924 0.10713-1.1963 0.15724c-0.73082 0.06131-1.5148 0.07342-1.9083 0.02076-0.9317-0.12456 0.51076-0.46722 0.51076-0.46722s-0.0087-7e-4 -0.0254-1e-3zm-0.31047 0.90144c-1.3441 0.44609 0.74823 0.95234 2.6267 0.40286-0.19959-0.07035-0.32632-0.19911-0.32632-0.19911-0.91846 0.17676-1.449 0.17111-2.121 0.10174-0.51952-0.0537-0.17946-0.30549-0.17946-0.30549zm0.18998 0.86891c-1.2204 0.341 0.74253 1.0454 2.2965 0.37961-0.25451-0.0989-0.43705-0.21309-0.43705-0.21309-0.69296 0.13098-1.0144 0.1413-1.6434 0.06949-0.51913-0.05954-0.216-0.236-0.216-0.236zm-0.84766 0.57609c-0.54806 0.01691-1.6199 0.50969-0.63969 0.66876 3.168 0.51351 5.7749-0.2313 4.9532-0.60204 0 0 0.22444 0.18505-0.24714 0.32812-0.89672 0.27161-3.733 0.35353-4.5208 0.01086-0.28299-0.12326 0.24792-0.29411 0.41497-0.33019 0.17418-0.03768 0.27365-0.0308 0.27365-0.0308-0.04921-0.03465-0.13278-0.04784-0.23427-0.04471zm4.8165 0.47096s-0.09986 0.25639-1.1812 0.45982c-1.22 0.22968-2.725 0.2029-3.6173 0.05558 0 0 0.18277 0.15132 1.1221 0.21178 1.4292 0.09137 3.6245-0.05084 3.6765-0.72717z" clip-rule="evenodd" enable-background="new" fill="#fff" fill-rule="evenodd" stroke-width=".25371"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
13
web/img/application-x-kdenlivetitle.410e52e7.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="matrix(0 1 1 0 -.0002268 -.0002268)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#748290" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".2" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m32 18c-7.7319 0-14 6.2681-14 14s6.2681 14 14 14c7.7319 0 14-6.2681 14-14s-6.2681-14-14-14zm0 3c6.075 0 11 4.9248 11 11 0 6.075-4.9248 11-11 11-6.075 0-11-4.9248-11-11 0-6.075 4.9248-11 11-11zm-4 4.5v13l11-6.5002z" fill="#fff" stroke-width="3.7796"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 955 B |
13
web/img/application-x-kexi-connectiondata.c28ccac0.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8542c2" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m32 21c-6.075 0-11 1.343-11 3v10a11 3 0 0 0 1 1.2422 11 3 0 0 0 0.0117 0.0059 11 3 0 0 0 0.47656 0.25195 11 3 0 0 0 0.0312 0.01367 11 3 0 0 0 0.55079 0.23242 11 3 0 0 0 0.0645 0.02344 11 3 0 0 0 0.58984 0.20117 11 3 0 0 0 0.13281 0.04102 11 3 0 0 0 0.65039 0.17969 11 3 0 0 0 0.0996 0.02539 11 3 0 0 0 0.77344 0.17578 11 3 0 0 0 0.0527 0.0098 11 3 0 0 0 0.81445 0.15039 11 3 0 0 0 0.13867 0.02344 11 3 0 0 0 0.7793 0.11523 11 3 0 0 0 0.2207 0.0293 11 3 0 0 0 0.73633 0.08203 11 3 0 0 0 0.36719 0.03711 11 3 0 0 0 0.53906 0.04492 11 3 0 0 0 0.5918 0.04102 11 3 0 0 0 0.49023 0.02539 11 3 0 0 0 0.57617 0.02344 11 3 0 0 0 0.4629 0.01367 11 3 0 0 0 0.84961 0.01163 11 3 0 0 0 0.95899-0.01367 11 3 0 0 0 0.41406-0.01367 11 3 0 0 0 0.7168-0.0293 11 3 0 0 0 0.3457-0.02148 11 3 0 0 0 0.70703-0.04883 11 3 0 0 0 0.31836-0.0293 11 3 0 0 0 0.76758-0.07617 11 3 0 0 0 0.17969-0.02148 11 3 0 0 0 0.80859-0.10742 11 3 0 0 0 0.21289-0.03516 11 3 0 0 0 0.67773-0.11133 11 3 0 0 0 0.3125-0.06055 11 3 0 0 0 0.59571-0.125 11 3 0 0 0 0.19531-0.04687 11 3 0 0 0 0.66211-0.16797 11 3 0 0 0 0.0137-0.0039 11 3 0 0 0 0.0234-0.0078 11 3 0 0 0 0.70117-0.21875 11 3 0 0 0 0.63672-0.24414 11 3 0 0 0 2e-3 0 11 3 0 0 0 6e-3 -2e-3 11 3 0 0 0 0.53516-0.25391 11 3 0 0 0 6e-3 -0.0039 11 3 0 0 0 0.20299-0.11522 11 3 0 0 0 1-1.2422v-10c0-1.657-4.925-3-11-3m0 16h-1v3h1v1h-8v-1h-3v3h3v-1h16v1h3v-3h-3v1h-7v-1h1v-3zm0-15c5.523 0 10 0.895 10 2s-4.477 2-10 2-10-0.895-10-2 4.477-2 10-2m-10 3.242c1.784 1.069 5.692 1.756 10 1.758 4.308-1e-3 8.216-0.688 10-1.758v3.758c0 1.105-4.477 2-10 2s-10-0.895-10-2zm0 5c1.784 1.069 5.692 1.756 10 1.758 4.308-1e-3 8.216-0.688 10-1.758v3.758a10 2 0 0 1-10 2 10 2 0 0 1-10-2v-2zm10 7.758h1v1h-1zm-10 3h1v1h-1zm19 0h1v1h-1z" fill="#fff" opacity=".75"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
13
web/img/application-x-kexiproject-shortcut.ed151f2c.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#8542c2" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m32 22a11 3 0 0 0 -2.125 .05859c-.02.001-.041.001-.061.002-.059.003-.113.008-.172.012a11 3 0 0 0 -1.923828 .164062 11 3 0 0 0 -.002 0A11 3 0 0 0 25.933594 22.5c-.036.007-.075.011-.111.018a11 3 0 0 0 -1.517578 .34375c-.037.01-.077.017-.113.027a11 3 0 0 0 -1.214844 .40039c-.057.022-.119.044-.174.066a11 3 0 0 0 -.222656 .101562c-.11.05-.22.1-.32.152a11 3 0 0 0 -.19336 .109375c-.093.054-.186.107-.268.162a11 3 0 0 0 -.138672 .103516c-.079.06-.155.12-.221.182a11 3 0 0 0 -.0957 .101562c-.057.062-.112.124-.154.188a11 3 0 0 0 -.06836 .121094c-.029.055-.057.11-.074.166A11 3 0 0 0 21 25v10a11 3 0 0 0 1 1.242188 11 3 0 0 0 .01172 .0059 11 3 0 0 0 .476562 .251953 11 3 0 0 0 .03125 .01367 11 3 0 0 0 .550781 .232422 11 3 0 0 0 .06445 .02344 11 3 0 0 0 .589843 .201172 11 3 0 0 0 .132813 .04102 11 3 0 0 0 .65039 .179687 11 3 0 0 0 .09961 .02539 11 3 0 0 0 .773437 .175781 11 3 0 0 0 .05273 .0098 11 3 0 0 0 .814453 .15039 11 3 0 0 0 .138672 .02344 11 3 0 0 0 .779297 .115234 11 3 0 0 0 .220703 .0293 11 3 0 0 0 .736328 .08203 11 3 0 0 0 .367187 .03711 11 3 0 0 0 .539063 .04492 11 3 0 0 0 .591797 .04102 11 3 0 0 0 .490234 .02539 11 3 0 0 0 .576172 .02344 11 3 0 0 0 .462891 .01367A11 3 0 0 0 32 38a11 3 0 0 0 .958984 -.01367 11 3 0 0 0 .414063 -.01367 11 3 0 0 0 .716797 -.0293 11 3 0 0 0 .345703 -.02148 11 3 0 0 0 .707031 -.04883 11 3 0 0 0 .31836 -.0293 11 3 0 0 0 .767578 -.07617 11 3 0 0 0 .179687 -.02148 11 3 0 0 0 .808594 -.107422 11 3 0 0 0 .212891 -.03516 11 3 0 0 0 .677734 -.111328 11 3 0 0 0 .3125 -.06055 11 3 0 0 0 .595703 -.125 11 3 0 0 0 .195313 -.04687 11 3 0 0 0 .662109 -.167969 11 3 0 0 0 .01367 -.0039 11 3 0 0 0 .02344 -.0078 11 3 0 0 0 .701172 -.21875 11 3 0 0 0 .636719 -.24414 11 3 0 0 0 .002 0 11 3 0 0 0 .0059 -.002 11 3 0 0 0 .535157 -.253906 11 3 0 0 0 .0059 -.0039A11 3 0 0 0 42 36.24219 11 3 0 0 0 43 35v-4h-2.385C38.883 31.596 35.693 32 32 32 26.477 32 22 31.1 22 30v-3.758c.001.001.003.001.004.002a11 3 0 0 0 .744141 .371093c.011.005.02.009.031.014a11 3 0 0 0 .929687 .339844 11 3 0 0 0 1.058594 .287109c.029.007.058.013.088.02a11 3 0 0 0 2.511719 .441406c.036.005.073.009.109.014a11 3 0 0 0 1.316407 .136719c.039.003.076.007.115.01a11 3 0 0 0 1.398438 .08594c.108.005.217.006.326.01A11 3 0 0 0 32 28 11 3 0 0 0 35 27.882812v-.977a10 2 0 0 1 -1 .05273v-.01C33.35 26.979 32.693 27 32 27 31.31 27 30.635 26.986 29.984 26.959 29.389 26.935 28.819 26.898 28.27 26.854a10 2 0 0 1 -.289062 -.02344c-.524-.046-1.028-.101-1.5-.164-.031-.004-.065-.008-.096-.012-.486-.066-.934-.143-1.354-.225a10 2 0 0 1 -.138672 -.02539c-.393-.08-.746-.166-1.068-.258a10 2 0 0 1 -.171875 -.04883c-.293-.089-.544-.183-.764-.281a10 2 0 0 1 -.177735 -.07813c-.029-.015-.054-.03-.082-.045a10 2 0 0 1 -.232422 -.140625c-.031-.022-.057-.044-.084-.066a10 2 0 0 1 -.132813 -.117187c-.027-.029-.047-.058-.068-.088a10 2 0 0 1 -.06836 -.113281C22.02 25.11 22 25.06 22 25a10 2 0 0 1 .199219 -.396484 10 2 0 0 1 .623047 -.396485c.228-.106.505-.206.816-.301a10 2 0 0 1 .103516 -.0332 10 2 0 0 1 .0039 -.002c.342-.1.729-.192 1.154-.277.016-.003.029-.007.045-.01.422-.084.884-.161 1.375-.229a10 2 0 0 1 .142579 -.01953c.456-.061.946-.113 1.451-.158a10 2 0 0 1 .34961 -.03125c.512-.041 1.044-.074 1.594-.098a10 2 0 0 1 .220703 -.0098C30.701 23.01 31.342 23 32 23c.693 0 1.353.021 2 .051v-.01a10 2 0 0 1 1 .05273v-.979A11 3 0 0 0 32 22m0 16h-1v3h1v1h-8v-1h-3v3h3v-1h16v1h3v-3h-3v1h-7v-1h1v-3zm7-16V25h1v-1.219c.611.545 1 1.331 1 2.219 0 1.662-1.338 3-3 3h-2v1h2c2.216 0 4-1.784 4-4 0-1.205-.534-2.272-1.373-3H42V22zM22 31.24C23.784 32.31 27.692 32.999 32 33 36.31 32.999 40.22 32.31 42 31.24V35A10 2 0 0 1 32 37 10 2 0 0 1 22 35V33zM32 39h1v1h-1zm-10 3h1v1h-1zm19 0h1v1h-1z" fill="#fff" opacity=".75"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
13
web/img/application-x-kplato.2f75469c.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#986230" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m24 22a1 1 0 0 0-1 1h-2v21h22v-21h-2a1 1 0 0 0-1-1h-5a1 1 0 0 0-1 1h-3a1 1 0 0 0-1-1zm0 1h6.449v1h-6.449zm11 0h5v1h-5zm-13 4h20v16h-20zm2 2v5h1v-2h6v2h1v-5h-1v2h-6v-2zm8 7v5.25h1v-2.25h6v2h1v-5h-1v2h-6v-2z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".75" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1 KiB |
13
web/img/application-x-kvtml.366fbcf1.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#5f6c79" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<path d="m21 22v22h22v-22zm1 1h20v20h-20zm2 3v2h16v-2zm0 4v1h7v-1zm9 0v1h7v-1zm-9 3v1h7v-1zm9 0v1h7v-1zm-9 3v1h7v-1zm9 0v1h7v-1zm-9 3v1h7v-1zm9 0v1h7v-1z" color="#000000" color-rendering="auto" fill="#fff" image-rendering="auto" opacity=".9" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1,003 B |
26
web/img/application-x-labplot2.4068c7bd.svg
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="scale(1)">
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#4d4d4d" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
</g>
|
||||||
|
<g fill="none">
|
||||||
|
<path d="m21 31.513c7.043 0 8.3464 8.9615 11.453 8.9893 3.1068 0.02484 4.5065-9.0108 11.547-9.0108" stroke="#1d99f3"/>
|
||||||
|
<path d="m21 30.545c7.043 0 8.4753-6.1008 11.485-6.0943 2.9904 0.0064 4.4749 7.0415 11.515 7.0415" stroke="#da4453"/>
|
||||||
|
<path d="m21 30.545c7.043 0 7.4697-10.014 11.47-10.014s4.4901 10.961 11.53 10.961" stroke="#d6d6d6"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#d6d6d6" style="">
|
||||||
|
<rect x="20" y="20" width="1" height="23" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" stroke-width="1.109"/>
|
||||||
|
<g style="">
|
||||||
|
<rect x="20" y="31" width="24" height="1"/>
|
||||||
|
<rect x="26" y="30" width="1" height="3"/>
|
||||||
|
<rect x="32" y="30" width="1" height="3"/>
|
||||||
|
<rect x="38" y="30" width="1" height="3"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
14
web/img/application-x-lzma-compressed-tar.e434137b.svg
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="a" x1="49.571" x2="51.714" y1="52.714" y2="54.857" gradientTransform="matrix(2.3333,0,0,2.3333,-68.667,-72.001)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0"/>
|
||||||
|
<stop stop-opacity="0" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="8" y="4" width="48" height="56" ry="5" fill="#f7a42d" style="paint-order:stroke fill markers"/>
|
||||||
|
<path d="m56 46-14 14h9c2.77 0 5-2.23 5-5z" fill="url(#a)" fill-rule="evenodd" opacity=".15" stroke-width="8.8191" style="paint-order:stroke fill markers"/>
|
||||||
|
<g transform="matrix(3.7796,0,0,3.7796,-101.04,4.424)" fill="#fff">
|
||||||
|
<path d="m34.671 7.0315v1.7198c0 0.07329 0.059 0.13229 0.13229 0.13229h0.79374c0.07329 0 0.13229-0.059 0.13229-0.13229v-1.7198zm0.26458 1.0583h0.52916v0.52916h-0.52916z" color="#000000"/>
|
||||||
|
<path d="m35.2-0.11215v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916zm0 0.52916h-0.52916v0.52916h0.52916zm0 0.52916v0.52916h0.52916v-0.52916z" color="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |