Sfoglia il codice sorgente

Improve subscription error display in different clients

BrettonYe 1 anno fa
parent
commit
f82912d0d1

+ 11 - 12
app/Http/Controllers/User/SubscribeController.php

@@ -10,7 +10,6 @@ use App\Utils\IP;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Redirect;
-use Response;
 
 class SubscribeController extends Controller
 {
@@ -19,7 +18,7 @@ class SubscribeController extends Controller
     private ProxyService $proxyServer;
 
     // 通过订阅码获取订阅信息
-    public function getSubscribeByCode(Request $request, string $code): RedirectResponse|Response|string
+    public function getSubscribeByCode(Request $request, string $code): RedirectResponse|string
     {
         preg_match('/[0-9A-Za-z]+/', $code, $matches, PREG_UNMATCHED_AS_NULL);
 
@@ -33,39 +32,39 @@ class SubscribeController extends Controller
         $subscribe = UserSubscribe::whereCode($code)->first();
         $this->proxyServer = new ProxyService;
         if (! $subscribe) {
-            return $this->failed(trans('errors.subscribe.unknown'));
+            $this->failed(trans('errors.subscribe.unknown'));
         }
 
         if ($subscribe->status !== 1) {
-            return $this->failed(trans('errors.subscribe.sub_banned'));
+            $this->failed(trans('errors.subscribe.sub_banned'));
         }
 
         // 检查用户是否有效
         $user = $subscribe->user;
         $this->proxyServer->setUser($user);
         if (! $user) {
-            return $this->failed(trans('errors.subscribe.user'));
+            $this->failed(trans('errors.subscribe.user'));
         }
 
         if ($user->status === -1) {
-            return $this->failed(trans('errors.subscribe.user_disabled'));
+            $this->failed(trans('errors.subscribe.user_disabled'));
         }
 
         if ($user->enable !== 1) {
             if ($user->ban_time) {
-                return $this->failed(trans('errors.subscribe.banned_until', ['time' => $user->ban_time]));
+                $this->failed(trans('errors.subscribe.banned_until', ['time' => $user->ban_time]));
             }
 
             $unusedTraffic = $user->transfer_enable - $user->used_traffic;
             if ($unusedTraffic <= 0) {
-                return $this->failed(trans('errors.subscribe.out'));
+                $this->failed(trans('errors.subscribe.out'));
             }
 
             if ($user->expiration_date < date('Y-m-d')) {
-                return $this->failed(trans('errors.subscribe.expired'));
+                $this->failed(trans('errors.subscribe.expired'));
             }
 
-            return $this->failed(trans('errors.subscribe.question'));
+            $this->failed(trans('errors.subscribe.question'));
         }
 
         $subscribe->increment('times'); // 更新访问次数
@@ -74,9 +73,9 @@ class SubscribeController extends Controller
         return $this->proxyServer->getProxyText(strtolower($request->input('target') ?? ($request->userAgent() ?? '')), self::$subType);
     }
 
-    private function failed(string $text): \Illuminate\Http\Response
+    private function failed(string $text): void
     { // 抛出错误的节点信息,用于兼容防止客户端订阅失败
-        return Response::make(base64url_encode($this->proxyServer->failedProxyReturn($text, self::$subType ?? 1)));
+        $this->proxyServer->failedProxyReturn($text, self::$subType ?? 1);
     }
 
     private function subscribeLog(int $subscribeId, ?string $ip, string $headers): void

+ 56 - 44
app/Services/ProxyService.php

@@ -25,37 +25,34 @@ class ProxyService
         self::$user = $user;
     }
 
-    public function getUser(): ?User
-    {
-        return self::$user;
-    }
-
-    public function getServers(): array
-    {
-        return self::$servers;
-    }
-
     public function getProxyText(string $target, ?int $type = null): string
     {
-        $servers = $this->getNodeList($type);
-        if (empty($servers)) {
-            return $this->failedProxyReturn(trans('errors.subscribe.none'), $type);
-        }
+        if (empty($this->getServers())) {
+            $servers = $this->getNodeList($type);
+            if (empty($servers)) {
+                $this->failedProxyReturn(trans('errors.subscribe.none'), $type);
+            } else {
+                if (sysConfig('rand_subscribe')) {// 打乱数组
+                    $servers = Arr::shuffle($servers);
+                }
 
-        if (sysConfig('rand_subscribe')) {// 打乱数组
-            $servers = Arr::shuffle($servers);
-        }
+                $max = (int) sysConfig('subscribe_max');
+                if ($max && count($servers) > $max) { // 订阅数量限制
+                    $servers = Arr::random($servers, $max);
+                }
 
-        $max = (int) sysConfig('subscribe_max');
-        if ($max && count($servers) > $max) { // 订阅数量限制
-            $servers = Arr::random($servers, $max);
+                $this->setServers($servers);
+            }
         }
 
-        $this->setServers($servers);
-
         return $this->getClientConfig($target);
     }
 
+    public function getServers(): ?array
+    {
+        return self::$servers ?? null;
+    }
+
     public function getNodeList(?int $type = null, bool $isConfig = true): array
     {
         $query = self::$user->nodes()->whereIn('is_display', [2, 3]); // 获取这个账号可用节点
@@ -153,15 +150,25 @@ class ProxyService
         return $config;
     }
 
-    public function failedProxyReturn(string $text, ?int $type = 1): string
+    public function failedProxyReturn(string $text, ?int $type = 1): void
     {
         $url = sysConfig('website_url');
 
-        return match ($type) {
-            1 => 'vmess://'.base64url_encode(json_encode(['v' => '2', 'ps' => $text, 'add' => $url, 'port' => 0, 'id' => 0, 'aid' => 0, 'net' => 'tcp', 'type' => 'none', 'host' => $url, 'path' => '/', 'tls' => 'tls'], JSON_PRETTY_PRINT)),
-            2 => 'trojan://[email protected]:0?peer=0.0.0.0#'.rawurlencode($text),
-            default => 'ssr://'.base64url_encode('0.0.0.0:0:origin:none:plain:MDAwMA/?obfsparam=&protoparam=&remarks='.base64url_encode($text).'&group='.base64url_encode(sysConfig('website_name')).'&udpport=0&uot=0'),
-        }.PHP_EOL;
+        $data = [
+            'name' => $text,
+            'type' => [1 => 'shadowsocks', 2 => 'vmess', 3 => 'trojan'][$type],
+            'host' => $url,
+            'port' => 0,
+            'udp' => 0,
+        ];
+
+        $addition = match ($type) {
+            1 => ['method' => 'none', 'passwd' => 'error'],
+            2 => ['uuid' => '0', 'v2_alter_id' => 0, 'method' => 'auto'],
+            3 => ['passwd' => 'error']
+        };
+
+        $this->setServers([array_merge($data, $addition)]);
     }
 
     private function setServers(array $servers): void
@@ -169,6 +176,27 @@ class ProxyService
         self::$servers = $servers;
     }
 
+    private function getClientConfig(string $target): string
+    {
+        foreach (glob(app_path('Utils/Clients').'/*.php') as $file) {
+            $class = 'App\\Utils\\Clients\\'.basename($file, '.php');
+            $reflectionClass = new ReflectionClass($class);
+
+            foreach ($reflectionClass->getConstant('AGENT') as $agent) {
+                if (str_contains($target, $agent)) {
+                    return (new $class)->getConfig($this->getServers(), $this->getUser(), $target);
+                }
+            }
+        }
+
+        return URLSchemes::build($this->getServers()); // Origin
+    }
+
+    public function getUser(): ?User
+    {
+        return self::$user;
+    }
+
     public function getProxyCode(string $target, ?int $type = null): ?string
     {// 客户端用代理信息
         $servers = $this->getNodeList($type);
@@ -192,20 +220,4 @@ class ProxyService
             'trojan' => $type->buildTrojan($server),
         };
     }
-
-    private function getClientConfig(string $target): string
-    {
-        foreach (glob(app_path('Utils/Clients').'/*.php') as $file) {
-            $class = 'App\\Utils\\Clients\\'.basename($file, '.php');
-            $reflectionClass = new ReflectionClass($class);
-
-            foreach ($reflectionClass->getConstant('AGENT') as $agent) {
-                if (str_contains($target, $agent)) {
-                    return (new $class)->getConfig($this->getServers(), $this->getUser(), $target);
-                }
-            }
-        }
-
-        return URLSchemes::build($this->getServers()); // Origin
-    }
 }

+ 13 - 8
composer.json

@@ -16,14 +16,14 @@
     "ext-pdo": "*",
     "ext-simplexml": "*",
     "arcanedev/log-viewer": "^10.0",
-    "geoip2/geoip2": "^v2.11",
+    "geoip2/geoip2": "^v3.0",
     "guzzlehttp/guzzle": "^7.2",
     "hashids/hashids": "^5.0",
     "ip2location/ip2location-laravel": "^1.2",
     "ipip/db": "^1.0",
     "jenssegers/agent": "^2.6",
     "kyslik/column-sortable": "^6.4",
-    "laravel-notification-channels/telegram": "^4.0",
+    "laravel-notification-channels/telegram": "^5.0",
     "laravel/framework": "^10.8",
     "laravel/horizon": "^5.15",
     "laravel/sanctum": "^3.2",
@@ -31,12 +31,12 @@
     "laravel/tinker": "^2.8",
     "mews/captcha": "^3.2",
     "mews/purifier": "^3.3",
-    "phpoffice/phpspreadsheet": "^1.16",
+    "phpoffice/phpspreadsheet": "^2.2",
     "romanzipp/laravel-turnstile": "^1.1",
     "socialiteproviders/telegram": "^4.1",
     "spatie/laravel-permission": "^5.10",
     "srmklive/paypal": "^3.0",
-    "stripe/stripe-php": "^10.12",
+    "stripe/stripe-php": "^15.9",
     "symfony/yaml": "^6.2",
     "xhat/payjs": "^1.5",
     "zbrettonye/geetest": "^1",
@@ -46,11 +46,12 @@
   },
   "require-dev": {
     "barryvdh/laravel-debugbar": "^3.4",
-    "barryvdh/laravel-ide-helper": "^2.8",
+    "barryvdh/laravel-ide-helper": "^3.1",
     "fakerphp/faker": "^1.9",
-    "laravel-lang/common": "^3.0",
+    "laravel-lang/common": "^6.0",
+    "laravel-lang/lang":"^14.0",
     "laravel/pint": "^1.10",
-    "laravel/telescope": "^4.14",
+    "laravel/telescope": "^5.2",
     "mockery/mockery": "^1.4.4",
     "nunomaduro/collision": "^7.0",
     "phpunit/phpunit": "^10.1",
@@ -77,7 +78,9 @@
       "@php artisan package:discover --ansi"
     ],
     "post-update-cmd": [
-      "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
+      "@php artisan vendor:publish --tag=laravel-assets --ansi --force",
+      "@php artisan ide-helper:generate",
+      "@php artisan ide-helper:meta"
     ],
     "post-root-package-install": [
       "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
@@ -89,6 +92,8 @@
   "extra": {
     "laravel": {
       "dont-discover": [
+        "barryvdh/laravel-debugbar",
+        "barryvdh/laravel-ide-helper",
         "laravel/telescope"
       ]
     }

File diff suppressed because it is too large
+ 0 - 7
public/vendor/horizon/app-dark.css


File diff suppressed because it is too large
+ 0 - 7
public/vendor/horizon/app.css


File diff suppressed because it is too large
+ 0 - 1
public/vendor/horizon/app.js


BIN
public/vendor/horizon/img/favicon.png


File diff suppressed because it is too large
+ 0 - 1
public/vendor/horizon/img/horizon.svg


+ 0 - 806
public/vendor/horizon/img/sprite.svg

@@ -1,806 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <symbol viewBox="0 0 20 20" id="zondicon-add-outline">
-        <path d="M11 9h4v2h-4v4H9v-4H5V9h4V5h2v4zm-1 11a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-add-solid">
-        <path d="M11 9V5H9v4H5v2h4v4h2v-4h4V9h-4zm-1 11a10 10 0 1 1 0-20 10 10 0 0 1 0 20z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-adjust">
-        <path d="M10 2v16a8 8 0 1 0 0-16zm0 18a10 10 0 1 1 0-20 10 10 0 0 1 0 20z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-airplane">
-        <path d="M8.4 12H2.8L1 15H0V5h1l1.8 3h5.6L6 0h2l4.8 8H18a2 2 0 1 1 0 4h-5.2L8 20H6l2.4-8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-align-center">
-        <path d="M1 1h18v2H1V1zm0 8h18v2H1V9zm0 8h18v2H1v-2zM4 5h12v2H4V5zm0 8h12v2H4v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-align-justified">
-        <path d="M1 1h18v2H1V1zm0 8h18v2H1V9zm0 8h18v2H1v-2zM1 5h18v2H1V5zm0 8h18v2H1v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-align-left">
-        <path d="M1 1h18v2H1V1zm0 8h18v2H1V9zm0 8h18v2H1v-2zM1 5h12v2H1V5zm0 8h12v2H1v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-align-right">
-        <path d="M1 1h18v2H1V1zm0 8h18v2H1V9zm0 8h18v2H1v-2zM7 5h12v2H7V5zm0 8h12v2H7v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-anchor">
-        <path d="M4.34 15.66A7.97 7.97 0 0 0 9 17.94V10H5V8h4V5.83a3 3 0 1 1 2 0V8h4v2h-4v7.94a7.97 7.97 0 0 0 4.66-2.28l-1.42-1.42h5.66l-2.83 2.83a10 10 0 0 1-14.14 0L.1 14.24h5.66l-1.42 1.42zM10 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-announcement">
-        <path d="M3 6c0-1.1.9-2 2-2h8l4-4h2v16h-2l-4-4H5a2 2 0 0 1-2-2H1V6h2zm8 9v5H8l-1.67-5H5v-2h8v2h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-apparel">
-        <path d="M7 0H6L0 3v6l4-1v12h12V8l4 1V3l-6-3h-1a3 3 0 0 1-6 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-outline-down">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm-2-8V5h4v5h3l-5 5-5-5h3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-outline-left">
-        <path d="M0 10a10 10 0 1 1 20 0 10 10 0 0 1-20 0zm2 0a8 8 0 1 0 16 0 8 8 0 0 0-16 0zm8-2h5v4h-5v3l-5-5 5-5v3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-outline-right">
-        <path d="M20 10a10 10 0 1 1-20 0 10 10 0 0 1 20 0zm-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0zm-8 2H5V8h5V5l5 5-5 5v-3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-outline-up">
-        <path d="M10 0a10 10 0 1 1 0 20 10 10 0 0 1 0-20zm0 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm2 8v5H8v-5H5l5-5 5 5h-3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thick-down">
-        <path d="M7 10V2h6v8h5l-8 8-8-8h5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thick-left">
-        <path d="M10 13h8V7h-8V2l-8 8 8 8v-5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thick-right">
-        <path d="M10 7H2v6h8v5l8-8-8-8v5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thick-up">
-        <path d="M7 10v8h6v-8h5l-8-8-8 8h5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thin-down">
-        <path d="M9 16.172l-6.071-6.071-1.414 1.414L10 20l.707-.707 7.778-7.778-1.414-1.414L11 16.172V0H9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thin-left">
-        <path d="M3.828 9l6.071-6.071-1.414-1.414L0 10l.707.707 7.778 7.778 1.414-1.414L3.828 11H20V9H3.828z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thin-right">
-        <path d="M16.172 9l-6.071-6.071 1.414-1.414L20 10l-.707.707-7.778 7.778-1.414-1.414L16.172 11H0V9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-arrow-thin-up">
-        <path d="M9 3.828L2.929 9.899 1.515 8.485 10 0l.707.707 7.778 7.778-1.414 1.414L11 3.828V20H9V3.828z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-at-symbol">
-        <path d="M13.6 13.47A4.99 4.99 0 0 1 5 10a5 5 0 0 1 8-4V5h2v6.5a1.5 1.5 0 0 0 3 0V10a8 8 0 1 0-4.42 7.16l.9 1.79A10 10 0 1 1 20 10h-.18.17v1.5a3.5 3.5 0 0 1-6.4 1.97zM10 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-attachment">
-        <path d="M15 3H7a7 7 0 1 0 0 14h8v-2H7A5 5 0 0 1 7 5h8a3 3 0 0 1 0 6H7a1 1 0 0 1 0-2h8V7H7a3 3 0 1 0 0 6h8a5 5 0 0 0 0-10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-backspace">
-        <path d="M0 10l7-7h13v14H7l-7-7zm14.41 0l2.13-2.12-1.42-1.42L13 8.6l-2.12-2.13-1.42 1.42L11.6 10l-2.13 2.12 1.42 1.42L13 11.4l2.12 2.13 1.42-1.42L14.4 10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-badge">
-        <path d="M10 12a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-3a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm4 2.75V20l-4-4-4 4v-8.25a6.97 6.97 0 0 0 8 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-battery-full">
-        <path d="M0 6c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm2 0v8h16V6H2zm1 1h4v6H3V7zm5 0h4v6H8V7zm5 0h4v6h-4V7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-battery-half">
-        <path d="M0 6c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm2 0v8h16V6H2zm1 1h4v6H3V7zm5 0h4v6H8V7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-battery-low">
-        <path d="M0 6c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm2 0v8h16V6H2zm1 1h4v6H3V7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-beverage">
-        <path d="M9 18v-7L0 2V0h20v2l-9 9v7l5 1v1H4v-1l5-1zm2-10a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-block">
-        <path d="M0 10a10 10 0 1 1 20 0 10 10 0 0 1-20 0zm16.32-4.9L5.09 16.31A8 8 0 0 0 16.32 5.09zm-1.41-1.42A8 8 0 0 0 3.68 14.91L14.91 3.68z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-bluetooth">
-        <path d="M9.41 0l6 6-4 4 4 4-6 6H9v-7.59l-3.3 3.3-1.4-1.42L8.58 10l-4.3-4.3L5.7 4.3 9 7.58V0h.41zM11 4.41V7.6L12.59 6 11 4.41zM12.59 14L11 12.41v3.18L12.59 14z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-bolt">
-        <path d="M13 8V0L8.11 5.87 3 12h4v8L17 8h-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-book-reference">
-        <path d="M6 4H5a1 1 0 1 1 0-2h11V1a1 1 0 0 0-1-1H4a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V5a1 1 0 0 0-1-1h-7v8l-2-2-2 2V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-bookmark">
-        <path d="M2 2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v18l-8-4-8 4V2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-bookmark-outline">
-        <path d="M2 2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v18l-8-4-8 4V2zm2 0v15l6-3 6 3V2H4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-bookmark-outline-add">
-        <path d="M2 2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v18l-8-4-8 4V2zm2 0v15l6-3 6 3V2H4zm5 5V5h2v2h2v2h-2v2H9V9H7V7h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-all">
-        <path d="M11 11v6h6v-6h-6zm0-2h6V3h-6v6zm-2 2H3v6h6v-6zm0-2V3H3v6h6zm-8 9V1h18v18H1v-1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-bottom">
-        <path d="M1 1h2v2H1V1zm0 4h2v2H1V5zm0 4h2v2H1V9zm0 4h2v2H1v-2zm0 4h18v2H1v-2zM5 1h2v2H5V1zm0 8h2v2H5V9zm4-8h2v2H9V1zm0 4h2v2H9V5zm0 4h2v2H9V9zm0 4h2v2H9v-2zm4-12h2v2h-2V1zm0 8h2v2h-2V9zm4-8h2v2h-2V1zm0 4h2v2h-2V5zm0 4h2v2h-2V9zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-horizontal">
-        <path d="M1 1h2v2H1V1zm0 4h2v2H1V5zm0 4h18v2H1V9zm0 4h2v2H1v-2zm0 4h2v2H1v-2zM5 1h2v2H5V1zm0 16h2v2H5v-2zM9 1h2v2H9V1zm0 4h2v2H9V5zm0 8h2v2H9v-2zm0 4h2v2H9v-2zm4-16h2v2h-2V1zm0 16h2v2h-2v-2zm4-16h2v2h-2V1zm0 4h2v2h-2V5zm0 8h2v2h-2v-2zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-inner">
-        <path d="M9 9V1h2v8h8v2h-8v8H9v-8H1V9h8zM1 1h2v2H1V1zm0 4h2v2H1V5zm0 8h2v2H1v-2zm0 4h2v2H1v-2zM5 1h2v2H5V1zm0 16h2v2H5v-2zm8-16h2v2h-2V1zm0 16h2v2h-2v-2zm4-16h2v2h-2V1zm0 4h2v2h-2V5zm0 8h2v2h-2v-2zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-left">
-        <path d="M1 1h2v18H1V1zm4 0h2v2H5V1zm0 8h2v2H5V9zm0 8h2v2H5v-2zM9 1h2v2H9V1zm0 4h2v2H9V5zm0 4h2v2H9V9zm0 4h2v2H9v-2zm0 4h2v2H9v-2zm4-16h2v2h-2V1zm0 8h2v2h-2V9zm0 8h2v2h-2v-2zm4-16h2v2h-2V1zm0 4h2v2h-2V5zm0 4h2v2h-2V9zm0 4h2v2h-2v-2zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-none">
-        <path d="M1 1h2v2H1V1zm0 4h2v2H1V5zm0 4h2v2H1V9zm0 4h2v2H1v-2zm0 4h2v2H1v-2zM5 1h2v2H5V1zm0 8h2v2H5V9zm0 8h2v2H5v-2zM9 1h2v2H9V1zm0 4h2v2H9V5zm0 4h2v2H9V9zm0 4h2v2H9v-2zm0 4h2v2H9v-2zm4-16h2v2h-2V1zm0 8h2v2h-2V9zm0 8h2v2h-2v-2zm4-16h2v2h-2V1zm0 4h2v2h-2V5zm0 4h2v2h-2V9zm0 4h2v2h-2v-2zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-outer">
-        <path d="M2 19H1V1h18v18H2zm1-2h14V3H3v14zm10-8h2v2h-2V9zM9 9h2v2H9V9zM5 9h2v2H5V9zm4-4h2v2H9V5zm0 8h2v2H9v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-right">
-        <path d="M5 1h2v2H5V1zm0 8h2v2H5V9zm0 8h2v2H5v-2zM9 1h2v2H9V1zm0 4h2v2H9V5zm0 4h2v2H9V9zm0 4h2v2H9v-2zm0 4h2v2H9v-2zm4-16h2v2h-2V1zm0 8h2v2h-2V9zm0 8h2v2h-2v-2zM1 1h2v2H1V1zm0 4h2v2H1V5zm0 4h2v2H1V9zm0 4h2v2H1v-2zm0 4h2v2H1v-2zM17 1h2v18h-2V1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-top">
-        <path d="M1 1h18v2H1V1zm0 4h2v2H1V5zm0 4h2v2H1V9zm0 4h2v2H1v-2zm0 4h2v2H1v-2zm4-8h2v2H5V9zm0 8h2v2H5v-2zM9 5h2v2H9V5zm0 4h2v2H9V9zm0 4h2v2H9v-2zm0 4h2v2H9v-2zm4-8h2v2h-2V9zm0 8h2v2h-2v-2zm4-12h2v2h-2V5zm0 4h2v2h-2V9zm0 4h2v2h-2v-2zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-border-vertical">
-        <path d="M1 1h2v2H1V1zm0 4h2v2H1V5zm0 4h2v2H1V9zm0 4h2v2H1v-2zm0 4h2v2H1v-2zM5 1h2v2H5V1zm0 8h2v2H5V9zm0 8h2v2H5v-2zM9 1h2v18H9V1zm4 0h2v2h-2V1zm0 8h2v2h-2V9zm0 8h2v2h-2v-2zm4-16h2v2h-2V1zm0 4h2v2h-2V5zm0 4h2v2h-2V9zm0 4h2v2h-2v-2zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-box">
-        <path d="M0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v2H0V2zm1 3h18v13a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5zm6 2v2h6V7H7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-brightness-down">
-        <path d="M10 13a3 3 0 1 1 0-6 3 3 0 0 1 0 6zM9 4a1 1 0 1 1 2 0 1 1 0 1 1-2 0zm4.54 1.05a1 1 0 1 1 1.41 1.41 1 1 0 1 1-1.41-1.41zM16 9a1 1 0 1 1 0 2 1 1 0 1 1 0-2zm-1.05 4.54a1 1 0 1 1-1.41 1.41 1 1 0 1 1 1.41-1.41zM11 16a1 1 0 1 1-2 0 1 1 0 1 1 2 0zm-4.54-1.05a1 1 0 1 1-1.41-1.41 1 1 0 1 1 1.41 1.41zM4 11a1 1 0 1 1 0-2 1 1 0 1 1 0 2zm1.05-4.54a1 1 0 1 1 1.41-1.41 1 1 0 1 1-1.41 1.41z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-brightness-up">
-        <path d="M10 14a4 4 0 1 1 0-8 4 4 0 0 1 0 8zM9 1a1 1 0 1 1 2 0v2a1 1 0 1 1-2 0V1zm6.65 1.94a1 1 0 1 1 1.41 1.41l-1.4 1.4a1 1 0 1 1-1.41-1.41l1.4-1.4zM18.99 9a1 1 0 1 1 0 2h-1.98a1 1 0 1 1 0-2h1.98zm-1.93 6.65a1 1 0 1 1-1.41 1.41l-1.4-1.4a1 1 0 1 1 1.41-1.41l1.4 1.4zM11 18.99a1 1 0 1 1-2 0v-1.98a1 1 0 1 1 2 0v1.98zm-6.65-1.93a1 1 0 1 1-1.41-1.41l1.4-1.4a1 1 0 1 1 1.41 1.41l-1.4 1.4zM1.01 11a1 1 0 1 1 0-2h1.98a1 1 0 1 1 0 2H1.01zm1.93-6.65a1 1 0 1 1 1.41-1.41l1.4 1.4a1 1 0 1 1-1.41 1.41l-1.4-1.4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-browser-window">
-        <path d="M0 3c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3zm2 2v12h16V5H2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-browser-window-new">
-        <path d="M9 10V8h2v2h2v2h-2v2H9v-2H7v-2h2zM0 3c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3zm2 2v12h16V5H2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-browser-window-open">
-        <path d="M0 3c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3zm2 2v12h16V5H2zm8 3l4 5H6l4-5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-bug">
-        <path d="M15.3 14.89l2.77 2.77a1 1 0 0 1 0 1.41 1 1 0 0 1-1.41 0l-2.59-2.58A5.99 5.99 0 0 1 11 18V9.04a1 1 0 0 0-2 0V18a5.98 5.98 0 0 1-3.07-1.51l-2.59 2.58a1 1 0 0 1-1.41 0 1 1 0 0 1 0-1.41l2.77-2.77A5.95 5.95 0 0 1 4.07 13H1a1 1 0 1 1 0-2h3V8.41L.93 5.34a1 1 0 0 1 0-1.41 1 1 0 0 1 1.41 0l2.1 2.1h11.12l2.1-2.1a1 1 0 0 1 1.41 0 1 1 0 0 1 0 1.41L16 8.41V11h3a1 1 0 1 1 0 2h-3.07c-.1.67-.32 1.31-.63 1.89zM15 5H5a5 5 0 1 1 10 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-buoy">
-        <path d="M17.16 6.42a8.03 8.03 0 0 0-3.58-3.58l-1.34 2.69a5.02 5.02 0 0 1 2.23 2.23l2.69-1.34zm0 7.16l-2.69-1.34a5.02 5.02 0 0 1-2.23 2.23l1.34 2.69a8.03 8.03 0 0 0 3.58-3.58zM6.42 2.84a8.03 8.03 0 0 0-3.58 3.58l2.69 1.34a5.02 5.02 0 0 1 2.23-2.23L6.42 2.84zM2.84 13.58a8.03 8.03 0 0 0 3.58 3.58l1.34-2.69a5.02 5.02 0 0 1-2.23-2.23l-2.69 1.34zM10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-7a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-calculator">
-        <path d="M2 2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2zm3 1v2h10V3H5zm0 4v2h2V7H5zm4 0v2h2V7H9zm4 0v2h2V7h-2zm-8 4v2h2v-2H5zm4 0v2h2v-2H9zm4 0v6h2v-6h-2zm-8 4v2h2v-2H5zm4 0v2h2v-2H9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-calendar">
-        <path d="M1 4c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V4zm2 2v12h14V6H3zm2-6h2v2H5V0zm8 0h2v2h-2V0zM5 9h2v2H5V9zm0 4h2v2H5v-2zm4-4h2v2H9V9zm0 4h2v2H9v-2zm4-4h2v2h-2V9zm0 4h2v2h-2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-camera">
-        <path d="M0 6c0-1.1.9-2 2-2h3l2-2h6l2 2h3a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm10 10a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm0-2a3 3 0 1 1 0-6 3 3 0 0 1 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-chart">
-        <path d="M4.13 12H4a2 2 0 1 0 1.8 1.11L7.86 10a2.03 2.03 0 0 0 .65-.07l1.55 1.55a2 2 0 1 0 3.72-.37L15.87 8H16a2 2 0 1 0-1.8-1.11L12.14 10a2.03 2.03 0 0 0-.65.07L9.93 8.52a2 2 0 1 0-3.72.37L4.13 12zM0 4c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-chart-bar">
-        <path d="M1 10h3v10H1V10zM6 0h3v20H6V0zm5 8h3v12h-3V8zm5-4h3v16h-3V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-chart-pie">
-        <path d="M19.95 11A10 10 0 1 1 9 .05V11h10.95zm-.08-2.6H11.6V.13a10 10 0 0 1 8.27 8.27z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-chat-bubble-dots">
-        <path d="M10 15l-4 4v-4H2a2 2 0 0 1-2-2V3c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-8zM5 7v2h2V7H5zm4 0v2h2V7H9zm4 0v2h2V7h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-checkmark">
-        <path d="M0 11l2-2 5 5L18 3l2 2L7 18z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-checkmark-outline">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM6.7 9.29L9 11.6l4.3-4.3 1.4 1.42L9 14.4l-3.7-3.7 1.4-1.42z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-down">
-        <path d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-left">
-        <path d="M7.05 9.293L6.343 10 12 15.657l1.414-1.414L9.172 10l4.242-4.243L12 4.343z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-outline-down">
-        <path d="M20 10a10 10 0 1 1-20 0 10 10 0 0 1 20 0zM10 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm-.7 10.54L5.75 9l1.41-1.41L10 10.4l2.83-2.82L14.24 9 10 13.24l-.7-.7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-outline-left">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm8-10a8 8 0 1 0-16 0 8 8 0 0 0 16 0zM7.46 9.3L11 5.75l1.41 1.41L9.6 10l2.82 2.83L11 14.24 6.76 10l.7-.7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-outline-right">
-        <path d="M10 0a10 10 0 1 1 0 20 10 10 0 0 1 0-20zM2 10a8 8 0 1 0 16 0 8 8 0 0 0-16 0zm10.54.7L9 14.25l-1.41-1.41L10.4 10 7.6 7.17 9 5.76 13.24 10l-.7.7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-outline-up">
-        <path d="M0 10a10 10 0 1 1 20 0 10 10 0 0 1-20 0zm10 8a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm.7-10.54L14.25 11l-1.41 1.41L10 9.6l-2.83 2.8L5.76 11 10 6.76l.7.7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-right">
-        <path d="M12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cheveron-up">
-        <path d="M10.707 7.05L10 6.343 4.343 12l1.414 1.414L10 9.172l4.243 4.242L15.657 12z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-clipboard">
-        <path d="M7.03 2.6a3 3 0 0 1 5.94 0L15 3v1h1a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h1V3l2.03-.4zM5 6H4v12h12V6h-1v1H5V6zm5-2a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-close">
-        <path d="M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-close-outline">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm1.41-1.41A8 8 0 1 0 15.66 4.34 8 8 0 0 0 4.34 15.66zm9.9-8.49L11.41 10l2.83 2.83-1.41 1.41L10 11.41l-2.83 2.83-1.41-1.41L8.59 10 5.76 7.17l1.41-1.41L10 8.59l2.83-2.83 1.41 1.41z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-close-solid">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zM11.4 10l2.83-2.83-1.41-1.41L10 8.59 7.17 5.76 5.76 7.17 8.59 10l-2.83 2.83 1.41 1.41L10 11.41l2.83 2.83 1.41-1.41L11.41 10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cloud">
-        <path d="M16.88 9.1A4 4 0 0 1 16 17H5a5 5 0 0 1-1-9.9V7a3 3 0 0 1 4.52-2.59A4.98 4.98 0 0 1 17 8c0 .38-.04.74-.12 1.1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cloud-upload">
-        <path d="M16.88 9.1A4 4 0 0 1 16 17H5a5 5 0 0 1-1-9.9V7a3 3 0 0 1 4.52-2.59A4.98 4.98 0 0 1 17 8c0 .38-.04.74-.12 1.1zM11 11h3l-4-4-4 4h3v3h2v-3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-code">
-        <path d="M.7 9.3l4.8-4.8 1.4 1.42L2.84 10l4.07 4.07-1.41 1.42L0 10l.7-.7zm18.6 1.4l.7-.7-5.49-5.49-1.4 1.42L17.16 10l-4.07 4.07 1.41 1.42 4.78-4.78z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-coffee">
-        <path d="M4 11H2a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h2V1h14v10a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4zm0-2V5H2v4h2zm-2 8v-1h18v1l-4 2H6l-4-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-cog">
-        <path d="M3.94 6.5L2.22 3.64l1.42-1.42L6.5 3.94c.52-.3 1.1-.54 1.7-.7L9 0h2l.8 3.24c.6.16 1.18.4 1.7.7l2.86-1.72 1.42 1.42-1.72 2.86c.3.52.54 1.1.7 1.7L20 9v2l-3.24.8c-.16.6-.4 1.18-.7 1.7l1.72 2.86-1.42 1.42-2.86-1.72c-.52.3-1.1.54-1.7.7L11 20H9l-.8-3.24c-.6-.16-1.18-.4-1.7-.7l-2.86 1.72-1.42-1.42 1.72-2.86c-.3-.52-.54-1.1-.7-1.7L0 11V9l3.24-.8c.16-.6.4-1.18.7-1.7zM10 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-color-palette">
-        <path d="M9 20v-1.7l.01-.24L15.07 12h2.94c1.1 0 1.99.89 1.99 2v4a2 2 0 0 1-2 2H9zm0-3.34V5.34l2.08-2.07a1.99 1.99 0 0 1 2.82 0l2.83 2.83a2 2 0 0 1 0 2.82L9 16.66zM0 1.99C0 .9.89 0 2 0h4a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zM4 17a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-compose">
-        <path d="M2 4v14h14v-6l2-2v10H0V2h10L8 4H2zm10.3-.3l4 4L8 16H4v-4l8.3-8.3zm1.4-1.4L16 0l4 4-2.3 2.3-4-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-computer-desktop">
-        <path d="M7 17H2a2 2 0 0 1-2-2V2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2h-5l4 2v1H3v-1l4-2zM2 2v11h16V2H2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-computer-laptop">
-        <path d="M18 16h2v1a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1v-1h2V4c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v12zM4 4v9h12V4H4zm4 11v1h4v-1H8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-conversation">
-        <path d="M17 11v3l-3-3H8a2 2 0 0 1-2-2V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2h-1zm-3 2v2a2 2 0 0 1-2 2H6l-3 3v-3H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h2v3a4 4 0 0 0 4 4h6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-credit-card">
-        <path d="M18 6V4H2v2h16zm0 4H2v6h16v-6zM0 4c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm4 8h4v2H4v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-currency-dollar">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm1-5h1a3 3 0 0 0 0-6H7.99a1 1 0 0 1 0-2H14V5h-3V3H9v2H8a3 3 0 1 0 0 6h4a1 1 0 1 1 0 2H6v2h3v2h2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-dashboard">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm-5.6-4.29a9.95 9.95 0 0 1 11.2 0 8 8 0 1 0-11.2 0zm6.12-7.64l3.02-3.02 1.41 1.41-3.02 3.02a2 2 0 1 1-1.41-1.41z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-date-add">
-        <path d="M15 2h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2h2V0h2v2h6V0h2v2zM3 6v12h14V6H3zm6 5V9h2v2h2v2h-2v2H9v-2H7v-2h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-dial-pad">
-        <path d="M5 4a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm5 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm5 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM5 9a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm5 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm5 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM5 14a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm5 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm5-6a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-directions">
-        <path d="M10 0l10 10-10 10L0 10 10 0zM6 10v3h2v-3h3v3l4-4-4-4v3H8a2 2 0 0 0-2 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-document">
-        <path d="M4 18h12V6h-4V2H4v16zm-2 1V0h12l4 4v16H2v-1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-document-add">
-        <path d="M9 10V8h2v2h2v2h-2v2H9v-2H7v-2h2zm-5 8h12V6h-4V2H4v16zm-2 1V0h12l4 4v16H2v-1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-dots-horizontal-double">
-        <path d="M10 9a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-dots-horizontal-triple">
-        <path d="M10 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0-6a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm0 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-download">
-        <path d="M13 8V2H7v6H2l8 8 8-8h-5zM0 18h20v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-duplicate">
-        <path d="M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2zm4 4v-2h2v2h2v2H8v2H6v-2H4v-2h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-edit-copy">
-        <path d="M6 6V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-4v4a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h4zm2 0h4a2 2 0 0 1 2 2v4h4V2H8v4zM2 8v10h10V8H2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-edit-crop">
-        <path d="M14 16H6a2 2 0 0 1-2-2V6H0V4h4V0h2v14h14v2h-4v4h-2v-4zm0-3V6H7V4h7a2 2 0 0 1 2 2v7h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-edit-cut">
-        <path d="M9.77 11.5l5.34 3.91c.44.33 1.24.59 1.79.59H20L6.89 6.38A3.5 3.5 0 1 0 5.5 8.37L7.73 10 5.5 11.63a3.5 3.5 0 1 0 1.38 1.99l2.9-2.12zM3.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM15.1 4.59A3.53 3.53 0 0 1 16.9 4H20l-7.5 5.5L10.45 8l4.65-3.41z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-edit-pencil">
-        <path d="M12.3 3.7l4 4L4 20H0v-4L12.3 3.7zm1.4-1.4L16 0l4 4-2.3 2.3-4-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-education">
-        <path d="M3.33 8L10 12l10-6-10-6L0 6h10v2H3.33zM0 8v8l2-2.22V9.2L0 8zm10 12l-5-3-2-1.2v-6l7 4.2 7-4.2v6L10 20z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-envelope">
-        <path d="M18 2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2h16zm-4.37 9.1L20 16v-2l-5.12-3.9L20 6V4l-10 8L0 4v2l5.12 4.1L0 14v2l6.37-4.9L10 14l3.63-2.9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-exclamation-outline">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM9 5h2v6H9V5zm0 8h2v2H9v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-exclamation-solid">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zM9 5v6h2V5H9zm0 8v2h2v-2H9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-explore">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zM7.88 7.88l-3.54 7.78 7.78-3.54 3.54-7.78-7.78 3.54zM10 11a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-factory">
-        <path d="M10.5 20H0V7l5 3.33V7l5 3.33V7l5 3.33V0h5v20h-9.5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-fast-forward">
-        <path d="M1 5l9 5-9 5V5zm9 0l9 5-9 5V5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-fast-rewind">
-        <path d="M19 5v10l-9-5 9-5zm-9 0v10l-9-5 9-5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-film">
-        <path d="M0 4c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm6 0v12h8V4H6zM2 5v2h2V5H2zm0 4v2h2V9H2zm0 4v2h2v-2H2zm14-8v2h2V5h-2zm0 4v2h2V9h-2zm0 4v2h2v-2h-2zM8 7l5 3-5 3V7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-filter">
-        <path d="M12 12l8-8V0H0v4l8 8v8l4-4v-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-flag">
-        <path d="M7.667 12H2v8H0V0h12l.333 2H20l-3 6 3 6H8l-.333-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-flashlight">
-        <path d="M13 7v11a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2V7L5 5V3h10v2l-2 2zM9 8v1a1 1 0 1 0 2 0V8a1 1 0 0 0-2 0zM5 0h10v2H5V0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-folder">
-        <path d="M0 4c0-1.1.9-2 2-2h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-folder-outline">
-        <path d="M0 4c0-1.1.9-2 2-2h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2 2v10h16V6H2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-folder-outline-add">
-        <path d="M0 4c0-1.1.9-2 2-2h7l2 2h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2 2v10h16V6H2zm7 4V8h2v2h2v2h-2v2H9v-2H7v-2h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-format-bold">
-        <path d="M3 19V1h8a5 5 0 0 1 3.88 8.16A5.5 5.5 0 0 1 11.5 19H3zm7.5-8H7v5h3.5a2.5 2.5 0 1 0 0-5zM7 4v4h3a2 2 0 1 0 0-4H7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-format-italic">
-        <path d="M8 1h9v2H8V1zm3 2h3L8 17H5l6-14zM2 17h9v2H2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-format-text-size">
-        <path d="M16 9v8h-2V9h-4V7h10v2h-4zM8 5v12H6V5H0V3h15v2H8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-format-underline">
-        <path d="M16 9A6 6 0 1 1 4 9V1h3v8a3 3 0 0 0 6 0V1h3v8zM2 17h16v2H2v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-gift">
-        <path d="M14.83 4H20v6h-1v10H1V10H0V4h5.17A3 3 0 0 1 10 .76 3 3 0 0 1 14.83 4zM8 10H3v8h5v-8zm4 0v8h5v-8h-5zM8 6H2v2h6V6zm4 0v2h6V6h-6zM8 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm4 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-globe">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm2-2.25a8 8 0 0 0 4-2.46V9a2 2 0 0 1-2-2V3.07a7.95 7.95 0 0 0-3-1V3a2 2 0 0 1-2 2v1a2 2 0 0 1-2 2v2h3a2 2 0 0 1 2 2v5.75zm-4 0V15a2 2 0 0 1-2-2v-1h-.5A1.5 1.5 0 0 1 4 10.5V8H2.25A8.01 8.01 0 0 0 8 17.75z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-hand-stop">
-        <path d="M17 16a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4.01V4a1 1 0 0 1 1-1 1 1 0 0 1 1 1v6h1V2a1 1 0 0 1 1-1 1 1 0 0 1 1 1v8h1V1a1 1 0 1 1 2 0v9h1V2a1 1 0 0 1 1-1 1 1 0 0 1 1 1v13h1V9a1 1 0 0 1 1-1h1v8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-hard-drive">
-        <path d="M2 2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2zm10.4 5.6A5 5 0 1 0 15 12V5l-2.6 2.6zM10 14a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM6 3v2h4V3H6zM4 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 16a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm12 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0-16a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-headphones">
-        <path d="M16 8A6 6 0 1 0 4 8v11H2a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2V8a8 8 0 1 1 16 0v3a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2V8zm-4 2h3v10h-3V10zm-7 0h3v10H5V10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-heart">
-        <path d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.78 7.77L10 18.78l8.39-8.4a5.5 5.5 0 0 0-7.78-7.77l-.61.61z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-home">
-        <path d="M8 20H3V10H0L10 0l10 10h-3v10h-5v-6H8v6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-hot">
-        <path d="M10 0s8 7.58 8 12a8 8 0 1 1-16 0c0-1.5.91-3.35 2.12-5.15A3 3 0 0 0 10 6V0zM8 0a3 3 0 1 0 0 6V0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-hour-glass">
-        <path d="M3 18a7 7 0 0 1 4-6.33V8.33A7 7 0 0 1 3 2H1V0h18v2h-2a7 7 0 0 1-4 6.33v3.34A7 7 0 0 1 17 18h2v2H1v-2h2zM5 2a5 5 0 0 0 4 4.9V10h2V6.9A5 5 0 0 0 15 2H5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-inbox">
-        <path d="M0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm14 12h4V2H2v12h4c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-inbox-check">
-        <path d="M0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm14 12h4V2H2v12h4c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2zM5 9l2-2 2 2 4-4 2 2-6 6-4-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-inbox-download">
-        <path d="M0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm14 12h4V2H2v12h4c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2zM9 8V5h2v3h3l-4 4-4-4h3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-inbox-full">
-        <path d="M14 14h4V2H2v12h4c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2zM0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm4 2h12v2H4V4zm0 3h12v2H4V7zm0 3h12v2H4v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-indent-decrease">
-        <path d="M1 1h18v2H1V1zm6 8h12v2H7V9zm-6 8h18v2H1v-2zM7 5h12v2H7V5zm0 8h12v2H7v-2zM5 6v8l-4-4 4-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-indent-increase">
-        <path d="M1 1h18v2H1V1zm6 8h12v2H7V9zm-6 8h18v2H1v-2zM7 5h12v2H7V5zm0 8h12v2H7v-2zM1 6l4 4-4 4V6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-information-outline">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM9 11V9h2v6H9v-4zm0-6h2v2H9V5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-information-solid">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zM9 11v4h2V9H9v2zm0-6v2h2V5H9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-key">
-        <path d="M12.26 11.74L10 14H8v2H6v2l-2 2H0v-4l8.26-8.26a6 6 0 1 1 4 4zm4.86-4.62A3 3 0 0 0 15 2a3 3 0 0 0-2.12.88l4.24 4.24z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-keyboard">
-        <path d="M0 6c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6zm2 0v2h2V6H2zm1 3v2h2V9H3zm-1 3v2h2v-2H2zm3 0v2h10v-2H5zm11 0v2h2v-2h-2zM6 9v2h2V9H6zm3 0v2h2V9H9zm3 0v2h2V9h-2zm3 0v2h2V9h-2zM5 6v2h2V6H5zm3 0v2h2V6H8zm3 0v2h2V6h-2zm3 0v2h4V6h-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-layers">
-        <path d="M10 1l10 6-10 6L0 7l10-6zm6.67 10L20 13l-10 6-10-6 3.33-2L10 15l6.67-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-library">
-        <path d="M0 6l10-6 10 6v2H0V6zm0 12h20v2H0v-2zm2-2h16v2H2v-2zm0-8h4v8H2V8zm6 0h4v8H8V8zm6 0h4v8h-4V8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-light-bulb">
-        <path d="M7 13.33a7 7 0 1 1 6 0V16H7v-2.67zM7 17h6v1.5c0 .83-.67 1.5-1.5 1.5h-3A1.5 1.5 0 0 1 7 18.5V17zm2-5.1V14h2v-2.1a5 5 0 1 0-2 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-link">
-        <path d="M9.26 13a2 2 0 0 1 .01-2.01A3 3 0 0 0 9 5H5a3 3 0 0 0 0 6h.08a6.06 6.06 0 0 0 0 2H5A5 5 0 0 1 5 3h4a5 5 0 0 1 .26 10zm1.48-6a2 2 0 0 1-.01 2.01A3 3 0 0 0 11 15h4a3 3 0 0 0 0-6h-.08a6.06 6.06 0 0 0 0-2H15a5 5 0 0 1 0 10h-4a5 5 0 0 1-.26-10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-list-add">
-        <path d="M15 9h-3v2h3v3h2v-3h3V9h-3V6h-2v3zM0 3h10v2H0V3zm0 8h10v2H0v-2zm0-4h10v2H0V7zm0 8h10v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-list-bullet">
-        <path d="M1 4h2v2H1V4zm4 0h14v2H5V4zM1 9h2v2H1V9zm4 0h14v2H5V9zm-4 5h2v2H1v-2zm4 0h14v2H5v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-load-balancer">
-        <path d="M17 12h-6v4h1v4H8v-4h1v-4H3v4h1v4H0v-4h1v-4a2 2 0 0 1 2-2h6V6H7V0h6v6h-2v4h6a2 2 0 0 1 2 2v4h1v4h-4v-4h1v-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location">
-        <path d="M10 20S3 10.87 3 7a7 7 0 1 1 14 0c0 3.87-7 13-7 13zm0-11a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-current">
-        <path d="M0 0l20 8-8 4-2 8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-food">
-        <path d="M18 11v7a2 2 0 0 1-4 0v-5h-2V3a3 3 0 0 1 3-3h3v11zM4 10a2 2 0 0 1-2-2V1a1 1 0 0 1 2 0v4h1V1a1 1 0 0 1 2 0v4h1V1a1 1 0 0 1 2 0v7a2 2 0 0 1-2 2v8a2 2 0 0 1-4 0v-8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-gas-station">
-        <path d="M13 18h1v2H0v-2h1V2c0-1.1.9-2 2-2h8a2 2 0 0 1 2 2v16zM3 2v6h8V2H3zm10 8h1a2 2 0 0 1 2 2v3a1 1 0 0 0 2 0v-5l-2-2V6l-2-2 1-1 5 5v7a3 3 0 0 1-6 0v-3h-1v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-hotel">
-        <path d="M2 12h18v6h-2v-2H2v2H0V2h2v10zm8-6h8a2 2 0 0 1 2 2v3H10V6zm-4 5a3 3 0 1 1 0-6 3 3 0 0 1 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-marina">
-        <path d="M8 1.88V0h2v16h10l-4 4H2l-2-4h8v-2H0v-.26A24.03 24.03 0 0 0 8 1.88zM19.97 14H10v-.36A11.94 11.94 0 0 0 10 .36v-.2A16.01 16.01 0 0 1 19.97 14z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-park">
-        <path d="M5.33 12.77A4 4 0 1 1 3 5.13V5a4 4 0 0 1 5.71-3.62 3.5 3.5 0 0 1 6.26 1.66 2.5 2.5 0 0 1 2 2.08 4 4 0 1 1-2.7 7.49A5.02 5.02 0 0 1 12 14.58V18l2 1v1H6v-1l2-1v-3l-2.67-2.23zM5 10l3 3v-3H5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-restroom">
-        <path d="M12 16H9l2-4.5V9c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v2.5l2 4.5h-3v4h-4v-4zm-5-3h2V9a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v4h2v7h4v-7zM5 6a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm9 0a3 3 0 1 1 0-6 3 3 0 0 1 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-location-shopping">
-        <path d="M16 6v2h2l2 12H0L2 8h2V6a6 6 0 1 1 12 0zm-2 0a4 4 0 1 0-8 0v2h8V6zM4 10v2h2v-2H4zm10 0v2h2v-2h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-lock-closed">
-        <path d="M4 8V6a6 6 0 1 1 12 0v2h1a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-8c0-1.1.9-2 2-2h1zm5 6.73V17h2v-2.27a2 2 0 1 0-2 0zM7 6v2h6V6a3 3 0 0 0-6 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-lock-open">
-        <path d="M4 8V6a6 6 0 1 1 12 0h-3v2h4a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-8c0-1.1.9-2 2-2h1zm5 6.73V17h2v-2.27a2 2 0 1 0-2 0zM7 6v2h6V6a3 3 0 0 0-6 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-map">
-        <path d="M0 0l6 4 8-4 6 4v16l-6-4-8 4-6-4V0zm7 6v11l6-3V3L7 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-menu">
-        <path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-mic">
-        <path d="M9 18v-1.06A8 8 0 0 1 2 9h2a6 6 0 1 0 12 0h2a8 8 0 0 1-7 7.94V18h3v2H6v-2h3zM6 4a4 4 0 1 1 8 0v5a4 4 0 1 1-8 0V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-minus-outline">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm5-9v2H5V9h10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-minus-solid">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm5-11H5v2h10V9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-mobile-devices">
-        <path d="M17 6V5h-2V2H3v14h5v4h3.25H11a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6zm-5.75 14H3a2 2 0 0 1-2-2V2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v4a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5.75zM11 8v8h6V8h-6zm3 11a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-mood-happy">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM6.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm7 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm2.16 3a6 6 0 0 1-11.32 0h11.32z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-mood-sad">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM6.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm7 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm2.16 6H4.34a6 6 0 0 1 11.32 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-mouse">
-        <path d="M4 9V6A6 6 0 0 1 9 .08V9H4zm0 2v3a6 6 0 1 0 12 0v-3H4zm12-2V6a6 6 0 0 0-5-5.92V9h5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-music-album">
-        <path d="M0 0h20v20H0V0zm10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm0-5a3 3 0 1 1 0-6 3 3 0 0 1 0 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-music-artist">
-        <path d="M15.75 8l-3.74-3.75a3.99 3.99 0 0 1 6.82-3.08A4 4 0 0 1 15.75 8zm-13.9 7.3l9.2-9.19 2.83 2.83-9.2 9.2-2.82-2.84zm-1.4 2.83l2.11-2.12 1.42 1.42-2.12 2.12-1.42-1.42zM10 15l2-2v7h-2v-5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-music-notes">
-        <path d="M20 2.5V0L6 2v12.17A3 3 0 0 0 5 14H3a3 3 0 0 0 0 6h2a3 3 0 0 0 3-3V5.71L18 4.3v7.88a3 3 0 0 0-1-.17h-2a3 3 0 0 0 0 6h2a3 3 0 0 0 3-3V2.5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-music-playlist">
-        <path d="M16 17a3 3 0 0 1-3 3h-2a3 3 0 0 1 0-6h2a3 3 0 0 1 1 .17V1l6-1v4l-4 .67V17zM0 3h12v2H0V3zm0 4h12v2H0V7zm0 4h12v2H0v-2zm0 4h6v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-navigation-more">
-        <path d="M4 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm6 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm6 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-network">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm7.75-8a8.01 8.01 0 0 0 0-4h-3.82a28.81 28.81 0 0 1 0 4h3.82zm-.82 2h-3.22a14.44 14.44 0 0 1-.95 3.51A8.03 8.03 0 0 0 16.93 14zm-8.85-2h3.84a24.61 24.61 0 0 0 0-4H8.08a24.61 24.61 0 0 0 0 4zm.25 2c.41 2.4 1.13 4 1.67 4s1.26-1.6 1.67-4H8.33zm-6.08-2h3.82a28.81 28.81 0 0 1 0-4H2.25a8.01 8.01 0 0 0 0 4zm.82 2a8.03 8.03 0 0 0 4.17 3.51c-.42-.96-.74-2.16-.95-3.51H3.07zm13.86-8a8.03 8.03 0 0 0-4.17-3.51c.42.96.74 2.16.95 3.51h3.22zm-8.6 0h3.34c-.41-2.4-1.13-4-1.67-4S8.74 3.6 8.33 6zM3.07 6h3.22c.2-1.35.53-2.55.95-3.51A8.03 8.03 0 0 0 3.07 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-news-paper">
-        <path d="M16 2h4v15a3 3 0 0 1-3 3H3a3 3 0 0 1-3-3V0h16v2zm0 2v13a1 1 0 0 0 1 1 1 1 0 0 0 1-1V4h-2zM2 2v15a1 1 0 0 0 1 1h11.17a2.98 2.98 0 0 1-.17-1V2H2zm2 8h8v2H4v-2zm0 4h8v2H4v-2zM4 4h8v4H4V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-notifications">
-        <path d="M4 8a6 6 0 0 1 4.03-5.67 2 2 0 1 1 3.95 0A6 6 0 0 1 16 8v6l3 2v1H1v-1l3-2V8zm8 10a2 2 0 1 1-4 0h4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-notifications-outline">
-        <path d="M6 8v7h8V8a4 4 0 1 0-8 0zm2.03-5.67a2 2 0 1 1 3.95 0A6 6 0 0 1 16 8v6l3 2v1H1v-1l3-2V8a6 6 0 0 1 4.03-5.67zM12 18a2 2 0 1 1-4 0h4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-paste">
-        <path d="M10.5 20H2a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h1V3l2.03-.4a3 3 0 0 1 5.94 0L13 3v1h1a2 2 0 0 1 2 2v1h-2V6h-1v1H3V6H2v12h5v2h3.5zM8 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm2 4h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-8a2 2 0 0 1-2-2v-8c0-1.1.9-2 2-2zm0 2v8h8v-8h-8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-pause">
-        <path d="M5 4h3v12H5V4zm7 0h3v12h-3V4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-pause-outline">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM7 6h2v8H7V6zm4 0h2v8h-2V6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-pause-solid">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zM7 6v8h2V6H7zm4 0v8h2V6h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-pen-tool">
-        <path d="M11 9.27V0l6 11-4 6H7l-4-6L9 0v9.27a2 2 0 1 0 2 0zM6 18h8v2H6v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-phone">
-        <path d="M20 18.35V19a1 1 0 0 1-1 1h-2A17 17 0 0 1 0 3V1a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4c0 .56-.31 1.31-.7 1.7L3.16 8.84c1.52 3.6 4.4 6.48 8 8l2.12-2.12c.4-.4 1.15-.71 1.7-.71H19a1 1 0 0 1 .99 1v3.35z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-photo">
-        <path d="M0 4c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm11 9l-3-3-6 6h16l-5-5-2 2zm4-4a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-php-elephant">
-        <path fill-rule="evenodd"
-              d="M10 12v8A10 10 0 0 1 8.17.17L10 2h5a5 5 0 0 1 5 4.99v9.02A4 4 0 0 1 16 20v-2a2 2 0 1 0 0-4h-4l-2-2zm5.5-3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-pin">
-        <path d="M11 12h6v-1l-3-1V2l3-1V0H3v1l3 1v8l-3 1v1h6v7l1 1 1-1v-7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-play">
-        <path d="M4 4l12 6-12 6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-play-outline">
-        <path d="M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM7 6l8 4-8 4V6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-plugin">
-        <path d="M20 14v4a2 2 0 0 1-2 2h-4v-2a2 2 0 0 0-2-2 2 2 0 0 0-2 2v2H6a2 2 0 0 1-2-2v-4H2a2 2 0 0 1-2-2 2 2 0 0 1 2-2h2V6c0-1.1.9-2 2-2h4V2a2 2 0 0 1 2-2 2 2 0 0 1 2 2v2h4a2 2 0 0 1 2 2v4h-2a2 2 0 0 0-2 2 2 2 0 0 0 2 2h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-portfolio">
-        <path d="M9 12H1v6a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-6h-8v2H9v-2zm0-1H0V5c0-1.1.9-2 2-2h4V2a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1h4a2 2 0 0 1 2 2v6h-9V9H9v2zm3-8V2H8v1h4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-printer">
-        <path d="M4 16H0V6h20v10h-4v4H4v-4zm2-4v6h8v-6H6zM4 0h12v5H4V0zM2 8v2h2V8H2zm4 0v2h2V8H6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-pylon">
-        <path d="M17.4 18H20v2H0v-2h2.6L8 0h4l5.4 18zm-3.2-4H5.8l-1.2 4h10.8l-1.2-4zm-2.4-8H8.2L7 10h6l-1.2-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-question">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm2-13c0 .28-.21.8-.42 1L10 9.58c-.57.58-1 1.6-1 2.42v1h2v-1c0-.29.21-.8.42-1L13 9.42c.57-.58 1-1.6 1-2.42a4 4 0 1 0-8 0h2a2 2 0 1 1 4 0zm-3 8v2h2v-2H9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-queue">
-        <path d="M0 2h20v4H0V2zm0 8h20v2H0v-2zm0 6h20v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-radar">
-        <path d="M12 10a2 2 0 0 1-3.41 1.41A2 2 0 0 1 10 8V0a9.97 9.97 0 0 1 10 10h-8zm7.9 1.41A10 10 0 1 1 8.59.1v2.03a8 8 0 1 0 9.29 9.29h2.02zm-4.07 0a6 6 0 1 1-7.25-7.25v2.1a3.99 3.99 0 0 0-1.4 6.57 4 4 0 0 0 6.56-1.42h2.1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-radio">
-        <path d="M20 9v9a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h13.8L.74 1.97 1.26.03 20 5.06V9zm-5 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM2 8v2h16V8H2zm1.5 10a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm5 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm6.5-1a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-refresh">
-        <path d="M10 3v2a5 5 0 0 0-3.54 8.54l-1.41 1.41A7 7 0 0 1 10 3zm4.95 2.05A7 7 0 0 1 10 17v-2a5 5 0 0 0 3.54-8.54l1.41-1.41zM10 20l-4-4 4-4v8zm0-12V0l4 4-4 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-reload">
-        <path d="M14.66 15.66A8 8 0 1 1 17 10h-2a6 6 0 1 0-1.76 4.24l1.42 1.42zM12 10h8l-4 4-4-4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-reply">
-        <path d="M15 17v-2.99A4 4 0 0 0 11 10H8v5L2 9l6-6v5h3a6 6 0 0 1 6 6v3h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-reply-all">
-        <path d="M18 17v-2.99A4 4 0 0 0 14 10h-3v5L5 9l6-6v5h3a6 6 0 0 1 6 6v3h-2zM6 6V3L0 9l6 6v-3L3 9l3-3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-repost">
-        <path d="M5 4a2 2 0 0 0-2 2v6H0l4 4 4-4H5V6h7l2-2H5zm10 4h-3l4-4 4 4h-3v6a2 2 0 0 1-2 2H6l2-2h7V8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-save-disk">
-        <path d="M0 2C0 .9.9 0 2 0h14l4 4v14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm5 0v6h10V2H5zm6 1h3v4h-3V3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-screen-full">
-        <path d="M2.8 15.8L0 13v7h7l-2.8-2.8 4.34-4.32-1.42-1.42L2.8 15.8zM17.2 4.2L20 7V0h-7l2.8 2.8-4.34 4.32 1.42 1.42L17.2 4.2zm-1.4 13L13 20h7v-7l-2.8 2.8-4.32-4.34-1.42 1.42 4.33 4.33zM4.2 2.8L7 0H0v7l2.8-2.8 4.32 4.34 1.42-1.42L4.2 2.8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-search">
-        <path d="M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-sendRequest">
-        <path d="M0 0l20 10L0 20V0zm0 8v4l10-2L0 8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-servers">
-        <path d="M0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm0 7c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V9zm0 7c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2zM12 2v2h2V2h-2zm4 0v2h2V2h-2zm-4 7v2h2V9h-2zm4 0v2h2V9h-2zm-4 7v2h2v-2h-2zm4 0v2h2v-2h-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-share">
-        <path d="M4 10c0-1.1.9-2 2-2h8c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2H6c-1.1 0-2-.9-2-2v-8zm2 0v8h8v-8h-2V8H8v2H6zm3-6.17V16h2V3.83l3.07 3.07 1.42-1.41L10 0l-.7.7-4.8 4.8 1.42 1.4L9 3.84z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-share-alt">
-        <path d="M5.08 12.16A2.99 2.99 0 0 1 0 10a3 3 0 0 1 5.08-2.16l8.94-4.47a3 3 0 1 1 .9 1.79L5.98 9.63a3.03 3.03 0 0 1 0 .74l8.94 4.47A2.99 2.99 0 0 1 20 17a3 3 0 1 1-5.98-.37l-8.94-4.47z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-shield">
-        <path d="M19 11a7.5 7.5 0 0 1-3.5 5.94L10 20l-5.5-3.06A7.5 7.5 0 0 1 1 11V3c3.38 0 6.5-1.12 9-3 2.5 1.89 5.62 3 9 3v8zm-9 1.08l2.92 2.04-1.03-3.41 2.84-2.15-3.56-.08L10 5.12 8.83 8.48l-3.56.08L8.1 10.7l-1.03 3.4L10 12.09z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-shopping-cart">
-        <path d="M4 2h16l-3 9H4a1 1 0 1 0 0 2h13v2H4a3 3 0 0 1 0-6h.33L3 5 2 2H0V0h3a1 1 0 0 1 1 1v1zm1 18a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm10 0a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-show-sidebar">
-        <path d="M7 3H2v14h5V3zm2 0v14h9V3H9zM0 3c0-1.1.9-2 2-2h16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3zm3 1h3v2H3V4zm0 3h3v2H3V7zm0 3h3v2H3v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-shuffle">
-        <path d="M6.59 12.83L4.4 15c-.58.58-1.59 1-2.4 1H0v-2h2c.29 0 .8-.2 1-.41l2.17-2.18 1.42 1.42zM16 4V1l4 4-4 4V6h-2c-.29 0-.8.2-1 .41l-2.17 2.18L9.4 7.17 11.6 5c.58-.58 1.59-1 2.41-1h2zm0 10v-3l4 4-4 4v-3h-2c-.82 0-1.83-.42-2.41-1l-8.6-8.59C2.8 6.21 2.3 6 2 6H0V4h2c.82 0 1.83.42 2.41 1l8.6 8.59c.2.2.7.41.99.41h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-star-full">
-        <path d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-station">
-        <path d="M9 11.73a2 2 0 1 1 2 0V20H9v-8.27zm5.24 2.51l-1.41-1.41A3.99 3.99 0 0 0 10 6a4 4 0 0 0-2.83 6.83l-1.41 1.41a6 6 0 1 1 8.49 0zm2.83 2.83l-1.41-1.41a8 8 0 1 0-11.31 0l-1.42 1.41a10 10 0 1 1 14.14 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-step-backward">
-        <path d="M4 5h3v10H4V5zm12 0v10l-9-5 9-5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-step-forward">
-        <path d="M13 5h3v10h-3V5zM4 5l9 5-9 5V5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-stethoscope">
-        <path d="M17 10.27V4.99a1 1 0 0 0-2 0V15a5 5 0 0 1-10 0v-1.08A6 6 0 0 1 0 8V2C0 .9.9 0 2 0h1a1 1 0 0 1 1 1 1 1 0 0 1-1 1H2v6a4 4 0 1 0 8 0V2H9a1 1 0 0 1-1-1 1 1 0 0 1 1-1h1a2 2 0 0 1 2 2v6a6 6 0 0 1-5 5.92V15a3 3 0 0 0 6 0V5a3 3 0 0 1 6 0v5.27a2 2 0 1 1-2 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-store-front">
-        <path d="M18 9.87V20H2V9.87a4.25 4.25 0 0 0 3-.38V14h10V9.5a4.26 4.26 0 0 0 3 .37zM3 0h4l-.67 6.03A3.43 3.43 0 0 1 3 9C1.34 9 .42 7.73.95 6.15L3 0zm5 0h4l.7 6.3c.17 1.5-.91 2.7-2.42 2.7h-.56A2.38 2.38 0 0 1 7.3 6.3L8 0zm5 0h4l2.05 6.15C19.58 7.73 18.65 9 17 9a3.42 3.42 0 0 1-3.33-2.97L13 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-stroke-width">
-        <path d="M0 0h20v5H0V0zm0 7h20v4H0V7zm0 6h20v3H0v-3zm0 5h20v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-subdirectory-left">
-        <path d="M18 12v1H8v5l-6-6 6-6v5h8V2h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-subdirectory-right">
-        <path d="M3.5 13H12v5l6-6-6-6v5H4V2H2v11z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-swap">
-        <path d="M9 6a4 4 0 1 1 8 0v8h3l-4 4-4-4h3V6a2 2 0 0 0-2-2 2 2 0 0 0-2 2v8a4 4 0 1 1-8 0V6H0l4-4 4 4H5v8a2 2 0 0 0 2 2 2 2 0 0 0 2-2V6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-tablet">
-        <path d="M2 2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2zm2 0v14h12V2H4zm6 17a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-tag">
-        <path d="M0 10V2l2-2h8l10 10-10 10L0 10zm4.5-4a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-target">
-        <path d="M17.94 11H13V9h4.94A8 8 0 0 0 11 2.06V7H9V2.06A8 8 0 0 0 2.06 9H7v2H2.06A8 8 0 0 0 9 17.94V13h2v4.94A8 8 0 0 0 17.94 11zM10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-text-box">
-        <path d="M0 0h6v6H0V0zm2 2v2h2V2H2zm12-2h6v6h-6V0zm2 2v2h2V2h-2zm-2 12h6v6h-6v-6zm2 2v2h2v-2h-2zM0 14h6v6H0v-6zm2 2v2h2v-2H2zM6 2h8v2H6V2zm0 14h8v2H6v-2zM16 6h2v8h-2V6zM2 6h2v8H2V6zm5 1h6v2H7V7zm2 2h2v4H9V9z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-text-decoration">
-        <path d="M12 5h-2v12H8V3h8v2h-2v12h-2V5zM8 3a4 4 0 1 0 0 8V3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-thermometer">
-        <path d="M9 11.17V7h2v4.17a3 3 0 1 1-2 0zm-1-.63a4 4 0 1 0 4 0V4a2 2 0 1 0-4 0v6.53zM6 9.53V4a4 4 0 0 1 8 0v5.53A5.99 5.99 0 0 1 10 20 6 6 0 0 1 6 9.53z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-thumbs-down">
-        <path d="M11 20a2 2 0 0 1-2-2v-6H2a2 2 0 0 1-2-2V8l2.3-6.12A3.11 3.11 0 0 1 5 0h8a2 2 0 0 1 2 2v8l-3 7v3h-1zm6-10V0h3v10h-3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-thumbs-up">
-        <path d="M11 0h1v3l3 7v8a2 2 0 0 1-2 2H5c-1.1 0-2.31-.84-2.7-1.88L0 12v-2a2 2 0 0 1 2-2h7V2a2 2 0 0 1 2-2zm6 10h3v10h-3V10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-ticket">
-        <path d="M20 12v5H0v-5a2 2 0 1 0 0-4V3h20v5a2 2 0 1 0 0 4zM3 5v10h14V5H3zm7 7.08l-2.92 2.04L8.1 10.7 5.27 8.56l3.56-.08L10 5.12l1.17 3.36 3.56.08-2.84 2.15 1.03 3.4L10 12.09z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-time">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm-1-7.59V4h2v5.59l3.95 3.95-1.41 1.41L9 10.41z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-timer">
-        <path d="M16.32 7.1A8 8 0 1 1 9 4.06V2h2v2.06c1.46.18 2.8.76 3.9 1.62l1.46-1.46 1.42 1.42-1.46 1.45zM10 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12zM7 0h6v2H7V0zm5.12 8.46l1.42 1.42L10 13.4 8.59 12l3.53-3.54z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-translate">
-        <path d="M7.41 9l2.24 2.24-.83 2L6 10.4l-3.3 3.3-1.4-1.42L4.58 9l-.88-.88c-.53-.53-1-1.3-1.3-2.12h2.2c.15.28.33.53.51.7l.89.9.88-.88C7.48 6.1 8 4.84 8 4H0V2h5V0h2v2h5v2h-2c0 1.37-.74 3.15-1.7 4.12L7.4 9zm3.84 8L10 20H8l5-12h2l5 12h-2l-1.25-3h-5.5zm.83-2h3.84L14 10.4 12.08 15z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-trash">
-        <path d="M6 2l2-2h4l2 2h4v2H2V2h4zM3 6h14l-1 14H4L3 6zm5 2v10h1V8H8zm3 0v10h1V8h-1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-travel-bus">
-        <path d="M13 18H7v1a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1a2 2 0 0 1-2-2V2c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1zM4 5v6h5V5H4zm7 0v6h5V5h-5zM5 2v1h10V2H5zm.5 14a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm9 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-travel-car">
-        <path d="M2 14v-3H1a1 1 0 0 1-1-1 1 1 0 0 1 1-1h1l4-7h8l4 7h1a1 1 0 0 1 1 1 1 1 0 0 1-1 1h-1v6a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1H5v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-3zm13.86-5L13 4H7L4.14 9h11.72zM5.5 14a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm9 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-travel-case">
-        <path d="M14 5h2v14H4V5h2V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v1zm3 0h1a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1V5zM3 5v14H2a2 2 0 0 1-2-2V7c0-1.1.9-2 2-2h1zm5-1v1h4V4H8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-travel-taxi-cab">
-        <path d="M12 3h2l4 7h1a1 1 0 0 1 1 1 1 1 0 0 1-1 1h-1v6a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1H5v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-6H1a1 1 0 0 1-1-1 1 1 0 0 1 1-1h1l4-7h2V1h4v2zm3.86 7L13 5H7l-2.86 5h11.72zM5.5 15a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm9 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-travel-train">
-        <path d="M12 18H8l-2 2H3l2-2a2 2 0 0 1-2-2V2c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2l2 2h-3l-2-2zM5 5v6h10V5H5zm1.5 11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm7 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM8 2v1h4V2H8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-travel-walk">
-        <path d="M11 7l1.44 2.16c.31.47 1.01.84 1.57.84H17V8h-3l-1.44-2.16a5.94 5.94 0 0 0-1.4-1.4l-1.32-.88a1.72 1.72 0 0 0-1.7-.04L4 6v5h2V7l2-1-3 14h2l2.35-7.65L11 14v6h2v-8l-2.7-2.7L11 7zm1-3a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-trophy">
-        <path d="M15 9a3 3 0 0 0 3-3h2a5 5 0 0 1-5.1 5 5 5 0 0 1-3.9 3.9V17l5 2v1H4v-1l5-2v-2.1A5 5 0 0 1 5.1 11H5a5 5 0 0 1-5-5h2a3 3 0 0 0 3 3V4H2v2H0V2h5V0h10v2h5v4h-2V4h-3v5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-tuning">
-        <path d="M17 16v4h-2v-4h-2v-3h6v3h-2zM1 9h6v3H1V9zm6-4h6v3H7V5zM3 0h2v8H3V0zm12 0h2v12h-2V0zM9 0h2v4H9V0zM3 12h2v8H3v-8zm6-4h2v12H9V8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-upload">
-        <path d="M13 10v6H7v-6H2l8-8 8 8h-5zM0 18h20v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-usb">
-        <path d="M15 8v2h-4V4h2l-3-4-3 4h2v8H5V9.73a2 2 0 1 0-2 0V12a2 2 0 0 0 2 2h4v2.27a2 2 0 1 0 2 0V12h4a2 2 0 0 0 2-2V8h1V4h-4v4h1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-user">
-        <path d="M5 5a5 5 0 0 1 10 0v2A5 5 0 0 1 5 7V5zM0 16.68A19.9 19.9 0 0 1 10 14c3.64 0 7.06.97 10 2.68V20H0v-3.32z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-user-add">
-        <path d="M2 6H0v2h2v2h2V8h2V6H4V4H2v2zm7 0a3 3 0 0 1 6 0v2a3 3 0 0 1-6 0V6zm11 9.14A15.93 15.93 0 0 0 12 13c-2.91 0-5.65.78-8 2.14V18h16v-2.86z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-user-group">
-        <path d="M7 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0 1c2.15 0 4.2.4 6.1 1.09L12 16h-1.25L10 20H4l-.75-4H2L.9 10.09A17.93 17.93 0 0 1 7 9zm8.31.17c1.32.18 2.59.48 3.8.92L18 16h-1.25L16 20h-3.96l.37-2h1.25l1.65-8.83zM13 0a4 4 0 1 1-1.33 7.76 5.96 5.96 0 0 0 0-7.52C12.1.1 12.53 0 13 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-user-solid-circle">
-        <path d="M10 20a10 10 0 1 1 0-20 10 10 0 0 1 0 20zM7 6v2a3 3 0 1 0 6 0V6a3 3 0 1 0-6 0zm-3.65 8.44a8 8 0 0 0 13.3 0 15.94 15.94 0 0 0-13.3 0z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-user-solid-square">
-        <path d="M0 2C0 .9.9 0 2 0h16a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm7 4v2a3 3 0 1 0 6 0V6a3 3 0 1 0-6 0zm11 9.14A15.93 15.93 0 0 0 10 13c-2.91 0-5.65.78-8 2.14V18h16v-2.86z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-vector">
-        <path d="M12 4h4.27a2 2 0 1 1 0 2h-2.14a9 9 0 0 1 4.84 7.25 2 2 0 1 1-2 .04 7 7 0 0 0-4.97-6V8H8v-.71a7 7 0 0 0-4.96 6 2 2 0 1 1-2-.04A9 9 0 0 1 5.86 6H3.73a2 2 0 1 1 0-2H8V3h4v1z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-video-camera">
-        <path d="M16 7l4-4v14l-4-4v3a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2h12a2 2 0 0 1 2 2v3zm-8 7a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0-2a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-view-carousel">
-        <path d="M16 16v2H4v-2H0V4h4V2h12v2h4v12h-4zM14 5.5V4H6v12h8V5.5zm2 .5v8h2V6h-2zM4 6H2v8h2V6z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-view-column">
-        <path d="M12 4H8v12h4V4zm2 0v12h4V4h-4zM6 4H2v12h4V4zM0 2h20v16H0V2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-view-hide">
-        <path d="M12.81 4.36l-1.77 1.78a4 4 0 0 0-4.9 4.9l-2.76 2.75C2.06 12.79.96 11.49.2 10a11 11 0 0 1 12.6-5.64zm3.8 1.85c1.33 1 2.43 2.3 3.2 3.79a11 11 0 0 1-12.62 5.64l1.77-1.78a4 4 0 0 0 4.9-4.9l2.76-2.75zm-.25-3.99l1.42 1.42L3.64 17.78l-1.42-1.42L16.36 2.22z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-view-list">
-        <path d="M0 3h20v2H0V3zm0 4h20v2H0V7zm0 4h20v2H0v-2zm0 4h20v2H0v-2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-view-show">
-        <path d="M.2 10a11 11 0 0 1 19.6 0A11 11 0 0 1 .2 10zm9.8 4a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0-2a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-view-tile">
-        <path d="M0 0h9v9H0V0zm2 2v5h5V2H2zm-2 9h9v9H0v-9zm2 2v5h5v-5H2zm9-13h9v9h-9V0zm2 2v5h5V2h-5zm-2 9h9v9h-9v-9zm2 2v5h5v-5h-5z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-volume-down">
-        <path d="M7 7H3v6h4l5 5V2L7 7zm8.54 6.54l-1.42-1.42a3 3 0 0 0 0-4.24l1.42-1.42a4.98 4.98 0 0 1 0 7.08z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-volume-mute">
-        <path d="M9 7H5v6h4l5 5V2L9 7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-volume-off">
-        <path d="M15 8.59l-2.12-2.13-1.42 1.42L13.6 10l-2.13 2.12 1.42 1.42L15 11.4l2.12 2.13 1.42-1.42L16.4 10l2.13-2.12-1.42-1.42L15 8.6zM4 7H0v6h4l5 5V2L4 7z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-volume-up">
-        <path d="M5 7H1v6h4l5 5V2L5 7zm11.36 9.36l-1.41-1.41a6.98 6.98 0 0 0 0-9.9l1.41-1.41a8.97 8.97 0 0 1 0 12.72zm-2.82-2.82l-1.42-1.42a3 3 0 0 0 0-4.24l1.42-1.42a4.98 4.98 0 0 1 0 7.08z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-wallet">
-        <path d="M0 4c0-1.1.9-2 2-2h15a1 1 0 0 1 1 1v1H2v1h17a1 1 0 0 1 1 1v10a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm16.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-watch">
-        <path d="M11 9h2v2H9V7h2v2zm-5.82 6.08a6.98 6.98 0 0 1 0-10.16L6 0h8l.82 4.92a6.98 6.98 0 0 1 0 10.16L14 20H6l-.82-4.92zM10 15a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-wrench">
-        <path d="M6.47 9.8A5 5 0 0 1 .2 3.22l3.95 3.95 2.82-2.83L3.03.41a5 5 0 0 1 6.4 6.68l10 10-2.83 2.83L6.47 9.8z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-zoom-in">
-        <path fill-rule="evenodd"
-              d="M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12zM7 7V5h2v2h2v2H9v2H7V9H5V7h2z"/>
-    </symbol>
-    <symbol viewBox="0 0 20 20" id="zondicon-zoom-out">
-        <path fill-rule="evenodd"
-              d="M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12zM5 7h6v2H5V7z"/>
-    </symbol>
-</svg>

+ 0 - 8
public/vendor/horizon/mix-manifest.json

@@ -1,8 +0,0 @@
-{
-    "/app.js": "/app.js?id=b4f3f08e60211bd6948ec35e5e9de9a1",
-    "/app-dark.css": "/app-dark.css?id=15c72df05e2b1147fa3e4b0670cfb435",
-    "/app.css": "/app.css?id=4d6a1a7fe095eedc2cb2a4ce822ea8a5",
-    "/img/favicon.png": "/img/favicon.png?id=1542bfe8a0010dcbee710da13cce367f",
-    "/img/horizon.svg": "/img/horizon.svg?id=904d5b5185fefb09035384e15bfca765",
-    "/img/sprite.svg": "/img/sprite.svg?id=afc4952b74895bdef3ab4ebe9adb746f"
-}

File diff suppressed because it is too large
+ 0 - 7
public/vendor/telescope/app-dark.css


File diff suppressed because it is too large
+ 0 - 6
public/vendor/telescope/app.css


File diff suppressed because it is too large
+ 0 - 1
public/vendor/telescope/app.js


BIN
public/vendor/telescope/favicon.ico


+ 0 - 5
public/vendor/telescope/mix-manifest.json

@@ -1,5 +0,0 @@
-{
-    "/app.js": "/app.js?id=613c227dfb4d6e1fc4db1b1a90513610",
-    "/app-dark.css": "/app-dark.css?id=b11fa9a28e9d3aeb8c92986f319b3c44",
-    "/app.css": "/app.css?id=b3ccfbe68f24cff776f83faa8dead721"
-}

+ 6 - 0
resources/lang/de/validation.php

@@ -42,6 +42,7 @@ return [
     'ends_with' => ':Attribute muss eine der folgenden Endungen aufweisen: :values',
     'enum' => 'Der ausgewählte Wert ist ungültig.',
     'exists' => 'Der gewählte Wert für :attribute ist ungültig.',
+    'extensions' => 'Das Feld :attribute muss eine der folgenden Erweiterungen haben: :values.',
     'file' => ':Attribute muss eine Datei sein.',
     'filled' => ':Attribute muss ausgefüllt sein.',
     'gt' => [
@@ -56,6 +57,7 @@ return [
         'numeric' => ':Attribute muss größer oder gleich :value sein.',
         'string' => ':Attribute muss mindestens :value Zeichen lang sein.',
     ],
+    'hex_color' => 'Das Feld :attribute muss eine gültige Hexadezimalfarbe sein.',
     'image' => ':Attribute muss ein Bild sein.',
     'in' => 'Der gewählte Wert für :attribute ist ungültig.',
     'in_array' => 'Der gewählte Wert für :attribute kommt nicht in :other vor.',
@@ -111,6 +113,10 @@ return [
         'uncompromised' => ':Attribute wurde in einem Datenleck gefunden. Bitte wählen Sie ein anderes :attribute.',
     ],
     'present' => ':Attribute muss vorhanden sein.',
+    'present_if' => 'Das Feld :attribute muss vorhanden sein, wenn :other gleich :value ist.',
+    'present_unless' => 'Das Feld :attribute muss vorhanden sein, es sei denn, :other ist :value.',
+    'present_with' => 'Das Feld :attribute muss vorhanden sein, wenn :values vorhanden ist.',
+    'present_with_all' => 'Das Feld :attribute muss vorhanden sein, wenn :values vorhanden sind.',
     'prohibited' => ':Attribute ist unzulässig.',
     'prohibited_if' => ':Attribute ist unzulässig, wenn :other :value ist.',
     'prohibited_unless' => ':Attribute ist unzulässig, wenn :other nicht :values ist.',

+ 41 - 35
resources/lang/en/validation.php

@@ -8,11 +8,11 @@ return [
     'active_url' => 'The :attribute is not a valid URL.',
     'after' => 'The :attribute must be a date after :date.',
     'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
-    'alpha' => 'The :attribute may only contain letters.',
-    'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
-    'alpha_num' => 'The :attribute may only contain letters and numbers.',
+    'alpha' => 'The :attribute must only contain letters.',
+    'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
+    'alpha_num' => 'The :attribute must only contain letters and numbers.',
     'array' => 'The :attribute must be an array.',
-    'ascii' => 'The :attribute must only contain single-byte alphanumeric characters and symbols.',
+    'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',
     'before' => 'The :attribute must be a date before :date.',
     'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
     'between' => [
@@ -28,7 +28,7 @@ return [
     'date' => 'The :attribute is not a valid date.',
     'date_equals' => 'The :attribute must be a date equal to :date.',
     'date_format' => 'The :attribute does not match the format :format.',
-    'decimal' => 'The :attribute must have :decimal decimal places.',
+    'decimal' => 'The :attribute field must have :decimal decimal places.',
     'declined' => 'The :attribute must be declined.',
     'declined_if' => 'The :attribute must be declined when :other is :value.',
     'different' => 'The :attribute and :other must be different.',
@@ -36,14 +36,15 @@ return [
     'digits_between' => 'The :attribute must be between :min and :max digits.',
     'dimensions' => 'The :attribute has invalid image dimensions.',
     'distinct' => 'The :attribute field has a duplicate value.',
-    'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.',
-    'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.',
+    'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',
+    'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',
     'email' => 'The :attribute must be a valid email address.',
     'ends_with' => 'The :attribute must end with one of the following: :values.',
-    'enum' => 'The selected :attribute is invalid.',
-    'exists' => 'The selected :attribute is invalid.',
+    'enum' => 'The :attribute field value is not in the list of allowed values.',
+    'exists' => 'The :attribute field value does not exist.',
+    'extensions' => 'The :attribute field must have one of the following extensions: :values.',
     'file' => 'The :attribute must be a file.',
-    'filled' => 'The :attribute field is required.',
+    'filled' => 'The :attribute field must have a value.',
     'gt' => [
         'array' => 'The :attribute must have more than :value items.',
         'file' => 'The :attribute must be greater than :value kilobytes.',
@@ -52,19 +53,20 @@ return [
     ],
     'gte' => [
         'array' => 'The :attribute must have :value items or more.',
-        'file' => 'The :attribute must be greater than or equal :value kilobytes.',
-        'numeric' => 'The :attribute must be greater than or equal :value.',
-        'string' => 'The :attribute must be greater than or equal :value characters.',
+        'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
+        'numeric' => 'The :attribute must be greater than or equal to :value.',
+        'string' => 'The :attribute must be greater than or equal to :value characters.',
     ],
+    'hex_color' => 'The :attribute field must be a valid hexadecimal color.',
     'image' => 'The :attribute must be an image.',
-    'in' => 'The selected :attribute is invalid.',
+    'in' => 'The :attribute field value is not in the list of allowed values.',
     'in_array' => 'The :attribute field does not exist in :other.',
     'integer' => 'The :attribute must be an integer.',
     'ip' => 'The :attribute must be a valid IP address.',
     'ipv4' => 'The :attribute must be a valid IPv4 address.',
     'ipv6' => 'The :attribute must be a valid IPv6 address.',
     'json' => 'The :attribute must be a valid JSON string.',
-    'lowercase' => 'The :attribute must be lowercase.',
+    'lowercase' => 'The :attribute field must be lowercase.',
     'lt' => [
         'array' => 'The :attribute must have less than :value items.',
         'file' => 'The :attribute must be less than :value kilobytes.',
@@ -73,18 +75,18 @@ return [
     ],
     'lte' => [
         'array' => 'The :attribute must not have more than :value items.',
-        'file' => 'The :attribute must be less than or equal :value kilobytes.',
-        'numeric' => 'The :attribute must be less than or equal :value.',
-        'string' => 'The :attribute must be less than or equal :value characters.',
+        'file' => 'The :attribute must be less than or equal to :value kilobytes.',
+        'numeric' => 'The :attribute must be less than or equal to :value.',
+        'string' => 'The :attribute must be less than or equal to :value characters.',
     ],
     'mac_address' => 'The :attribute must be a valid MAC address.',
     'max' => [
-        'array' => 'The :attribute may not have more than :max items.',
-        'file' => 'The :attribute may not be greater than :max kilobytes.',
-        'numeric' => 'The :attribute may not be greater than :max.',
-        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute must not have more than :max items.',
+        'file' => 'The :attribute must not be greater than :max kilobytes.',
+        'numeric' => 'The :attribute must not be greater than :max.',
+        'string' => 'The :attribute must not be greater than :max characters.',
     ],
-    'max_digits' => 'The :attribute must not have more than :max digits.',
+    'max_digits' => 'The :attribute field must not have more than :max digits.',
     'mimes' => 'The :attribute must be a file of type: :values.',
     'mimetypes' => 'The :attribute must be a file of type: :values.',
     'min' => [
@@ -93,24 +95,28 @@ return [
         'numeric' => 'The :attribute must be at least :min.',
         'string' => 'The :attribute must be at least :min characters.',
     ],
-    'min_digits' => 'The :attribute must have at least :min digits.',
+    'min_digits' => 'The :attribute field must have at least :min digits.',
     'missing' => 'The :attribute field must be missing.',
     'missing_if' => 'The :attribute field must be missing when :other is :value.',
     'missing_unless' => 'The :attribute field must be missing unless :other is :value.',
     'missing_with' => 'The :attribute field must be missing when :values is present.',
     'missing_with_all' => 'The :attribute field must be missing when :values are present.',
     'multiple_of' => 'The :attribute must be a multiple of :value.',
-    'not_in' => 'The selected :attribute is invalid.',
+    'not_in' => 'The :attribute field must not be in the list.',
     'not_regex' => 'The :attribute format is invalid.',
     'numeric' => 'The :attribute must be a number.',
     'password' => [
-        'letters' => 'The :attribute must contain at least one letter.',
-        'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.',
-        'numbers' => 'The :attribute must contain at least one number.',
-        'symbols' => 'The :attribute must contain at least one symbol.',
+        'letters' => 'The :attribute field must contain at least one letter.',
+        'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',
+        'numbers' => 'The :attribute field must contain at least one number.',
+        'symbols' => 'The :attribute field must contain at least one symbol.',
         'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
     ],
     'present' => 'The :attribute field must be present.',
+    'present_if' => 'The :attribute field must be present when :other is :value.',
+    'present_unless' => 'The :attribute field must be present unless :other is :value.',
+    'present_with' => 'The :attribute field must be present when :values is present.',
+    'present_with_all' => 'The :attribute field must be present when :values are present.',
     'prohibited' => 'The :attribute field is prohibited.',
     'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
     'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
@@ -122,7 +128,7 @@ return [
     'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
     'required_unless' => 'The :attribute field is required unless :other is in :values.',
     'required_with' => 'The :attribute field is required when :values is present.',
-    'required_with_all' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values are present.',
     'required_without' => 'The :attribute field is required when :values is not present.',
     'required_without_all' => 'The :attribute field is required when none of :values are present.',
     'same' => 'The :attribute and :other must match.',
@@ -132,14 +138,14 @@ return [
         'numeric' => 'The :attribute must be :size.',
         'string' => 'The :attribute must be :size characters.',
     ],
-    'starts_with' => 'The :attribute must start with one of the following: :values',
+    'starts_with' => 'The :attribute must start with one of the following: :values.',
     'string' => 'The :attribute must be a string.',
-    'timezone' => 'The :attribute must be a valid zone.',
-    'ulid' => 'The :attribute must be a valid ULID.',
+    'timezone' => 'The :attribute must be a valid timezone.',
+    'ulid' => 'The :attribute field must be a valid ULID.',
     'unique' => 'The :attribute has already been taken.',
     'uploaded' => 'The :attribute failed to upload.',
-    'uppercase' => 'The :attribute must be uppercase.',
-    'url' => 'The :attribute format is invalid.',
+    'uppercase' => 'The :attribute field must be uppercase.',
+    'url' => 'The :attribute must be a valid URL.',
     'uuid' => 'The :attribute must be a valid UUID.',
     'attributes' => [
         'address' => 'address',

+ 6 - 0
resources/lang/fa/validation.php

@@ -42,6 +42,7 @@ return [
     'ends_with' => 'فیلد :attribute باید با یکی از مقادیر زیر خاتمه یابد: :values',
     'enum' => ':Attribute انتخاب شده اشتباه است.',
     'exists' => ':Attribute انتخاب شده، معتبر نیست.',
+    'extensions' => 'فیلد :attribute باید یکی از پسوندهای زیر را داشته باشد: :values.',
     'file' => ':Attribute باید یک فایل معتبر باشد.',
     'filled' => 'فیلد :attribute باید مقدار داشته باشد.',
     'gt' => [
@@ -56,6 +57,7 @@ return [
         'numeric' => ':Attribute باید بزرگتر یا مساوی :value باشد.',
         'string' => ':Attribute باید بیشتر یا مساوی :value کاراکتر داشته باشد.',
     ],
+    'hex_color' => ':attribute باید یک رنگ HEX معتبر باشد.',
     'image' => ':Attribute باید یک تصویر معتبر باشد.',
     'in' => ':Attribute انتخاب شده، معتبر نیست.',
     'in_array' => 'فیلد :attribute در لیست :other وجود ندارد.',
@@ -111,6 +113,10 @@ return [
         'uncompromised' => ':Attribute داده شده در نشت داده ظاهر شده است. لطفاً یک :attribute متفاوت انتخاب کنید.',
     ],
     'present' => 'فیلد :attribute باید در پارامترهای ارسالی وجود داشته باشد.',
+    'present_if' => 'فیلد :attribute باید زمانی که :other :value است وجود داشته باشد.',
+    'present_unless' => 'فیلد :attribute باید وجود داشته باشد مگر اینکه :other :value باشد.',
+    'present_with' => 'فیلد :attribute باید در صورت وجود :values وجود داشته باشد.',
+    'present_with_all' => 'فیلد :attribute باید در صورت وجود :values وجود داشته باشد.',
     'prohibited' => 'فیلد :attribute ممنوع است.',
     'prohibited_if' => 'فیلد :attribute ممنوع است هنگامیکه مقدار :other برابر :value باشد.',
     'prohibited_unless' => 'فیلد :attribute ممنوع است مگر اینکه مقدار :other در :values باشد.',

+ 14 - 8
resources/lang/ja/validation.php

@@ -22,7 +22,7 @@ return [
         'string' => ':Attributeは、:min文字から:max文字にしてください。',
     ],
     'boolean' => ':Attributeには、\'true\'か\'false\'を指定してください。',
-    'can' => ':Attribute フィールドには不正な値が含まれています。',
+    'can' => ':Attributeに権限のない値が含まれています。',
     'confirmed' => ':Attributeと:attribute確認が一致しません。',
     'current_password' => 'パスワードが正しくありません。',
     'date' => ':Attributeは、正しい日付ではありません。',
@@ -42,6 +42,7 @@ return [
     'ends_with' => ':Attributeの終わりは「:values」である必要があります。',
     'enum' => '選択した :attributeは 無効です。',
     'exists' => '選択された:attributeは、有効ではありません。',
+    'extensions' => ':attribute には、次のいずれかの拡張子が必要です: :values',
     'file' => ':Attributeには、ファイル形式を指定してください。',
     'filled' => ':Attributeは必須です。',
     'gt' => [
@@ -56,6 +57,7 @@ return [
         'numeric' => ':Attributeは、:value以上である必要があります。',
         'string' => ':Attributeは、:value文字以上である必要があります。',
     ],
+    'hex_color' => ':attributeは、有効な16進数カラーコードを指定してください。',
     'image' => ':Attributeには、画像を指定してください。',
     'in' => '選択された:attributeは、有効ではありません。',
     'in_array' => ':Attributeが:otherに存在しません。',
@@ -81,7 +83,7 @@ return [
     'max' => [
         'array' => ':Attributeの項目数は、:max個以下である必要があります。',
         'file' => ':Attributeは、:max KB以下のファイルである必要があります。',
-        'numeric' => ':Attributeは、:max以下の数である必要があります。',
+        'numeric' => ':Attributeは、:max以下の数である必要があります。',
         'string' => ':Attributeの文字数は、:max文字以下である必要があります。',
     ],
     'max_digits' => ':Attributeは、:max桁以下の数字である必要があります。',
@@ -90,7 +92,7 @@ return [
     'min' => [
         'array' => ':Attributeの項目数は、:min個以上にしてください。',
         'file' => ':Attributeには、:min KB以上のファイルを指定してください。',
-        'numeric' => ':Attributeには、:min以上の数を指定してください。',
+        'numeric' => ':Attributeには、:min以上の数を指定してください。',
         'string' => ':Attributeの文字数は、:min文字以上である必要があります。',
     ],
     'min_digits' => ':Attributeは、:min桁以上の数字である必要があります。',
@@ -102,7 +104,7 @@ return [
     'multiple_of' => ':Attributeは:valueの倍数である必要があります',
     'not_in' => '選択された:attributeは、有効ではありません。',
     'not_regex' => ':Attributeの形式が正しくありません。',
-    'numeric' => ':Attributeには、数を指定してください。',
+    'numeric' => ':Attributeには、数を指定してください。',
     'password' => [
         'letters' => ':Attributeは文字を1文字以上含める必要があります。',
         'mixed' => ':Attributeは大文字と小文字をそれぞれ1文字以上含める必要があります。',
@@ -111,6 +113,10 @@ return [
         'uncompromised' => ':Attributeは情報漏洩した可能性があります。他の:attributeを選択してください。',
     ],
     'present' => ':Attributeが存在している必要があります。',
+    'present_if' => ':other が :value の場合、:Attributeが存在する必要があります。',
+    'present_unless' => ':other が :value でない限り、:Attributeが存在する必要があります。',
+    'present_with' => ':values が存在する場合は、:Attributeも存在する必要があります。',
+    'present_with_all' => ':values が存在する場合は、:Attributeが存在する必要があります。',
     'prohibited' => ':Attributeの入力は禁止されています。',
     'prohibited_if' => ':Otherが:valueの場合は、:Attributeの入力が禁止されています。',
     'prohibited_unless' => ':Otherが:valuesでない限り、:Attributeの入力は禁止されています。',
@@ -222,7 +228,7 @@ return [
         'province' => '都道府県',
         'quantity' => '量',
         'reason' => '理由',
-        'recaptcha_response_field' => 'recaptchaの解答',
+        'recaptcha_response_field' => 'reCAPTCHAの応答',
         'referee' => '審判',
         'referees' => '審判員',
         'reject_reason' => '拒否理由',
@@ -238,7 +244,7 @@ return [
         'short_text' => '短いテキスト',
         'size' => 'サイズ',
         'skills' => 'スキル',
-        'slug' => 'ナメクジ',
+        'slug' => 'スラッグ',
         'specialization' => '専門化',
         'started_at' => 'に始まりました',
         'state' => '状態',
@@ -246,7 +252,7 @@ return [
         'street' => '町名・番地',
         'student' => '生徒',
         'subject' => '課題',
-        'tag' => '鬼ごっこ',
+        'tag' => 'タグ',
         'tags' => 'タグ',
         'teacher' => '先生',
         'terms' => '利用規約',
@@ -260,7 +266,7 @@ return [
         'updated_at' => '更新日',
         'user' => 'ユーザー',
         'username' => 'ユーザー名',
-        'value' => '値',
+        'value' => '値',
         'year' => '年',
     ],
 ];

+ 6 - 0
resources/lang/ko/validation.php

@@ -42,6 +42,7 @@ return [
     'ends_with' => ':Attribute은(는) 다음 중 하나로 끝나야 합니다: :values.',
     'enum' => ':Attribute의 값이 잘못되었습니다.',
     'exists' => ':Attribute이(가) 존재하지 않습니다.',
+    'extensions' => ':attribute 필드에는 다음 확장자 중 하나가 있어야 합니다. :values.',
     'file' => ':Attribute은(는) 파일이어야 합니다.',
     'filled' => ':Attribute 필드는 값이 있어야 합니다.',
     'gt' => [
@@ -56,6 +57,7 @@ return [
         'numeric' => ':Attribute의 값은 :value보다 같거나 커야 합니다.',
         'string' => ':Attribute의 길이는 :value보다 같거나 길어야 합니다.',
     ],
+    'hex_color' => ':attribute 필드는 유효한 16진수 색상이어야 합니다.',
     'image' => ':Attribute은(는) 이미지여야 합니다.',
     'in' => '선택된 :attribute은(는) 올바르지 않습니다.',
     'in_array' => ':Attribute 필드는 :other에 존재하지 않습니다.',
@@ -111,6 +113,10 @@ return [
         'uncompromised' => '주어진 :attribute이 데이터 유출로 나타났습니다. 다른 :attribute개를 선택하세요.',
     ],
     'present' => ':Attribute 필드가 있어야 합니다.',
+    'present_if' => ':other이 :value인 경우 :attribute 필드가 있어야 합니다.',
+    'present_unless' => ':other이 :value이 아닌 이상 :attribute 필드가 있어야 합니다.',
+    'present_with' => ':values이 있으면 :attribute 필드도 있어야 합니다.',
+    'present_with_all' => ':values이 있을 때 :attribute 필드도 있어야 합니다.',
     'prohibited' => ':Attribute (은)는 금지되어 있습니다.',
     'prohibited_if' => ':Attribute (은)는 :other 이(가) :value 인 경우 금지되어 있습니다.',
     'prohibited_unless' => ':Attribute (은)는 :other 이(가) :value 이(가) 아닌 경우 금지되어 있습니다.',

+ 89 - 0
resources/lang/ru/auth.php

@@ -0,0 +1,89 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'accept_term' => '',
+    'active' => [
+        'attribute' => 'Активировать',
+        'error' => [
+            'activated' => 'Этот аккаунт уже активирован, повторная активация не требуется',
+            'disable' => 'Функция активации аккаунта отключена на этом сайте, вы можете войти напрямую!',
+            'throttle' => 'Вы достигли лимита запросов на активацию, пожалуйста, попробуйте позже. Если у вас есть вопросы, обратитесь по адресу :email',
+        ],
+        'promotion' => 'Аккаунт еще не активирован, пожалуйста, сначала [:action]!',
+        'sent' => 'Ссылка для активации отправлена на вашу электронную почту, пожалуйста, проверьте (включая папку со спамом).',
+    ],
+    'aup' => 'Правила допустимого использования',
+    'captcha' => [
+        'attribute' => 'Капча',
+        'error' => [
+            'failed' => 'Ошибка проверки капчи, пожалуйста, попробуйте снова',
+            'timeout' => 'Срок действия капчи истек, пожалуйста, обновите и попробуйте снова.',
+        ],
+        'required' => 'Пожалуйста, пройдите проверку капчи!',
+        'sent' => 'Капча отправлена на вашу электронную почту, пожалуйста, проверьте (включая папку со спамом).',
+    ],
+    'email' => [
+        'error' => [
+            'banned' => 'Ваш почтовый провайдер заблокирован, пожалуйста, используйте другую электронную почту.',
+            'invalid' => 'Ваша электронная почта не поддерживается.',
+        ],
+    ],
+    'error' => [
+        'account_baned' => 'Ваш аккаунт заблокирован!',
+        'login_error' => 'Ошибка входа, пожалуйста, попробуйте позже!',
+        'login_failed' => 'Ошибка входа, пожалуйста, проверьте ваше имя пользователя и пароль!',
+        'not_found_user' => 'Аккаунт не найден, пожалуйста, попробуйте другие методы входа.',
+        'repeat_request' => 'Пожалуйста, не повторяйте запросы, обновите страницу и попробуйте снова.',
+        'url_timeout' => 'Срок действия ссылки истек, пожалуйста, запросите снова.',
+    ],
+    'failed' => 'Неверные учетные данные.',
+    'invite' => [
+        'get' => 'Получить код приглашения',
+        'not_required' => 'Код приглашения не требуется, вы можете зарегистрироваться напрямую!',
+        'unavailable' => 'Недействительный код приглашения, пожалуйста, попробуйте снова.',
+    ],
+    'login' => 'Вход',
+    'logout' => 'Выход',
+    'maintenance' => 'Техническое обслуживание',
+    'maintenance_tip' => 'Сайт на техническом обслуживании',
+    'oauth' => [
+        'login_failed' => 'Ошибка входа через третью сторону!',
+        'register' => 'Быстрая регистрация',
+        'registered' => 'Уже зарегистрированы, пожалуйста, войдите напрямую.',
+    ],
+    'one-click_login' => 'Вход в один клик',
+    'optional' => 'Необязательно',
+    'password' => [
+        'forget' => 'Забыли пароль?',
+        'new' => 'Введите новый пароль',
+        'original' => 'Текущий пароль',
+        'reset' => [
+            'attribute' => 'Сброс пароля',
+            'error' => [
+                'demo' => 'Невозможно изменить пароль администратора в демо-режиме.',
+                'disabled' => 'Сброс пароля отключен, пожалуйста, обратитесь за помощью по адресу :email.',
+                'same' => 'Новый пароль не может быть таким же, как старый, пожалуйста, введите другой.',
+                'throttle' => 'Вы можете сбросить пароль только :time раз(а) за 24 часа, не выполняйте операцию слишком часто.',
+                'wrong' => 'Неправильный пароль, попробуйте еще раз.',
+            ],
+            'sent' => 'Ссылка для сброса отправлена на вашу почту, проверьте её (включая папку со спамом).',
+            'success' => 'Новый пароль успешно установлен, теперь вы можете войти.',
+        ],
+    ],
+    'register' => [
+        'attribute' => 'Регистрация',
+        'code' => 'Регистрационный код',
+        'error' => [
+            'disable' => 'Извините, мы временно приостановили прием новых пользователей.',
+            'throttle' => 'Активирована анти-бот система! Пожалуйста, избегайте частых отправок!',
+        ],
+        'failed' => 'Регистрация не удалась, пожалуйста, попробуйте позже.',
+        'promotion' => 'Еще нет аккаунта? Пожалуйста, перейдите к ',
+    ],
+    'remember_me' => 'Запомнить меня',
+    'request' => 'Запросить',
+    'throttle' => 'Слишком много попыток, пожалуйста, попробуйте снова через :seconds секунд.',
+    'tos' => 'Условия использования',
+];

+ 151 - 0
resources/lang/ru/common.php

@@ -0,0 +1,151 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'account' => 'Аккаунт',
+    'action' => 'Действие',
+    'active_item' => 'Активировать :attribute',
+    'add' => 'Добавить',
+    'advance' => 'Дополнительно',
+    'all' => 'Все',
+    'applied' => ':attribute применен',
+    'apply' => 'Применить',
+    'available_date' => 'Срок действия',
+    'avatar' => 'Аватар',
+    'back' => 'Назад',
+    'back_to' => 'Вернуться к :page',
+    'bark' => [
+        'custom' => 'Пользовательское сообщение',
+        'node_status' => 'Статус узла',
+    ],
+    'cancel' => 'Отмена',
+    'change' => 'Изменить',
+    'close' => 'Закрыть',
+    'close_item' => 'Закрыть :attribute',
+    'confirm' => 'Подтвердить',
+    'continue' => 'Продолжить',
+    'convert' => 'Конвертировать',
+    'copy' => [
+        'attribute' => 'Копировать',
+        'failed' => 'Не удалось скопировать, пожалуйста, скопируйте вручную',
+        'success' => 'Успешно скопировано',
+    ],
+    'create' => 'Создать',
+    'created_at' => 'Дата создания',
+    'customize' => 'Настроить',
+    'days' => [
+        'attribute' => '{1} День|{2} Дня|[3,*] Дней',
+        'next' => 'Следующий день',
+        'weekend' => 'Выходные',
+        'work' => 'Рабочий день',
+    ],
+    'default' => 'По умолчанию',
+    'delete' => 'Удалить',
+    'deleted' => 'Удалено',
+    'deleted_item' => ':attribute удален',
+    'developing' => 'В разработке, следите за обновлениями!',
+    'download' => 'Скачать',
+    'edit' => 'Редактировать',
+    'error' => 'Ошибка',
+    'error_action_item' => 'Ошибка :action :attribute',
+    'error_item' => 'Ошибка :attribute',
+    'exists_error' => 'Существуют связанные аккаунты для этого :attribute. Пожалуйста, сначала удалите связи!',
+    'expired_at' => 'Срок действия истекает',
+    'export' => 'Экспорт',
+    'failed' => 'Не удалось',
+    'failed_action_item' => 'Не удалось :action :attribute',
+    'failed_item' => 'Не удалось выполнить :attribute',
+    'free' => 'Бесплатно',
+    'function' => [
+        'fullscreen' => 'Полный экран',
+        'menubar' => 'Меню',
+        'navigation' => 'Навигация',
+    ],
+    'generate' => 'Генерировать',
+    'generate_item' => 'Сгенерировать :attribute',
+    'goto' => 'Перейти к',
+    'hour' => '{1} Час|{2} Часа|[3,*] Часов',
+    'import' => 'Импорт',
+    'latest_at' => 'Последнее обновление',
+    'more' => 'Ещё',
+    'new' => 'Новый',
+    'none' => 'Нет',
+    'open' => 'Открыть',
+    'or' => 'или',
+    'order' => [
+        'status' => [
+            'canceled' => 'Отменено',
+            'completed' => 'Завершено',
+            'ongoing' => 'В процессе',
+            'prepaid' => 'Предоплачено',
+            'review' => 'На рассмотрении',
+        ],
+    ],
+    'payment' => [
+        'alipay' => 'Alipay',
+        'credit' => 'Баланс',
+        'crypto' => 'Криптовалюта',
+        'manual' => 'Ручной платеж',
+        'qq' => 'QQ Кошелек',
+        'wechat' => 'WeChat Pay',
+    ],
+    'print' => 'Печать',
+    'qrcode' => 'QR-код :attribute',
+    'random_generate' => 'Оставьте пустым для случайной генерации',
+    'recommend' => 'Рекомендовать',
+    'request' => 'Запрос',
+    'request_failed' => 'Запрос не удался, пожалуйста, попробуйте снова',
+    'request_url' => 'URL запроса',
+    'reset' => 'Сбросить',
+    'search' => 'Поиск',
+    'send' => 'Отправить',
+    'sorry' => 'Извините',
+    'status' => [
+        'applying' => 'Подача заявки',
+        'attribute' => 'Статус',
+        'available' => 'Доступно',
+        'banned' => 'Заблокировано',
+        'closed' => 'Закрыто',
+        'disabled' => 'Отключено',
+        'enabled' => 'Включено',
+        'expire' => 'Истекло',
+        'inactive' => 'Неактивно',
+        'limited' => 'Ограничено',
+        'normal' => 'Нормально',
+        'paid' => 'Оплачено',
+        'pass' => 'Пройдено',
+        'payment_pending' => 'Ожидание оплаты',
+        'pending' => 'В ожидании',
+        'pending_dispatch' => 'Ожидает отправки',
+        'reject' => 'Отклонить',
+        'rejected' => 'Отклонено',
+        'reply' => 'Ответ получен',
+        'review' => 'На рассмотрении',
+        'reviewed' => 'Рассмотрено',
+        'run_out' => 'Трафик исчерпан',
+        'send_to_credit' => 'Перевести на баланс',
+        'unknown' => 'Неизвестно',
+        'unused' => 'Не использовано',
+        'used' => 'Использовано',
+        'withdrawal_pending' => 'Ожидает вывода',
+        'withdrawn' => 'Выведено',
+    ],
+    'stay_unchanged' => 'Оставьте пустым, чтобы не менять',
+    'storage_logo' => 'Хранилище логотипа',
+    'store' => 'Сохранить',
+    'submit' => 'Отправить',
+    'success' => 'Успешно',
+    'success_action_item' => ':action :attribute успешно',
+    'success_item' => ':attribute успешно выполнено',
+    'to' => 'до',
+    'to_be_send' => 'Ожидает отправки',
+    'to_safari' => 'Нажмите на значок <i class="icon wb-more-horizontal" aria-hidden="true"></i> в правом верхнем углу, затем выберите "Открыть в <img class="w-30 h-30 vertical-align-middle m-3" src="https://gw.alicdn.com/tfs/TB1xwiUNpXXXXaIXXXXXXXXXXXX-55-55.png" alt="Safari" /> Safari", чтобы правильно получить доступ к нашему сайту!',
+    'toggle' => 'Переключить',
+    'toggle_action' => 'Переключить :action',
+    'unlimited' => 'Безлимитно',
+    'update' => 'Обновить',
+    'updated_at' => 'Последнее обновление',
+    'view' => 'Просмотр',
+    'warning' => 'Предупреждение',
+];

+ 36 - 0
resources/lang/ru/errors.php

@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'forbidden' => [
+        'access' => 'Обнаружен доступ с неизвестного IP или прокси, доступ запрещен',
+        'bots' => 'Обнаружен доступ бота, доступ запрещен',
+        'china' => 'Обнаружен доступ с IP или прокси из Китая, доступ запрещен',
+        'oversea' => 'Обнаружен доступ с зарубежного IP или прокси, доступ запрещен',
+        'redirect' => 'Обнаружен (:ip :url) доступ через ссылку подписки, выполняется принудительное перенаправление',
+        'unknown' => 'Неизвестный режим запрета доступа! Пожалуйста, измените [Режим запрета доступа] в настройках системы!',
+    ],
+    'get_ip' => 'Ошибка при получении информации об IP',
+    'log' => 'Журнал',
+    'refresh' => 'Обновить',
+    'refresh_page' => 'Пожалуйста, обновите страницу и попробуйте снова',
+    'report' => 'Ошибка содержала отчет: ',
+    'safe_code' => 'Пожалуйста, введите код безопасности',
+    'safe_enter' => 'Безопасный вход',
+    'subscribe' => [
+        'banned_until' => 'Аккаунт заблокирован до :time, пожалуйста, дождитесь разблокировки!',
+        'expired' => 'Срок действия аккаунта истек! Пожалуйста, продлите подписку!',
+        'none' => 'Нет доступных узлов',
+        'out' => 'Трафик исчерпан! Пожалуйста, купите больше или сбросьте лимит!',
+        'question' => 'Проблемы с аккаунтом! Посетите веб-сайт для получения подробностей',
+        'sub_banned' => 'Подписка заблокирована! Посетите веб-сайт для получения подробностей',
+        'unknown' => 'Недействительная ссылка подписки! Пожалуйста, получите новую!',
+        'user' => 'Недействительный URL, аккаунт не существует!',
+        'user_disabled' => 'Аккаунт отключен! Свяжитесь с поддержкой!',
+    ],
+    'title' => '⚠️ Возникла ошибка',
+    'unsafe_enter' => 'Небезопасный вход',
+    'visit' => 'Пожалуйста, посетите',
+    'whoops' => 'Упс!',
+];

+ 84 - 0
resources/lang/ru/http-statuses.php

@@ -0,0 +1,84 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    '0' => 'Неизвестная ошибка',
+    '100' => 'Продолжить',
+    '101' => 'Переключение протоколов',
+    '102' => 'Идет обработка',
+    '200' => 'ОК',
+    '201' => 'Создано',
+    '202' => 'Принято',
+    '203' => 'Информация не авторитетна',
+    '204' => 'Содержимое отсутствует',
+    '205' => 'Сброс содержимого',
+    '206' => 'Не полное содержимое',
+    '207' => 'Много статусов',
+    '208' => 'Уже сообщалось',
+    '226' => 'Использовано IM',
+    '300' => 'Много вариантов',
+    '301' => 'Перемещено навсегда',
+    '302' => 'Найдено',
+    '303' => 'Смотри другое',
+    '304' => 'Не изменялось',
+    '305' => 'Используй прокси',
+    '307' => 'Временное перенаправление',
+    '308' => 'Постоянное перенаправление',
+    '400' => 'Некорректный запрос',
+    '401' => 'Не авторизован',
+    '402' => 'Необходима оплата',
+    '403' => 'Доступ запрещен',
+    '404' => 'Не найдено',
+    '405' => 'Метод запрещён',
+    '406' => 'Неприемлемо',
+    '407' => 'Требуется аутентификация прокси',
+    '408' => 'Истекло время ожидания',
+    '409' => 'Конфликт',
+    '410' => 'Удалено',
+    '411' => 'Необходима длина',
+    '412' => 'Условие ложно',
+    '413' => 'Большой объём данных',
+    '414' => 'URI слишком длинный',
+    '415' => 'Неподдерживаемый тип данных',
+    '416' => 'Диапазон недостижим',
+    '417' => 'Истекло время ожидания',
+    '418' => 'Я - чайник',
+    '419' => 'Сессия устарела',
+    '421' => 'Неверный запрос',
+    '422' => 'Необрабатываемый экземпляр',
+    '423' => 'Доступ заблокирован',
+    '424' => 'Ошибка зависимости',
+    '425' => 'Слишком рано',
+    '426' => 'Требуется обновление',
+    '428' => 'Требуется предусловие',
+    '429' => 'Слишком много запросов',
+    '431' => 'Поля заголовка слишком большие',
+    '444' => 'Соединение закрыто без ответа',
+    '449' => 'Повторить с',
+    '451' => 'Недоступно по юридическим причинам',
+    '499' => 'Запрос закрыт клиентом',
+    '500' => 'Внутренняя ошибка',
+    '501' => 'Не реализовано',
+    '502' => 'Проблема с шлюзом',
+    '503' => 'Ведутся технические работы',
+    '504' => 'Шлюз не отвечает',
+    '505' => 'Версия HTTP не поддерживается',
+    '506' => 'Вариант тоже проводит согласование',
+    '507' => 'Переполнение хранилища',
+    '508' => 'Обнаружен бесконечный цикл',
+    '509' => 'Превышена нагрузка на канал связи',
+    '510' => 'Не расширено',
+    '511' => 'Требуется сетевая аутентификация',
+    '520' => 'Неизвестная ошибка',
+    '521' => 'Веб-сервер не работает',
+    '522' => 'Соединение не отвечает',
+    '523' => 'Источник недоступен',
+    '524' => 'Истекло время ожидания',
+    '525' => 'Квитирование SSL не удалось',
+    '526' => 'Недействительный SSL сертификат',
+    '527' => 'Ошибка соединения с Railgun',
+    '598' => 'Истекло время ожидания',
+    '599' => 'Истекло время подключения',
+    'unknownError' => 'Неизвестная ошибка',
+];

+ 233 - 0
resources/lang/ru/model.php

@@ -0,0 +1,233 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'aff' => [
+        'amount' => 'Сумма заказа',
+        'commission' => 'Комиссия',
+        'created_at' => 'Дата заказа',
+        'invitee' => 'Покупатель',
+        'updated_at' => 'Дата обработки',
+    ],
+    'article' => [
+        'attribute' => 'Статья',
+        'category' => 'Категория',
+        'created_at' => 'Дата публикации',
+        'language' => 'Язык',
+        'logo' => 'Обложка',
+        'updated_at' => 'Дата обновления',
+    ],
+    'common' => [
+        'description' => 'Описание',
+        'extend' => 'Дополнительная информация',
+        'level' => 'Уровень',
+        'sort' => 'Сортировка',
+        'type' => 'Тип',
+    ],
+    'country' => [
+        'code' => 'Код страны',
+        'icon' => 'Флаг',
+        'name' => 'Название страны',
+    ],
+    'coupon' => [
+        'attribute' => 'Купон',
+        'groups' => 'Ограничение по группам',
+        'levels' => 'Ограничение по уровням',
+        'logo' => 'Логотип',
+        'minimum' => 'Минимальная сумма',
+        'name' => 'Название',
+        'newbie' => 'Только для новых пользователей',
+        'num' => 'Количество',
+        'priority' => 'Приоритет',
+        'services_blacklist' => 'Черный список товаров',
+        'services_whitelist' => 'Белый список товаров',
+        'sn' => 'Код',
+        'usable_times' => 'Лимит использования',
+        'used' => 'Персональный лимит',
+        'users_blacklist' => 'Черный список пользователей',
+        'users_whitelist' => 'Белый список пользователей',
+        'value' => 'Значение',
+    ],
+    'goods' => [
+        'attribute' => 'Товар',
+        'available_date' => 'Срок действия',
+        'category' => 'Категория',
+        'color' => 'Цвет',
+        'hot' => 'Бестселлер',
+        'info' => 'Дополнительная информация',
+        'invite_num' => 'Бонусные приглашения',
+        'limit_num' => 'Лимит покупки',
+        'logo' => 'Логотип',
+        'name' => 'Название',
+        'period' => 'Цикл сброса',
+        'price' => 'Цена',
+        'renew' => 'Цена обновления данных',
+        'traffic' => 'Лимит трафика',
+        'user_limit' => 'Ограничение скорости пользователя',
+    ],
+    'ip' => [
+        'info' => 'Местоположение',
+        'network_type' => 'Тип сети',
+    ],
+    'node' => [
+        'attribute' => 'Узел',
+        'client_limit' => 'Лимит клиентов',
+        'country' => 'Страна',
+        'data_consume' => 'Использование данных',
+        'data_rate' => 'Коэффициент данных',
+        'ddns' => 'DDNS',
+        'detection' => 'Обнаружение блокировки',
+        'display' => 'Отображение и подписка',
+        'domain' => 'Домен',
+        'id' => 'ID узла',
+        'ipv4' => 'IPv4',
+        'ipv6' => 'IPv6',
+        'label' => 'Метка',
+        'method' => 'Шифрование',
+        'name' => 'Название',
+        'next_renewal_date' => 'Дата следующего продления',
+        'obfs' => 'Обфускация',
+        'obfs_param' => 'Параметры обфускации',
+        'online_user' => 'Онлайн пользователи',
+        'protocol' => 'Протокол',
+        'protocol_param' => 'Параметры протокола',
+        'push_port' => 'Порт отправки',
+        'relay_port' => 'Порт ретрансляции',
+        'renewal_cost' => 'Стоимость продления',
+        'service_port' => 'Сервисный порт',
+        'single' => 'Единый порт',
+        'single_passwd' => '[Единый] Пароль',
+        'static' => 'Статус активности',
+        'subscription_term' => 'Срок подписки',
+        'traffic_limit' => 'Ограничение скорости',
+        'transfer' => 'Ретрансляция',
+        'udp' => 'UDP',
+        'v2_alter_id' => 'Alter ID',
+        'v2_cover' => 'Обложка',
+        'v2_host' => 'Хост',
+        'v2_net' => 'Сеть',
+        'v2_path' => 'Путь | Ключ',
+        'v2_sni' => 'SNI',
+        'v2_tls' => 'TLS',
+        'v2_tls_provider' => 'Конфигурация TLS',
+    ],
+    'node_auth' => [
+        'attribute' => 'Аутентификация узла',
+        'key' => 'Ключ <small>для узла</small>',
+        'secret' => 'Обратный секрет',
+    ],
+    'node_cert' => [
+        'attribute' => 'Сертификат домена',
+        'domain' => 'Домен',
+        'expired_date' => 'Дата истечения',
+        'issuer' => 'Издатель',
+        'key' => 'КЛЮЧ',
+        'pem' => 'PEM',
+        'signed_date' => 'Дата подписания',
+    ],
+    'notification' => [
+        'address' => 'Получатель',
+        'created_at' => 'Дата отправки',
+        'status' => 'Статус',
+    ],
+    'oauth' => [
+        'identifier' => 'Идентификатор',
+        'type' => 'Канал',
+    ],
+    'order' => [
+        'attribute' => 'Заказ',
+        'id' => 'ID заказа',
+        'original_price' => 'Исходная цена',
+        'pay_way' => 'Способ оплаты',
+        'price' => 'Фактическая цена',
+        'status' => 'Статус',
+    ],
+    'permission' => [
+        'attribute' => 'Разрешение',
+        'description' => 'Описание',
+        'name' => 'Имя маршрута',
+    ],
+    'referral' => [
+        'amount' => 'Сумма',
+        'created_at' => 'Дата подачи',
+        'id' => 'ID заявки',
+        'user' => 'Заявитель',
+    ],
+    'role' => [
+        'attribute' => 'Роль',
+        'name' => 'Название',
+        'permissions' => 'Разрешения',
+    ],
+    'rule' => [
+        'attribute' => 'Правило',
+        'name' => 'Описание',
+        'pattern' => 'Значение',
+    ],
+    'rule_group' => [
+        'attribute' => 'Группа правил',
+        'name' => 'Название',
+        'rules' => 'Правила',
+        'type' => 'Тип',
+    ],
+    'subscribe' => [
+        'ban_desc' => 'Причина блокировки',
+        'ban_time' => 'Время блокировки',
+        'code' => 'Код подписки',
+        'req_header' => 'Заголовок доступа',
+        'req_ip' => 'IP запроса',
+        'req_times' => 'Количество запросов',
+        'updated_at' => 'Последний запрос',
+    ],
+    'user' => [
+        'account_status' => 'Статус аккаунта',
+        'attribute' => 'Пользователь',
+        'created_date' => 'Дата регистрации',
+        'credit' => 'Баланс',
+        'expired_date' => 'Дата истечения',
+        'id' => 'ID пользователя',
+        'invite_num' => 'Доступные приглашения',
+        'inviter' => 'Пригласивший',
+        'nickname' => 'Псевдоним',
+        'password' => 'Пароль',
+        'port' => 'Порт',
+        'proxy_method' => 'Шифрование',
+        'proxy_obfs' => 'Обфускация',
+        'proxy_passwd' => 'Пароль прокси',
+        'proxy_protocol' => 'Протокол',
+        'proxy_status' => 'Статус прокси',
+        'qq' => 'QQ',
+        'remark' => 'Примечание',
+        'reset_date' => 'Дата сброса данных',
+        'role' => 'Роль',
+        'service' => 'Прокси',
+        'speed_limit' => 'Ограничение скорости',
+        'traffic_used' => 'Использованные данные',
+        'usable_traffic' => 'Доступный трафик',
+        'username' => 'Имя пользователя',
+        'uuid' => 'VMess UUID',
+        'wechat' => 'WeChat',
+    ],
+    'user_credit' => [
+        'after' => 'После',
+        'amount' => 'Сумма',
+        'before' => 'До',
+        'created_at' => 'Дата изменения',
+    ],
+    'user_data_modify' => [
+        'after' => 'После',
+        'before' => 'До',
+        'created_at' => 'Дата изменения',
+    ],
+    'user_group' => [
+        'attribute' => 'Группа пользователей',
+        'name' => 'Название группы',
+        'nodes' => 'Узлы',
+    ],
+    'user_traffic' => [
+        'download' => 'Загрузка',
+        'log_time' => 'Время записи',
+        'total' => 'Всего',
+        'upload' => 'Отправка',
+    ],
+];

+ 51 - 0
resources/lang/ru/notification.php

@@ -0,0 +1,51 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'account_expired' => 'Напоминание об истечении срока действия аккаунта',
+    'account_expired_blade' => 'Срок действия аккаунта истекает через :days дней, пожалуйста, продлите его своевременно',
+    'account_expired_content' => 'Срок действия вашего аккаунта истекает через :days дней. Пожалуйста, своевременно продлите его, чтобы продолжить пользоваться нашими услугами.',
+    'active_email' => 'Пожалуйста, завершите проверку в течение 30 минут',
+    'attribute' => 'Уведомление',
+    'block_report' => 'Отчет о блокировке:',
+    'close_ticket' => 'Тикет :id: :title закрыт',
+    'data_anomaly' => 'Предупреждение о аномалии данных пользователя',
+    'data_anomaly_content' => 'Пользователь :id: [Загрузка: :upload | Скачивание: :download | Всего: :total] за последний час',
+    'details' => 'Просмотреть подробности',
+    'details_btn' => 'Пожалуйста, нажмите кнопку ниже, чтобы просмотреть подробности.',
+    'ding_bot_limit' => 'Каждый бот может отправлять до 20 сообщений в минуту в группу. При превышении этого лимита будет применено ограничение на 10 минут.',
+    'empty' => 'У вас нет новых сообщений',
+    'error' => '[:channel] Ошибка отправки сообщения: :reason',
+    'get_access_token_failed' => 'Не удалось получить токен доступа!\nС параметрами запроса: :body',
+    'into_maintenance' => 'Автоматически переход в режим обслуживания',
+    'new' => '{1} :num новое сообщение|[2,4] :num новых сообщения|[5,*] :num новых сообщений',
+    'new_ticket' => 'Получен новый тикет: :title',
+    'next_check_time' => 'Следующее время проверки блокировки узла: :time',
+    'node' => [
+        'download' => 'Скачивание',
+        'total' => 'Всего',
+        'upload' => 'Загрузка',
+    ],
+    'node_block' => 'Предупреждение о блокировке узла',
+    'node_offline' => 'Предупреждение об отключении узла',
+    'node_offline_content' => 'Аномальные узлы, возможно, отключены:',
+    'node_renewal' => 'Напоминание о продлении узла',
+    'node_renewal_blade' => 'Срок действия следующих узлов скоро истекает. Пожалуйста, продлите заранее:',
+    'node_renewal_content' => 'Срок действия следующих узлов скоро истекает. Пожалуйста, продлите до истечения срока, чтобы избежать прерывания обслуживания.',
+    'payment_received' => 'Платеж получен, сумма: :amount. Просмотреть детали заказа',
+    'reply_ticket' => 'Ответ на тикет: :title',
+    'reset_failed' => '[Ежедневная задача] Сброс данных пользователя :uid - :username не удался',
+    'serverChan_exhausted' => 'Дневной лимит исчерпан!',
+    'serverChan_limit' => 'Слишком высокая частота запросов в минуту. Пожалуйста, оптимизируйте настройки уведомлений!',
+    'sign_failed' => 'Проверка безопасной подписи не удалась',
+    'ticket_content' => 'Содержание тикета:',
+    'traffic_remain' => 'Использовано :percent% трафика, пожалуйста, обратите внимание',
+    'traffic_tips' => 'Пожалуйста, обратите внимание на дату сброса трафика и используйте его рационально, или пополните после исчерпания',
+    'traffic_warning' => 'Предупреждение об использовании трафика',
+    'verification' => 'Ваш код подтверждения:',
+    'verification_account' => 'Подтверждение аккаунта',
+    'verification_limit' => 'Пожалуйста, подтвердите в течение :minutes минут',
+    'view_ticket' => 'Просмотреть тикет',
+    'view_web' => 'Просмотреть веб-сайт',
+];

+ 8 - 0
resources/lang/ru/pagination.php

@@ -0,0 +1,8 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'next' => 'Вперёд &raquo;',
+    'previous' => '&laquo; Назад',
+];

+ 272 - 0
resources/lang/ru/validation.php

@@ -0,0 +1,272 @@
+<?php
+
+declare(strict_types=1);
+
+return [
+    'accepted' => 'Вы должны принять :attribute.',
+    'accepted_if' => 'Вы должны принять :attribute, когда :other соответствует :value.',
+    'active_url' => 'Значение поля :attribute должно быть действительным URL адресом.',
+    'after' => 'Значение поля :attribute должно быть датой после :date.',
+    'after_or_equal' => 'Значение поля :attribute должно быть датой после или равной :date.',
+    'alpha' => 'Значение поля :attribute может содержать только буквы.',
+    'alpha_dash' => 'Значение поля :attribute может содержать только буквы, цифры, дефис и нижнее подчеркивание.',
+    'alpha_num' => 'Значение поля :attribute может содержать только буквы и цифры.',
+    'array' => 'Значение поля :attribute должно быть массивом.',
+    'ascii' => 'Значение поля :attribute должно содержать только однобайтовые цифро-буквенные символы.',
+    'before' => 'Значение поля :attribute должно быть датой до :date.',
+    'before_or_equal' => 'Значение поля :attribute должно быть датой до или равной :date.',
+    'between' => [
+        'array' => 'Количество элементов в поле :attribute должно быть между :min и :max.',
+        'file' => 'Размер файла в поле :attribute должен быть между :min и :max Кб.',
+        'numeric' => 'Значение поля :attribute должно быть между :min и :max.',
+        'string' => 'Количество символов в поле :attribute должно быть между :min и :max.',
+    ],
+    'boolean' => 'Значение поля :attribute должно быть логического типа.',
+    'can' => 'Значение поля :attribute должно быть авторизованным.',
+    'confirmed' => 'Значение поля :attribute не совпадает с подтверждаемым.',
+    'current_password' => 'Неверный пароль.',
+    'date' => 'Значение поля :attribute должно быть корректной датой.',
+    'date_equals' => 'Значение поля :attribute должно быть датой равной :date.',
+    'date_format' => 'Значение поля :attribute должно соответствовать формату даты :format.',
+    'decimal' => 'Значение поля :attribute должно содержать :decimal цифр десятичных разрядов.',
+    'declined' => 'Поле :attribute должно быть отклонено.',
+    'declined_if' => 'Поле :attribute должно быть отклонено, когда :other равно :value.',
+    'different' => 'Значения полей :attribute и :other должны различаться.',
+    'digits' => 'Количество символов в поле :attribute должно быть равным :digits.',
+    'digits_between' => 'Количество символов в поле :attribute должно быть между :min и :max.',
+    'dimensions' => 'Изображение, указанное в поле :attribute, имеет недопустимые размеры.',
+    'distinct' => 'Значения поля :attribute не должны повторяться.',
+    'doesnt_end_with' => 'Значение поля :attribute не должно заканчиваться одним из следующих: :values.',
+    'doesnt_start_with' => 'Значение поля :attribute не должно начинаться с одного из следующих: :values.',
+    'email' => 'Значение поля :attribute должно быть действительным электронным адресом.',
+    'ends_with' => 'Значение поля :attribute должно заканчиваться одним из следующих: :values',
+    'enum' => 'Значение поля :attribute отсутствует в списке разрешённых.',
+    'exists' => 'Значение поля :attribute не существует.',
+    'extensions' => 'Файл в поле :attribute должен иметь одно из следующих расширений: :values.',
+    'file' => 'В поле :attribute должен быть указан файл.',
+    'filled' => 'Значение поля :attribute обязательно для заполнения.',
+    'gt' => [
+        'array' => 'Количество элементов в поле :attribute должно быть больше :value.',
+        'file' => 'Размер файла, указанный в поле :attribute, должен быть больше :value Кб.',
+        'numeric' => 'Значение поля :attribute должно быть больше :value.',
+        'string' => 'Количество символов в поле :attribute должно быть больше :value.',
+    ],
+    'gte' => [
+        'array' => 'Количество элементов в поле :attribute должно быть :value или больше.',
+        'file' => 'Размер файла, указанный в поле :attribute, должен быть :value Кб или больше.',
+        'numeric' => 'Значение поля :attribute должно быть :value или больше.',
+        'string' => 'Количество символов в поле :attribute должно быть :value или больше.',
+    ],
+    'hex_color' => 'Значение поля :attribute должно быть корректным цветом в HEX формате.',
+    'image' => 'Файл, указанный в поле :attribute, должен быть изображением.',
+    'in' => 'Значение поля :attribute отсутствует в списке разрешённых.',
+    'in_array' => 'Значение поля :attribute должно присутствовать в :other.',
+    'integer' => 'Значение поля :attribute должно быть целым числом.',
+    'ip' => 'Значение поля :attribute должно быть действительным IP-адресом.',
+    'ipv4' => 'Значение поля :attribute должно быть действительным IPv4-адресом.',
+    'ipv6' => 'Значение поля :attribute должно быть действительным IPv6-адресом.',
+    'json' => 'Значение поля :attribute должно быть JSON строкой.',
+    'lowercase' => 'Значение поля :attribute должно быть в нижнем регистре.',
+    'lt' => [
+        'array' => 'Количество элементов в поле :attribute должно быть меньше :value.',
+        'file' => 'Размер файла, указанный в поле :attribute, должен быть меньше :value Кб.',
+        'numeric' => 'Значение поля :attribute должно быть меньше :value.',
+        'string' => 'Количество символов в поле :attribute должно быть меньше :value.',
+    ],
+    'lte' => [
+        'array' => 'Количество элементов в поле :attribute должно быть :value или меньше.',
+        'file' => 'Размер файла, указанный в поле :attribute, должен быть :value Кб или меньше.',
+        'numeric' => 'Значение поля :attribute должно быть равным или меньше :value.',
+        'string' => 'Количество символов в поле :attribute должно быть :value или меньше.',
+    ],
+    'mac_address' => 'Значение поля :attribute должно быть корректным MAC-адресом.',
+    'max' => [
+        'array' => 'Количество элементов в поле :attribute не может превышать :max.',
+        'file' => 'Размер файла в поле :attribute не может быть больше :max Кб.',
+        'numeric' => 'Значение поля :attribute не может быть больше :max.',
+        'string' => 'Количество символов в значении поля :attribute не может превышать :max.',
+    ],
+    'max_digits' => 'Значение поля :attribute не должно содержать больше :max цифр.',
+    'mimes' => 'Файл, указанный в поле :attribute, должен быть одного из следующих типов: :values.',
+    'mimetypes' => 'Файл, указанный в поле :attribute, должен быть одного из следующих типов: :values.',
+    'min' => [
+        'array' => 'Количество элементов в поле :attribute должно быть не меньше :min.',
+        'file' => 'Размер файла, указанный в поле :attribute, должен быть не меньше :min Кб.',
+        'numeric' => 'Значение поля :attribute должно быть не меньше :min.',
+        'string' => 'Количество символов в поле :attribute должно быть не меньше :min.',
+    ],
+    'min_digits' => 'Значение поля :attribute должно содержать не меньше :min цифр.',
+    'missing' => 'Значение поля :attribute должно отсутствовать.',
+    'missing_if' => 'Значение поля :attribute должно отсутствовать, когда :other равно :value.',
+    'missing_unless' => 'Значение поля :attribute должно отсутствовать, когда :other не равно :value.',
+    'missing_with' => 'Значение поля :attribute должно отсутствовать, если :values указано.',
+    'missing_with_all' => 'Значение поля :attribute должно отсутствовать, когда указаны все :values.',
+    'multiple_of' => 'Значение поля :attribute должно быть кратным :value',
+    'not_in' => 'Значение поля :attribute не должно быть в списке.',
+    'not_regex' => 'Значение поля :attribute имеет некорректный формат.',
+    'numeric' => 'Значение поля :attribute должно быть числом.',
+    'password' => [
+        'letters' => 'Значение поля :attribute должно содержать хотя бы одну букву.',
+        'mixed' => 'Значение поля :attribute должно содержать хотя бы одну прописную и одну строчную буквы.',
+        'numbers' => 'Значение поля :attribute должно содержать хотя бы одну цифру.',
+        'symbols' => 'Значение поля :attribute должно содержать хотя бы один символ.',
+        'uncompromised' => 'Значение поля :attribute обнаружено в утёкших данных. Пожалуйста, выберите другое значение для :attribute.',
+    ],
+    'present' => 'Значение поля :attribute должно быть.',
+    'present_if' => 'Значение поля :attribute должно быть когда :other равно :value.',
+    'present_unless' => 'Значение поля :attribute должно быть, если только :other не равно :value.',
+    'present_with' => 'Значение поля :attribute должно быть когда одно из :values присутствуют.',
+    'present_with_all' => 'Значение поля :attribute должно быть когда все из значений присутствуют: :values.',
+    'prohibited' => 'Значение поля :attribute запрещено.',
+    'prohibited_if' => 'Значение поля :attribute запрещено, когда :other равно :value.',
+    'prohibited_unless' => 'Значение поля :attribute запрещено, если :other не состоит в :values.',
+    'prohibits' => 'Значение поля :attribute запрещает присутствие :other.',
+    'regex' => 'Значение поля :attribute имеет некорректный формат.',
+    'required' => 'Поле :attribute обязательно.',
+    'required_array_keys' => 'Массив в поле :attribute обязательно должен иметь ключи: :values',
+    'required_if' => 'Поле :attribute обязательно для заполнения, когда :other равно :value.',
+    'required_if_accepted' => 'Поле :attribute обязательно, когда :other принято.',
+    'required_unless' => 'Поле :attribute обязательно для заполнения, когда :other не равно :values.',
+    'required_with' => 'Поле :attribute обязательно для заполнения, когда :values указано.',
+    'required_with_all' => 'Поле :attribute обязательно для заполнения, когда :values указано.',
+    'required_without' => 'Поле :attribute обязательно для заполнения, когда :values не указано.',
+    'required_without_all' => 'Поле :attribute обязательно для заполнения, когда ни одно из :values не указано.',
+    'same' => 'Значения полей :attribute и :other должны совпадать.',
+    'size' => [
+        'array' => 'Количество элементов в поле :attribute должно быть равным :size.',
+        'file' => 'Размер файла, указанный в поле :attribute, должен быть равен :size Кб.',
+        'numeric' => 'Значение поля :attribute должно быть равным :size.',
+        'string' => 'Количество символов в поле :attribute должно быть равным :size.',
+    ],
+    'starts_with' => 'Поле :attribute должно начинаться с одного из следующих значений: :values',
+    'string' => 'Значение поля :attribute должно быть строкой.',
+    'timezone' => 'Значение поля :attribute должно быть действительным часовым поясом.',
+    'ulid' => 'Значение поля :attribute должно быть корректным ULID.',
+    'unique' => 'Такое значение поля :attribute уже существует.',
+    'uploaded' => 'Загрузка файла из поля :attribute не удалась.',
+    'uppercase' => 'Значение поля :attribute должно быть в верхнем регистре.',
+    'url' => 'Значение поля :attribute имеет ошибочный формат URL.',
+    'uuid' => 'Значение поля :attribute должно быть корректным UUID.',
+    'attributes' => [
+        'address' => 'адрес',
+        'affiliate_url' => 'Партнёрская ссылка',
+        'age' => 'возраст',
+        'amount' => 'количество',
+        'announcement' => 'анонс',
+        'area' => 'область',
+        'audience_prize' => 'приз зрительских симпатий',
+        'available' => 'доступно',
+        'birthday' => 'дата рождения',
+        'body' => 'контент',
+        'city' => 'город',
+        'compilation' => 'компиляция',
+        'concept' => 'концепт',
+        'conditions' => 'условия',
+        'content' => 'контент',
+        'country' => 'страна',
+        'cover' => 'обложка',
+        'created_at' => 'создано в',
+        'creator' => 'создатель',
+        'currency' => 'валюта',
+        'current_password' => 'текущий пароль',
+        'customer' => 'клиент',
+        'date' => 'дата',
+        'date_of_birth' => 'день рождения',
+        'dates' => 'даты',
+        'day' => 'день',
+        'deleted_at' => 'удалено в',
+        'description' => 'описание',
+        'display_type' => 'тип отображения',
+        'district' => 'округ',
+        'duration' => 'продолжительность',
+        'email' => 'email адрес',
+        'excerpt' => 'выдержка',
+        'filter' => 'фильтр',
+        'finished_at' => 'завершено в',
+        'first_name' => 'имя',
+        'gender' => 'пол',
+        'grand_prize' => 'главный приз',
+        'group' => 'группа',
+        'hour' => 'час',
+        'image' => 'изображение',
+        'image_desktop' => 'десктопное изображение',
+        'image_main' => 'основное изображение',
+        'image_mobile' => 'мобильное изображение',
+        'images' => 'изображения',
+        'is_audience_winner' => 'победитель зрительских симпатий',
+        'is_hidden' => 'скрыто',
+        'is_subscribed' => 'подписан',
+        'is_visible' => 'отображается',
+        'is_winner' => 'победитель',
+        'items' => 'элементы',
+        'key' => 'ключ',
+        'last_name' => 'фамилия',
+        'lesson' => 'урок',
+        'line_address_1' => 'строка адреса 1',
+        'line_address_2' => 'строка адреса 2',
+        'login' => 'логин',
+        'message' => 'сообщение',
+        'middle_name' => 'отчество',
+        'minute' => 'минута',
+        'mobile' => 'моб. номер',
+        'month' => 'месяц',
+        'name' => 'имя',
+        'national_code' => 'национальный код',
+        'number' => 'номер',
+        'password' => 'пароль',
+        'password_confirmation' => 'подтверждение пароля',
+        'phone' => 'номер телефона',
+        'photo' => 'фотография',
+        'portfolio' => 'портфолио',
+        'postal_code' => 'индекс',
+        'preview' => 'предпросмотр',
+        'price' => 'стоимость',
+        'product_id' => 'ID продукта',
+        'product_uid' => 'UID продукта',
+        'product_uuid' => 'UUID продукта',
+        'promo_code' => 'промокод',
+        'province' => 'провинция',
+        'quantity' => 'количество',
+        'reason' => 'причина',
+        'recaptcha_response_field' => 'ошибка капчи',
+        'referee' => 'жюри',
+        'referees' => 'жюри',
+        'reject_reason' => 'причина отказа',
+        'remember' => 'запомнить',
+        'restored_at' => 'восстановлено в',
+        'result_text_under_image' => 'текст под изображением',
+        'role' => 'роль',
+        'rule' => 'правило',
+        'rules' => 'правила',
+        'second' => 'секунда',
+        'sex' => 'пол',
+        'shipment' => 'доставка',
+        'short_text' => 'короткое описание',
+        'size' => 'размер',
+        'skills' => 'навыки',
+        'slug' => 'слаг',
+        'specialization' => 'специализация',
+        'started_at' => 'началось в',
+        'state' => 'штат',
+        'status' => 'статус',
+        'street' => 'улица',
+        'student' => 'студент',
+        'subject' => 'заголовок',
+        'tag' => 'тег',
+        'tags' => 'теги',
+        'teacher' => 'учитель',
+        'terms' => 'правила',
+        'test_description' => 'тестовое описание',
+        'test_locale' => 'тестовая локализация',
+        'test_name' => 'тестовое имя',
+        'text' => 'текст',
+        'time' => 'время',
+        'title' => 'наименование',
+        'type' => 'тип',
+        'updated_at' => 'обновлено в',
+        'user' => 'пользователь',
+        'username' => 'никнейм',
+        'value' => 'значение',
+        'year' => 'год',
+    ],
+];

+ 6 - 0
resources/lang/vi/validation.php

@@ -42,6 +42,7 @@ return [
     'ends_with' => 'Trường :attribute phải kết thúc bằng một trong những giá trị sau: :values',
     'enum' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
     'exists' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
+    'extensions' => 'Trường :attribute phải có một trong các phần mở rộng sau: :values.',
     'file' => 'Trường :attribute phải là một tệp tin.',
     'filled' => 'Trường :attribute không được bỏ trống.',
     'gt' => [
@@ -56,6 +57,7 @@ return [
         'numeric' => 'Giá trị trường :attribute phải lớn hơn hoặc bằng :value.',
         'string' => 'Độ dài trường :attribute phải lớn hơn hoặc bằng :value kí tự.',
     ],
+    'hex_color' => 'Trường :attribute phải là một mã màu hex hợp lệ.',
     'image' => 'Trường :attribute phải là định dạng hình ảnh.',
     'in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
     'in_array' => 'Trường :attribute phải thuộc tập cho phép: :other.',
@@ -111,6 +113,10 @@ return [
         'uncompromised' => 'Trường được nhận :attribute đã xuất hiện trong một vụ rò rỉ dữ liệu. Vui lòng chọn một :attribute khác.',
     ],
     'present' => 'Trường :attribute phải được cung cấp.',
+    'present_if' => 'Trường :attribute phải có mặt khi :other là :value.',
+    'present_unless' => 'Trường :attribute phải có mặt trừ khi :other là :value.',
+    'present_with' => 'Trường :attribute phải có mặt khi có :values.',
+    'present_with_all' => 'Trường :attribute phải có mặt khi có :values.',
     'prohibited' => 'Trường :attribute bị cấm.',
     'prohibited_if' => 'Trường :attribute bị cấm khi :other là :value.',
     'prohibited_unless' => 'Trường :attribute bị cấm trừ khi :other là một trong :values.',

+ 6 - 0
resources/lang/zh_CN/validation.php

@@ -42,6 +42,7 @@ return [
     'ends_with' => ':Attribute 必须以 :values 为结尾。',
     'enum' => ':Attribute 值不正确。',
     'exists' => ':Attribute 不存在。',
+    'extensions' => ':attribute 字段必须具有以下扩展名之一::values。',
     'file' => ':Attribute 必须是文件。',
     'filled' => ':Attribute 不能为空。',
     'gt' => [
@@ -56,6 +57,7 @@ return [
         'numeric' => ':Attribute 必须大于或等于 :value。',
         'string' => ':Attribute 必须多于或等于 :value 个字符。',
     ],
+    'hex_color' => ':attribute 字段必须是有效的十六进制颜色。',
     'image' => ':Attribute 必须是图片。',
     'in' => '已选的属性 :attribute 无效。',
     'in_array' => ':Attribute 必须在 :other 中。',
@@ -111,6 +113,10 @@ return [
         'uncompromised' => '给定的 :attribute 出现在已经泄漏的密码中。请选择不同的 :attribute。',
     ],
     'present' => ':Attribute 必须存在。',
+    'present_if' => '当 :other 等于 :value 时,必须存在 :attribute 字段。',
+    'present_unless' => '除非 :other 等于 :value,否则 :attribute 字段必须存在。',
+    'present_with' => '当 :values 存在时,:attribute 字段必须存在。',
+    'present_with_all' => '当存在 :values 时,必须存在 :attribute 字段。',
     'prohibited' => ':Attribute 字段被禁止。',
     'prohibited_if' => '当 :other 为 :value 时,禁止 :attribute 字段。',
     'prohibited_unless' => ':Attribute 字段被禁止,除非 :other 位于 :values 中。',

Some files were not shown because too many files changed in this diff