first commit
|
@ -0,0 +1,15 @@
|
||||||
|
# Python-generated files
|
||||||
|
__pycache__/
|
||||||
|
*.py[oc]
|
||||||
|
build/
|
||||||
|
wheels/
|
||||||
|
*.egg-info
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
.venv
|
||||||
|
.env
|
||||||
|
alembic.ini
|
||||||
|
/alembic
|
||||||
|
/files
|
||||||
|
hello.py
|
||||||
|
/test
|
|
@ -0,0 +1 @@
|
||||||
|
3.12
|
|
@ -0,0 +1,29 @@
|
||||||
|
FROM python:3.12-slim-bookworm
|
||||||
|
|
||||||
|
# The installer requires curl (and certificates) to download the release archive
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates nano
|
||||||
|
|
||||||
|
# Download the latest installer
|
||||||
|
ADD https://astral.sh/uv/install.sh /uv-installer.sh
|
||||||
|
|
||||||
|
# Run the installer then remove it
|
||||||
|
RUN sh /uv-installer.sh && rm /uv-installer.sh
|
||||||
|
|
||||||
|
# Ensure the installed binary is on the `PATH`
|
||||||
|
ENV PATH="/root/.local/bin/:$PATH"
|
||||||
|
|
||||||
|
|
||||||
|
# Copy the project into the image
|
||||||
|
ADD . /app
|
||||||
|
|
||||||
|
# Sync the project into a new environment, using the frozen lockfile
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN uv sync --frozen
|
||||||
|
|
||||||
|
# Expose port 8000
|
||||||
|
EXPOSE 8024
|
||||||
|
|
||||||
|
|
||||||
|
# Presuming there is a `my_app` command provided by the project uvicorn main:app --reload
|
||||||
|
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8025"]
|
|
@ -0,0 +1,11 @@
|
||||||
|
services:
|
||||||
|
link_admin:
|
||||||
|
build: .
|
||||||
|
container_name: link_admin
|
||||||
|
restart: always
|
||||||
|
env_file: .env
|
||||||
|
ports:
|
||||||
|
- "8024:8024"
|
||||||
|
volumes:
|
||||||
|
- .:/app
|
||||||
|
command: ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8025"]
|
|
@ -0,0 +1,47 @@
|
||||||
|
from fastapi import FastAPI, Request, HTTPException
|
||||||
|
from fastapi.responses import RedirectResponse
|
||||||
|
from fastapi.templating import Jinja2Templates
|
||||||
|
from fastapi.staticfiles import StaticFiles
|
||||||
|
from model.database import init_db
|
||||||
|
from routers import index, logins, users, product, profile, jobs
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
# Создаём таблицы в БД
|
||||||
|
init_db()
|
||||||
|
|
||||||
|
# Инициализация приложения
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
# Настройка шаблонов
|
||||||
|
templates = Jinja2Templates(directory="templates")
|
||||||
|
|
||||||
|
# Подключение статики (делаем это ОДИН раз)
|
||||||
|
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||||
|
|
||||||
|
# Подключение маршрутов
|
||||||
|
app.include_router(index.router, tags=["callback"])
|
||||||
|
app.include_router(logins.router, tags=["login"])
|
||||||
|
app.include_router(users.router, tags=["users"])
|
||||||
|
app.include_router(product.router, tags=["product"])
|
||||||
|
|
||||||
|
# Подключение роутеров
|
||||||
|
app.include_router(profile.router, tags=["Profile"])
|
||||||
|
app.include_router(jobs.router, tags=["Jobs"])
|
||||||
|
|
||||||
|
# Обработка 404
|
||||||
|
@app.exception_handler(404)
|
||||||
|
async def not_found(request: Request, exc: HTTPException):
|
||||||
|
return templates.TemplateResponse("working.html", {"request": request}, status_code=404)
|
||||||
|
|
||||||
|
@app.exception_handler(HTTPException)
|
||||||
|
async def auth_exception_handler(request: Request, exc: HTTPException):
|
||||||
|
if exc.status_code == 401:
|
||||||
|
return RedirectResponse(url="/login")
|
||||||
|
return RedirectResponse(url="/error")
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_event("startup")
|
||||||
|
async def startup():
|
||||||
|
await init_db()
|
|
@ -0,0 +1,110 @@
|
||||||
|
from sqlalchemy import Column, Integer, String, Text, DateTime, Float, Boolean, BigInteger
|
||||||
|
from sqlalchemy.dialects.mysql import JSON
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
||||||
|
from sqlalchemy.orm import sessionmaker, declarative_base
|
||||||
|
from sqlalchemy.sql import func
|
||||||
|
from passlib.context import CryptContext
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Загружаем переменные окружения
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
# Правильная строка подключения
|
||||||
|
DATABASE_URL = os.getenv('DATABASE_URL') # Должно быть "mysql+aiomysql://..." или "postgresql+asyncpg://..."
|
||||||
|
|
||||||
|
# Создаём асинхронный движок
|
||||||
|
async_engine = create_async_engine(DATABASE_URL, echo=True)
|
||||||
|
|
||||||
|
# Создаём фабрику сессий
|
||||||
|
async_session = sessionmaker(async_engine, class_=AsyncSession, expire_on_commit=False)
|
||||||
|
|
||||||
|
# Базовый класс для моделей
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
# Контекст хеширования паролей
|
||||||
|
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
||||||
|
|
||||||
|
# Функция для инициализации базы данных
|
||||||
|
async def init_db():
|
||||||
|
async with async_engine.begin() as conn:
|
||||||
|
await conn.run_sync(Base.metadata.create_all)
|
||||||
|
async with async_session() as session:
|
||||||
|
# Проверяем, есть ли уже данные в таблице пользователей
|
||||||
|
result = await session.execute(select(User).limit(1))
|
||||||
|
user_exists = result.scalars().first()
|
||||||
|
|
||||||
|
if not user_exists:
|
||||||
|
new_user = User(
|
||||||
|
username="admin",
|
||||||
|
hashed_password=hash_password("admin123"), # Пароль хешируем
|
||||||
|
role="admin",
|
||||||
|
is_active=True
|
||||||
|
)
|
||||||
|
session.add(new_user)
|
||||||
|
await session.commit()
|
||||||
|
|
||||||
|
# Зависимость FastAPI для работы с БД
|
||||||
|
async def get_async_session() -> AsyncSession:
|
||||||
|
async with async_session() as session:
|
||||||
|
yield session
|
||||||
|
|
||||||
|
# Функции для хеширования паролей
|
||||||
|
def hash_password(password: str) -> str:
|
||||||
|
return pwd_context.hash(password)
|
||||||
|
|
||||||
|
def verify_password(plain_password: str, hashed_password: str) -> bool:
|
||||||
|
return pwd_context.verify(plain_password, hashed_password)
|
||||||
|
|
||||||
|
# async def get_db():
|
||||||
|
# async with SessionLocal() as session:
|
||||||
|
# yield session
|
||||||
|
|
||||||
|
|
||||||
|
# Модель пользователя
|
||||||
|
class User(Base):
|
||||||
|
__tablename__ = "users"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
username = Column(String(55), unique=True, index=True, nullable=False) # ✅ Правильно
|
||||||
|
hashed_password = Column(String(255), nullable=False)
|
||||||
|
role = Column(String(55), default="user")
|
||||||
|
is_active = Column(Boolean, default=True)
|
||||||
|
|
||||||
|
# Модель профиля
|
||||||
|
class Profile(Base):
|
||||||
|
__tablename__ = "profile"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
link = Column(String(255), unique=True, nullable=True)
|
||||||
|
first_name = Column(String(255), nullable=False)
|
||||||
|
last_name = Column(String(255), nullable=False)
|
||||||
|
pronouns = Column(String(50), nullable=True)
|
||||||
|
email = Column(String(255), nullable=True)
|
||||||
|
telephone = Column(String(20), nullable=True)
|
||||||
|
location = Column(String(255), nullable=True)
|
||||||
|
statement = Column(Text, nullable=True)
|
||||||
|
skills = Column(JSON, nullable=True) # JSON-поле для списка навыков
|
||||||
|
websites = Column(JSON, nullable=True) # JSON-поле для списка сайтов
|
||||||
|
languages = Column(JSON, nullable=True) # JSON-поле для языков
|
||||||
|
date = Column(DateTime, server_default=func.now())
|
||||||
|
|
||||||
|
# Модель вакансий
|
||||||
|
class Job(Base):
|
||||||
|
__tablename__ = "jobs"
|
||||||
|
|
||||||
|
job_id = Column(BigInteger, primary_key=True, index=True)
|
||||||
|
job_title = Column(String(255), nullable=False)
|
||||||
|
job_company = Column(String(255), nullable=True)
|
||||||
|
minimum_annual_salary = Column(Float, nullable=True)
|
||||||
|
salary_currency = Column(String(10), nullable=True)
|
||||||
|
location_type = Column(String(50), nullable=True) # Remote, On-site, Hybrid
|
||||||
|
location = Column(String(255), nullable=True)
|
||||||
|
job_level = Column(String(50), nullable=True) # Entry-level, Junior, Mid
|
||||||
|
job_type = Column(String(50), nullable=True) # Full-time, Part-time
|
||||||
|
days_posted = Column(Integer, nullable=True)
|
||||||
|
hourly_rate = Column(Float, nullable=True)
|
||||||
|
link = Column(String(2083), nullable=True) # URL вакансии
|
||||||
|
link_company = Column(String(2083), nullable=True) # URL компании
|
||||||
|
active = Column(Boolean, default=True) # Вакансия активна?
|
|
@ -0,0 +1,8 @@
|
||||||
|
class User(Base):
|
||||||
|
__tablename__ = "users"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
username = Column(String, unique=True, index=True, nullable=False)
|
||||||
|
hashed_password = Column(String, nullable=False)
|
||||||
|
role = Column(String, default="user")
|
||||||
|
is_active = Column(Boolean, default=True)
|
|
@ -0,0 +1,22 @@
|
||||||
|
[project]
|
||||||
|
name = "admins"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Add your description here"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.12"
|
||||||
|
dependencies = [
|
||||||
|
"aiomysql>=0.2.0",
|
||||||
|
"aiosqlite>=0.21.0",
|
||||||
|
"alembic>=1.14.1",
|
||||||
|
"fastapi>=0.115.8",
|
||||||
|
"jinja2>=3.1.5",
|
||||||
|
"linkedin-api>=2.3.1",
|
||||||
|
"passlib[bcrypt]>=1.7.4",
|
||||||
|
"pyjwt>=2.10.1",
|
||||||
|
"pymysql>=1.1.1",
|
||||||
|
"python-dotenv>=1.0.1",
|
||||||
|
"python-multipart>=0.0.20",
|
||||||
|
"schedule>=1.2.2",
|
||||||
|
"sqlalchemy>=2.0.38",
|
||||||
|
"uvicorn>=0.34.0",
|
||||||
|
]
|
|
@ -0,0 +1,33 @@
|
||||||
|
from fastapi import Depends, HTTPException, Request
|
||||||
|
from fastapi.responses import RedirectResponse
|
||||||
|
import jwt
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
|
||||||
|
from model.database import get_async_session, User
|
||||||
|
|
||||||
|
SECRET_KEY = "your_secret_key"
|
||||||
|
ALGORITHM = "HS256"
|
||||||
|
|
||||||
|
async def get_current_user(request: Request,db: AsyncSession = Depends(get_async_session)):
|
||||||
|
token = request.cookies.get("access_token")
|
||||||
|
print(token)
|
||||||
|
if not token:
|
||||||
|
raise HTTPException(status_code=401, detail="Unauthorized")
|
||||||
|
|
||||||
|
try:
|
||||||
|
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
|
||||||
|
print(payload)
|
||||||
|
username = payload.get("sub")
|
||||||
|
if not username:
|
||||||
|
raise HTTPException(status_code=401, detail="Unauthorized")
|
||||||
|
# Получаем роль из БД
|
||||||
|
result = await db.execute(select(User).filter(User.username == username))
|
||||||
|
user = result.scalars().first()
|
||||||
|
if not user:
|
||||||
|
return RedirectResponse(url="/login")
|
||||||
|
|
||||||
|
return {"username": user.username, "role": user.role}
|
||||||
|
|
||||||
|
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError):
|
||||||
|
raise HTTPException(status_code=401, detail="Unauthorized")
|
|
@ -0,0 +1,20 @@
|
||||||
|
from fastapi import FastAPI, APIRouter, Depends, Request, HTTPException, Form
|
||||||
|
from fastapi.templating import Jinja2Templates
|
||||||
|
from fastapi.responses import RedirectResponse, HTMLResponse
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
import jwt
|
||||||
|
|
||||||
|
|
||||||
|
from routers.auth import get_current_user
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
templates = Jinja2Templates(directory="templates")
|
||||||
|
|
||||||
|
@router.get("/")
|
||||||
|
async def home(request: Request, username: dict = Depends(get_current_user)):
|
||||||
|
size = "Dashboard"
|
||||||
|
username = username
|
||||||
|
|
||||||
|
return templates.TemplateResponse("index.html", {"request": request, "size": size, "role": username["role"], "username": username['username'], "current_path": request.url.path })#
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
from fastapi import FastAPI, APIRouter, Depends, Request, HTTPException, Form
|
||||||
|
from datetime import datetime
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
from fastapi.responses import HTMLResponse
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
from sqlalchemy import create_engine
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from pydantic import BaseModel, HttpUrl
|
||||||
|
from urllib.parse import urlparse, parse_qs
|
||||||
|
from linkedin_api import Linkedin
|
||||||
|
import logging
|
||||||
|
from utils.logging_setup import configure_global_logging
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
# # Ваши учетные данные LinkedIn
|
||||||
|
|
||||||
|
|
||||||
|
configure_global_logging()
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
username = os.getenv('USERNAME')
|
||||||
|
password = os.getenv('PASSWD')
|
||||||
|
api = Linkedin(username, password)
|
||||||
|
|
||||||
|
|
||||||
|
DATABASE_URL = os.getenv('DATABASE_URL') # Ваши параметры подключения
|
||||||
|
engine = create_engine(DATABASE_URL)
|
||||||
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UrlModel(BaseModel):
|
||||||
|
link_profile: HttpUrl # Используем HttpUrl для проверки валидности URL
|
||||||
|
|
||||||
|
|
||||||
|
async def get_session() -> AsyncSession:
|
||||||
|
async with async_session() as session:
|
||||||
|
yield session
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/link_vacancy")
|
||||||
|
async def vacancy_url(data: UrlModel):
|
||||||
|
if not str(data.link_profile).startswith("https://www.linkedin.com/"):
|
||||||
|
# Возвращаем исключение с кодом 400 и сообщением об ошибке
|
||||||
|
raise HTTPException(status_code=400, detail="Неправильная ссылка")
|
||||||
|
|
||||||
|
query_params = parse_qs(urlparse(str(data.link_profile)).query)
|
||||||
|
current_job_id = query_params.get("currentJobId", [None])[0]
|
||||||
|
|
||||||
|
jobs = api.get_job(current_job_id)
|
||||||
|
location = jobs['formattedLocation']
|
||||||
|
title = jobs['title']
|
||||||
|
listedAt = jobs['listedAt']
|
||||||
|
|
||||||
|
# Преобразование из миллисекунд в секунды и конвертация
|
||||||
|
future_date = datetime.fromtimestamp(listedAt / 1000)
|
||||||
|
|
||||||
|
# Текущая дата
|
||||||
|
current_date = datetime.now()
|
||||||
|
|
||||||
|
# Разница в днях
|
||||||
|
difference = abs((future_date - current_date).days)
|
||||||
|
|
||||||
|
# print(f"Разница в днях: {difference}")
|
||||||
|
|
||||||
|
|
||||||
|
jobPostingId = jobs['jobPostingId']
|
||||||
|
# workplaceTypesResolutionResults = jobs['workplaceTypesResolutionResults']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Извлекаем все localizedName
|
||||||
|
# localized_names = [value['localizedName'] for value in workplaceTypesResolutionResults.values()]
|
||||||
|
|
||||||
|
# print(localized_names)
|
||||||
|
|
||||||
|
# localized_name = workplaceTypesResolutionResults['urn:li:fs_workplaceType:2']['localizedName']
|
||||||
|
link = f'https://www.linkedin.com/jobs/view/{current_job_id}/'
|
||||||
|
|
||||||
|
|
||||||
|
return {"job_id": current_job_id,
|
||||||
|
"job_title": title,
|
||||||
|
"minimum_annual_salary": f"minimum_annual_salary",
|
||||||
|
"salary_currency": 'salary_currency',
|
||||||
|
'location_type': "location_type",
|
||||||
|
'location': location,
|
||||||
|
"job_level": "job_level",
|
||||||
|
"job_type": 'job_type',
|
||||||
|
"days_posted": difference,
|
||||||
|
"hourly_rate": "hourly_rate",
|
||||||
|
"link": link}
|
|
@ -0,0 +1,63 @@
|
||||||
|
from fastapi import APIRouter, Depends, HTTPException, Request, Form, Response
|
||||||
|
from fastapi.responses import RedirectResponse
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
from fastapi.security import OAuth2PasswordBearer
|
||||||
|
from fastapi.templating import Jinja2Templates
|
||||||
|
from passlib.context import CryptContext
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
import jwt
|
||||||
|
|
||||||
|
from model.database import get_async_session, User
|
||||||
|
# from model.models import User
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
templates = Jinja2Templates(directory="templates")
|
||||||
|
|
||||||
|
SECRET_KEY = "your_secret_key"
|
||||||
|
ALGORITHM = "HS256"
|
||||||
|
ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
||||||
|
|
||||||
|
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
||||||
|
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
|
||||||
|
|
||||||
|
def create_access_token(data: dict, expires_delta: timedelta = None):
|
||||||
|
to_encode = data.copy()
|
||||||
|
expire = datetime.utcnow() + (expires_delta or timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
|
||||||
|
to_encode.update({"exp": expire})
|
||||||
|
return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
|
||||||
|
|
||||||
|
async def authenticate_user(db: AsyncSession, username: str, password: str):
|
||||||
|
stmt = select(User).where(User.username == username)
|
||||||
|
result = await db.execute(stmt)
|
||||||
|
user = result.scalar_one_or_none()
|
||||||
|
|
||||||
|
if not user or not pwd_context.verify(password, user.hashed_password):
|
||||||
|
return None
|
||||||
|
return user
|
||||||
|
|
||||||
|
@router.get("/login")
|
||||||
|
async def login_page(request: Request):
|
||||||
|
return templates.TemplateResponse("login.html", {"request": request})
|
||||||
|
|
||||||
|
@router.post("/login")
|
||||||
|
async def login(
|
||||||
|
response: Response,
|
||||||
|
username: str = Form(...),
|
||||||
|
password: str = Form(...),
|
||||||
|
db: AsyncSession = Depends(get_async_session)
|
||||||
|
):
|
||||||
|
user = await authenticate_user(db, username, password)
|
||||||
|
if not user:
|
||||||
|
return Response(content="Неправильный логин или пароль", media_type="text/html")
|
||||||
|
|
||||||
|
access_token = create_access_token(data={"sub": username, "role": user.role})
|
||||||
|
response = RedirectResponse(url="/", status_code=303)
|
||||||
|
response.set_cookie(key="access_token", value=access_token, httponly=True)
|
||||||
|
return response
|
||||||
|
|
||||||
|
@router.get("/logout")
|
||||||
|
async def logout():
|
||||||
|
response = RedirectResponse(url="/login", status_code=303)
|
||||||
|
response.delete_cookie("access_token")
|
||||||
|
return response
|
|
@ -0,0 +1,36 @@
|
||||||
|
from fastapi import FastAPI, APIRouter, Depends, Request, HTTPException, Form
|
||||||
|
from fastapi.templating import Jinja2Templates
|
||||||
|
from fastapi.responses import RedirectResponse, HTMLResponse
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
import jwt
|
||||||
|
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
|
||||||
|
from routers.auth import get_current_user
|
||||||
|
from model.database import get_async_session, Job
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
templates = Jinja2Templates(directory="templates")
|
||||||
|
|
||||||
|
@router.get("/product")
|
||||||
|
async def product(request: Request,
|
||||||
|
username: str = Depends(get_current_user),
|
||||||
|
session: AsyncSession = Depends(get_async_session)):
|
||||||
|
size = "Work"
|
||||||
|
username = username
|
||||||
|
|
||||||
|
query = select(Job)
|
||||||
|
result = await session.execute(query)
|
||||||
|
jobs = result.scalars().all()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return templates.TemplateResponse("product.html", {"request": request, "size": size,
|
||||||
|
"jobs": jobs, "role": username["role"],
|
||||||
|
"username": username['username'],
|
||||||
|
"current_path": request.url.path })#
|
|
@ -0,0 +1,200 @@
|
||||||
|
from fastapi import FastAPI, APIRouter, Depends, Request, HTTPException, Form
|
||||||
|
from datetime import datetime
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
from fastapi.responses import HTMLResponse
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
from sqlalchemy import create_engine
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from pydantic import BaseModel, HttpUrl
|
||||||
|
from urllib.parse import urlparse, parse_qs
|
||||||
|
from linkedin_api import Linkedin
|
||||||
|
import logging
|
||||||
|
from utils.logging_setup import configure_global_logging
|
||||||
|
|
||||||
|
from model.database import async_session, Job, Profile
|
||||||
|
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
# # Ваши учетные данные LinkedIn
|
||||||
|
|
||||||
|
|
||||||
|
configure_global_logging()
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
username = os.getenv('USERNAME')
|
||||||
|
password = os.getenv('PASSWD')
|
||||||
|
api = Linkedin(username, password)
|
||||||
|
|
||||||
|
|
||||||
|
DATABASE_URL = os.getenv('DATABASE_URL') # Ваши параметры подключения
|
||||||
|
engine = create_engine(DATABASE_URL)
|
||||||
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UrlModel(BaseModel):
|
||||||
|
link_profile: HttpUrl # Используем HttpUrl для проверки валидности URL
|
||||||
|
|
||||||
|
|
||||||
|
async def get_session() -> AsyncSession:
|
||||||
|
async with async_session() as session:
|
||||||
|
yield session
|
||||||
|
|
||||||
|
|
||||||
|
async def get_or_create_profile(
|
||||||
|
db: AsyncSession, link: str, first_name: str, last_name: str, geoLocationName: str, all_skills: list, all_languages: list
|
||||||
|
):
|
||||||
|
# Проверяем, существует ли запись с таким first_name и last_name
|
||||||
|
query = select(Profile).filter(Profile.link == link)
|
||||||
|
result = await db.execute(query)
|
||||||
|
profile = result.scalars().first()
|
||||||
|
|
||||||
|
# Если профиля нет, создаём новый
|
||||||
|
if not profile:
|
||||||
|
profile = Profile(
|
||||||
|
link = link,
|
||||||
|
first_name=first_name,
|
||||||
|
last_name=last_name,
|
||||||
|
location=geoLocationName,
|
||||||
|
skills=all_skills,
|
||||||
|
languages=all_languages
|
||||||
|
)
|
||||||
|
db.add(profile)
|
||||||
|
await db.commit()
|
||||||
|
# await db.refresh(profile)
|
||||||
|
|
||||||
|
return profile
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/link_profile")
|
||||||
|
async def profile_url(data: UrlModel, db: AsyncSession = Depends(get_session)):
|
||||||
|
# Проверяем, что ссылка начинается с "https://xander"
|
||||||
|
if not str(data.link_profile).startswith("https://www.linkedin.com/"):
|
||||||
|
# Возвращаем исключение с кодом 400 и сообщением об ошибке
|
||||||
|
raise HTTPException(status_code=400, detail="Incorrect link")
|
||||||
|
url_profiles = str(data.link_profile)
|
||||||
|
path = urlparse(url_profiles).path
|
||||||
|
# print(path)
|
||||||
|
|
||||||
|
# Пропускаем '/in/' и получаем последнюю часть
|
||||||
|
profiles = path.split("/")[2]
|
||||||
|
|
||||||
|
# print(profiles)
|
||||||
|
|
||||||
|
profile = api.get_profile(profiles)
|
||||||
|
print(profile)
|
||||||
|
logging.info(f"{profile}")
|
||||||
|
try:
|
||||||
|
firstName = profile['firstName']
|
||||||
|
lastName = profile['lastName']
|
||||||
|
locationName = profile['locationName']
|
||||||
|
# geoLocationName = profile['geoLocationName']
|
||||||
|
geoLocationName = profile.get('geoLocationName', '') if profile else ''
|
||||||
|
|
||||||
|
# logging.info(f"{geoLocationName}")
|
||||||
|
headline = profile['headline']
|
||||||
|
educations = profile['education']
|
||||||
|
education = [
|
||||||
|
{
|
||||||
|
"schoolName": item.get("schoolName"),
|
||||||
|
"Field_of_Study": item.get("fieldOfStudy"),
|
||||||
|
"Degree": item.get('degreeName'),
|
||||||
|
"Grade": "??",
|
||||||
|
"Start Date": item.get("timePeriod", {}).get("startDate", {}).get("year"),
|
||||||
|
"End Date": item.get("timePeriod", {}).get("endDate", {}).get("year"),
|
||||||
|
"Currently study here": '??',
|
||||||
|
"Description": "??"
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
for item in educations
|
||||||
|
]
|
||||||
|
|
||||||
|
experiences = profile['experience']
|
||||||
|
experience = [
|
||||||
|
{
|
||||||
|
"companyName": item.get("companyName"),
|
||||||
|
"title": item.get("title"),
|
||||||
|
"Employment type": "??",
|
||||||
|
"Location": item.get('geoLocationName'),
|
||||||
|
"Location Type": "??",
|
||||||
|
"Start Date": {
|
||||||
|
"month": item.get("timePeriod", {}).get("startDate", {}).get("month"),
|
||||||
|
"year": item.get("timePeriod", {}).get("startDate", {}).get("year"),
|
||||||
|
},
|
||||||
|
"End Date":{
|
||||||
|
"month": item.get("timePeriod", {}).get("endDate", {}).get("month"),
|
||||||
|
"year": item.get("timePeriod", {}).get("endDate", {}).get("year"),
|
||||||
|
},
|
||||||
|
"Currently study here": '??',
|
||||||
|
"Description": item.get('description')
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
for item in experiences
|
||||||
|
]
|
||||||
|
|
||||||
|
volunteers = profile['volunteer']
|
||||||
|
volunteer = [
|
||||||
|
{
|
||||||
|
"Organization": item.get("companyName"),
|
||||||
|
"Role": item.get("role"),
|
||||||
|
"Cause": item.get("cause"),
|
||||||
|
"Location": item.get('geoLocationName'),
|
||||||
|
"Start Date": {
|
||||||
|
"month": item.get("timePeriod", {}).get("startDate", {}).get("month"),
|
||||||
|
"year": item.get("timePeriod", {}).get("startDate", {}).get("year"),
|
||||||
|
},
|
||||||
|
"End Date":{
|
||||||
|
"month": item.get("timePeriod", {}).get("endDate", {}).get("month"),
|
||||||
|
"year": item.get("timePeriod", {}).get("endDate", {}).get("year"),
|
||||||
|
},
|
||||||
|
"Currently study here": '??',
|
||||||
|
"Description": item.get('description')
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
for item in volunteers
|
||||||
|
]
|
||||||
|
all_skills = profile['skills']
|
||||||
|
skills = [item['name'] for item in all_skills]
|
||||||
|
all_languages = profile['languages']
|
||||||
|
languages = [item['name'] for item in all_languages]
|
||||||
|
profile = await get_or_create_profile(
|
||||||
|
db, data.link_profile, firstName, lastName, f"{geoLocationName} {locationName}", skills, languages
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Если профиль не в виде словаря, возвращаем его напрямую
|
||||||
|
return {"FirstName": firstName,
|
||||||
|
"LastName":lastName,
|
||||||
|
"Location": f"{geoLocationName} {locationName}",
|
||||||
|
"Statement":headline,
|
||||||
|
'Education - list': education,
|
||||||
|
'Experience - list': experience,
|
||||||
|
"Volunteering - list": volunteer,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"skills": skills,
|
||||||
|
"languages":languages}
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(e)
|
||||||
|
return "NOT date"
|
|
@ -0,0 +1,88 @@
|
||||||
|
from fastapi import APIRouter, Depends, HTTPException, Request, Form
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.future import select
|
||||||
|
from model.database import get_async_session, User, hash_password
|
||||||
|
from fastapi.templating import Jinja2Templates
|
||||||
|
from fastapi.responses import RedirectResponse
|
||||||
|
|
||||||
|
from routers.auth import get_current_user
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
templates = Jinja2Templates(directory="templates")
|
||||||
|
|
||||||
|
|
||||||
|
# 🔹 Список пользователей (доступно только авторизованным)
|
||||||
|
@router.get("/users")
|
||||||
|
async def users_list(
|
||||||
|
request: Request,
|
||||||
|
db: AsyncSession = Depends(get_async_session),
|
||||||
|
username: dict = Depends(get_current_user)
|
||||||
|
):
|
||||||
|
result = await db.execute(select(User))
|
||||||
|
users = result.scalars().all()
|
||||||
|
username = username
|
||||||
|
size = "Users"
|
||||||
|
if username["role"] != "admin":
|
||||||
|
raise HTTPException(status_code=403, detail="Access forbidden")
|
||||||
|
return templates.TemplateResponse("users.html", {"request": request, "users":users, "role": username["role"], "username": username["username"], "size": size, "current_path": request.url.path})
|
||||||
|
|
||||||
|
|
||||||
|
# 🔹 Создание пользователя (доступно только администраторам)
|
||||||
|
@router.post("/users/create")
|
||||||
|
async def create_user(
|
||||||
|
request: Request,
|
||||||
|
username: str = Form(...),
|
||||||
|
password: str = Form(...),
|
||||||
|
role: str = Form("user"),
|
||||||
|
db: AsyncSession = Depends(get_async_session),
|
||||||
|
current_user: dict = Depends(get_current_user) # Проверяем авторизацию
|
||||||
|
):
|
||||||
|
# Проверяем, является ли пользователь администратором
|
||||||
|
result = await db.execute(select(User).filter(User.username == current_user['username']))
|
||||||
|
user = result.scalars().first()
|
||||||
|
if not user or user.role != "admin":
|
||||||
|
raise HTTPException(status_code=403, detail="Доступ запрещен")
|
||||||
|
|
||||||
|
# Проверяем, есть ли уже такой пользователь
|
||||||
|
result = await db.execute(select(User).filter(User.username == username))
|
||||||
|
existing_user = result.scalars().first()
|
||||||
|
|
||||||
|
if existing_user:
|
||||||
|
raise HTTPException(status_code=400, detail="Пользователь уже существует")
|
||||||
|
|
||||||
|
hashed_password = hash_password(password)
|
||||||
|
new_user = User(username=username, hashed_password=hashed_password, role=role)
|
||||||
|
|
||||||
|
db.add(new_user)
|
||||||
|
await db.commit()
|
||||||
|
|
||||||
|
return RedirectResponse(url="/users", status_code=303)
|
||||||
|
|
||||||
|
|
||||||
|
# 🔹 Обновление пароля (доступно только для администраторов или самого пользователя)
|
||||||
|
@router.post("/users/update_password")
|
||||||
|
async def update_password(
|
||||||
|
request: Request,
|
||||||
|
user_id: int = Form(...),
|
||||||
|
new_password: str = Form(...),
|
||||||
|
db: AsyncSession = Depends(get_async_session),
|
||||||
|
current_user: dict = Depends(get_current_user) # Проверяем авторизацию
|
||||||
|
):
|
||||||
|
result = await db.execute(select(User).filter(User.id == user_id))
|
||||||
|
user = result.scalars().first()
|
||||||
|
|
||||||
|
if not user:
|
||||||
|
raise HTTPException(status_code=404, detail="Пользователь не найден")
|
||||||
|
|
||||||
|
# Получаем данные текущего пользователя
|
||||||
|
result = await db.execute(select(User).filter(User.username == current_user['username']))
|
||||||
|
current_user_obj = result.scalars().first()
|
||||||
|
|
||||||
|
# Только админ или сам пользователь могут менять пароль
|
||||||
|
if not current_user_obj or (current_user_obj.role != "admin" and current_user_obj.id != user.id):
|
||||||
|
raise HTTPException(status_code=403, detail="Доступ запрещен")
|
||||||
|
|
||||||
|
user.hashed_password = hash_password(new_password)
|
||||||
|
await db.commit()
|
||||||
|
|
||||||
|
return RedirectResponse(url="/users", status_code=303)
|
After Width: | Height: | Size: 4.1 KiB |
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
|
@ -0,0 +1,17 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6395" height="1079" viewBox="0 0 6395 1079">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip-path">
|
||||||
|
<rect id="Rectangle_73" data-name="Rectangle 73" width="6395" height="1079" transform="translate(-5391)" fill="#fff"/>
|
||||||
|
</clipPath>
|
||||||
|
<linearGradient id="linear-gradient" x1="0.747" y1="0.222" x2="0.973" y2="0.807" gradientUnits="objectBoundingBox">
|
||||||
|
<stop offset="0" stop-color="#2b51b4"/>
|
||||||
|
<stop offset="1" stop-color="#1c3faa"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g id="Mask_Group_1" data-name="Mask Group 1" transform="translate(5391)" clip-path="url(#clip-path)">
|
||||||
|
<g id="Group_118" data-name="Group 118" transform="translate(-419.333 -1.126)">
|
||||||
|
<path id="Path_142" data-name="Path 142" d="M6271.734-6.176s-222.478,187.809-55.349,583.254c44.957,106.375,81.514,205.964,84.521,277,8.164,192.764-156.046,268.564-156.046,268.564l-653.53-26.8L5475.065-21.625Z" transform="translate(-4876.383 0)" fill="#f1f5f8"/>
|
||||||
|
<path id="Union_6" data-name="Union 6" d="M-2631.1,1081.8v-1.6H-8230.9V.022H-2631.1V0H-1871.4s-187.845,197.448-91.626,488.844c49.167,148.9,96.309,256.289,104.683,362.118,7.979,100.852-57.98,201.711-168.644,254.286-65.858,31.29-144.552,42.382-223.028,42.383C-2441.2,1147.632-2631.1,1081.8-2631.1,1081.8Z" transform="translate(3259.524 0.803)" fill="url(#linear-gradient)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,73 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="840" height="726.849" viewBox="0 0 840 726.849">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
|
||||||
|
<stop offset="0" stop-color="gray" stop-opacity="0.251"/>
|
||||||
|
<stop offset="0.54" stop-color="gray" stop-opacity="0.122"/>
|
||||||
|
<stop offset="1" stop-color="gray" stop-opacity="0.102"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="linear-gradient-2" x1="-0.512" y1="7.758" x2="-0.512" y2="6.717" xlink:href="#linear-gradient"/>
|
||||||
|
<linearGradient id="linear-gradient-3" x1="-1.386" y1="7.85" x2="-1.386" y2="6.809" xlink:href="#linear-gradient"/>
|
||||||
|
</defs>
|
||||||
|
<g id="undraw_Taken_if77" transform="translate(0 -0.001)">
|
||||||
|
<g id="Group_1" data-name="Group 1" opacity="0.8">
|
||||||
|
<ellipse id="Ellipse_1" data-name="Ellipse 1" cx="146.46" cy="113.46" rx="146.46" ry="113.46" transform="translate(285.54 18.85)" fill="url(#linear-gradient)"/>
|
||||||
|
</g>
|
||||||
|
<ellipse id="Ellipse_2" data-name="Ellipse 2" cx="143.21" cy="110.94" rx="143.21" ry="110.94" transform="translate(288.79 21.37)" fill="#565472"/>
|
||||||
|
<path id="Path_1" data-name="Path 1" d="M491.94,231.21c0-61.27,64.11-110.94,143.2-110.94A175.54,175.54,0,0,1,706.5,135c-25.17-17-58.1-27.33-94.14-27.33-79.09,0-143.21,49.67-143.21,110.94,0,41.14,28.91,77.05,71.86,96.21C510.94,294.48,491.94,264.57,491.94,231.21Z" transform="translate(-180 -86.57)" fill="#fff" opacity="0.1"/>
|
||||||
|
<path id="Path_2" data-name="Path 2" d="M432,176.9,590.76,451.88,749.52,726.85H114.48L273.24,451.88Z" fill="#ededf4" opacity="0.2"/>
|
||||||
|
<g id="Group_2" data-name="Group 2" opacity="0.3">
|
||||||
|
<path id="Path_3" data-name="Path 3" d="M649.67,652.79,662,616.2a62.66,62.66,0,0,0-23.2-70.89l.1-.06a61.48,61.48,0,0,0-15.79-8h0l-.17-.06-.19-.06h0a61.549,61.549,0,0,0-16.9-3.18,59.275,59.275,0,0,0-6.11,0,62.323,62.323,0,0,0-10.49,1.45c-1,.22-2,.47-2.91.74s-1.93.56-2.88.87c-1.9.63-3.77,1.34-5.6,2.15-.92.4-1.83.82-2.72,1.27a61.467,61.467,0,0,0-7.75,4.56c-.83.57-1.64,1.16-2.44,1.76a62,62,0,0,0-21.24,29.6L524.33,634a61.861,61.861,0,0,0-2.68,28.12c.2,1.45.45,2.89.74,4.32s.65,2.84,1,4.24c.27.93.55,1.86.86,2.78.46,1.37,1,2.74,1.51,4.08.37.89.76,1.78,1.17,2.66.81,1.75,1.71,3.46,2.68,5.13a54.1,54.1,0,0,0,3.16,4.88c.84,1.18,1.73,2.34,2.65,3.46a52.233,52.233,0,0,0,3.92,4.33,61.809,61.809,0,0,0,21,13.89h0l.34.14a21.659,21.659,0,0,1,1.4-2.17c3-4.11,8.22-7,13.19-5.92.36.08.72.19,1.08.3,2.52.89,5,2.48,7.43,3.26a6.66,6.66,0,0,0,5.61-.07c4.86-2.59,3.06-10.76,7.23-14.34a6.5,6.5,0,0,1,.61-.46,1.885,1.885,0,0,1-.16-.23c3.22-2,7.68-.67,11.39.62,4,1.41,9.22,2.36,12-.91,1.88-2.24,1.74-5.65,3.53-8,2.08-2.7,6-3,9.39-2.52l.17.05c6.5,2.68,13.6-1.77,13.1-8.78A54.765,54.765,0,0,1,649.67,652.79Z" transform="translate(-180 -86.57)" fill="url(#linear-gradient-2)"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_4" data-name="Path 4" d="M563.21,706.78c2.92-4,7.93-6.8,12.73-5.71s9.35,5.66,13.62,3.37c5.84-3.12,1.7-14.59,11.18-15.44a12.441,12.441,0,0,1,5.77,1c4,1.63,10.26,3.47,13.34-.2,1.81-2.16,1.68-5.45,3.41-7.69,2-2.6,5.81-2.93,9.06-2.43l.16.05c6.27,2.59,13.13-1.71,12.64-8.47-.63-9,2.23-17.48,2.85-19.32l11.88-35.31A60.38,60.38,0,0,0,622,540.34h0a60.38,60.38,0,0,0-76.27,37.86L527,633.73a60.39,60.39,0,0,0,34.82,75.15,21.457,21.457,0,0,1,1.39-2.1Z" transform="translate(-180 -86.57)" fill="#fff"/>
|
||||||
|
<circle id="Ellipse_3" data-name="Ellipse 3" cx="6.51" cy="6.51" r="6.51" transform="translate(398.84 479.57)" opacity="0.2"/>
|
||||||
|
<circle id="Ellipse_4" data-name="Ellipse 4" cx="6.51" cy="6.51" r="6.51" transform="translate(435.86 492.02)" opacity="0.2"/>
|
||||||
|
<ellipse id="Ellipse_5" data-name="Ellipse 5" cx="9.76" cy="6.51" rx="9.76" ry="6.51" transform="matrix(0.319, -0.948, 0.948, 0.319, 406.3, 524.221)" fill="#e0e0e0"/>
|
||||||
|
<circle id="Ellipse_6" data-name="Ellipse 6" cx="9.76" cy="9.76" r="9.76" transform="translate(542.77 477.76)" fill="#fff"/>
|
||||||
|
<circle id="Ellipse_7" data-name="Ellipse 7" cx="4.88" cy="4.88" r="4.88" transform="translate(578.57 467.29)" fill="#fff"/>
|
||||||
|
<g id="Group_4" data-name="Group 4" opacity="0.5">
|
||||||
|
<g id="Group_3" data-name="Group 3" opacity="0.3">
|
||||||
|
<path id="Path_5" data-name="Path 5" d="M662.67,259.79,675,223.2a62.66,62.66,0,0,0-23.2-70.89l.1-.06a61.479,61.479,0,0,0-15.79-8h0l-.17-.06-.19-.06h0a61.55,61.55,0,0,0-16.9-3.18,59.273,59.273,0,0,0-6.11,0,62.319,62.319,0,0,0-10.49,1.45c-1,.22-2,.47-2.91.74s-1.93.56-2.88.87c-1.9.63-3.77,1.34-5.6,2.15-.92.4-1.83.82-2.72,1.27a61.472,61.472,0,0,0-7.75,4.56c-.83.57-1.64,1.16-2.44,1.76a62,62,0,0,0-21.24,29.6L537.33,241a61.858,61.858,0,0,0-2.68,28.12c.2,1.45.45,2.89.74,4.32s.65,2.84,1,4.24c.27.93.55,1.86.86,2.78.46,1.37,1,2.74,1.51,4.08.37.89.76,1.78,1.17,2.66.81,1.75,1.71,3.46,2.68,5.13a54.1,54.1,0,0,0,3.16,4.88c.84,1.18,1.73,2.34,2.65,3.46,1.24,1.5,2.54,2.95,3.92,4.33a61.81,61.81,0,0,0,21,13.89h0l.34.14a21.648,21.648,0,0,1,1.4-2.17c3-4.11,8.22-7,13.19-5.92.36.08.72.19,1.08.3,2.52.89,5,2.48,7.43,3.26a6.66,6.66,0,0,0,5.61-.07c4.86-2.59,3.06-10.76,7.23-14.34a6.509,6.509,0,0,1,.61-.46,1.884,1.884,0,0,1-.16-.23c3.22-2,7.68-.67,11.39.62,4,1.41,9.22,2.36,12-.91,1.88-2.24,1.74-5.65,3.53-8,2.08-2.7,6-3,9.39-2.52h.17c6.5,2.68,13.6-1.77,13.1-8.78C659.06,270.51,662,261.7,662.67,259.79Z" transform="translate(-180 -86.57)" fill="url(#linear-gradient-3)"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_6" data-name="Path 6" d="M576.21,313.78c2.92-4,7.93-6.8,12.73-5.71s9.35,5.66,13.62,3.37c5.84-3.12,1.7-14.59,11.18-15.44a12.44,12.44,0,0,1,5.77,1c4,1.63,10.26,3.47,13.34-.2,1.81-2.16,1.68-5.45,3.41-7.69,2-2.6,5.81-2.93,9.06-2.43l.16.05c6.27,2.59,13.13-1.71,12.64-8.47-.63-9,2.23-17.48,2.85-19.32l11.88-35.31A60.38,60.38,0,0,0,635,147.34h0a60.38,60.38,0,0,0-76.27,37.86L540,240.73a60.39,60.39,0,0,0,34.82,75.15,21.462,21.462,0,0,1,1.39-2.1Z" transform="translate(-180 -86.57)" fill="#fff"/>
|
||||||
|
<circle id="Ellipse_8" data-name="Ellipse 8" cx="6.51" cy="6.51" r="6.51" transform="translate(411.84 86.57)" opacity="0.2"/>
|
||||||
|
<circle id="Ellipse_9" data-name="Ellipse 9" cx="6.51" cy="6.51" r="6.51" transform="translate(448.86 99.02)" opacity="0.2"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_7" data-name="Path 7" d="M749.52,186a87.518,87.518,0,0,1,2.79,22c0,61.27-64.11,110.94-143.2,110.94C544.38,318.9,489.69,285.64,472,240c13.14,50.77,71,89,140.41,89,79.09,0,143.21-49.67,143.21-110.94a88.159,88.159,0,0,0-6.1-32.06Z" transform="translate(-180 -86.57)" opacity="0.1"/>
|
||||||
|
<g id="Group_5" data-name="Group 5" opacity="0.8">
|
||||||
|
<ellipse id="Ellipse_10" data-name="Ellipse 10" cx="296.18" cy="77.41" rx="296.18" ry="77.41" transform="translate(135.82 103.27)" fill="url(#linear-gradient)"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_8" data-name="Path 8" d="M612,192.4c-158.18,0-286.42,33.51-286.42,74.86H898.42C898.42,225.91,770.18,192.4,612,192.4Z" transform="translate(-180 -86.57)" fill="#fff"/>
|
||||||
|
<path id="Path_9" data-name="Path 9" d="M612,342.11c158.18,0,286.42-33.51,286.42-74.85H325.58C325.58,308.6,453.82,342.11,612,342.11Z" transform="translate(-180 -86.57)" fill="#fff"/>
|
||||||
|
<path id="Path_10" data-name="Path 10" d="M612,342.11c158.18,0,286.42-33.51,286.42-74.85H325.58C325.58,308.6,453.82,342.11,612,342.11Z" transform="translate(-180 -86.57)" opacity="0.05"/>
|
||||||
|
<rect id="Rectangle_1" data-name="Rectangle 1" width="273.4" height="39.06" rx="17.22" transform="translate(295.3 161.15)" opacity="0.05"/>
|
||||||
|
<path id="Path_11" data-name="Path 11" d="M313.89,144.38a3.68,3.68,0,0,1-2.05-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.67,3.67,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.619,1.619,0,0,0,.36.21,3.68,3.68,0,0,1,2.05,4.44,1.889,1.889,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.23h0a1.649,1.649,0,0,0,.2-.37,3.67,3.67,0,0,1,4.44-2,2,2,0,0,0,.41.08h0a1.84,1.84,0,0,0,1.22-3.31h0A1.621,1.621,0,0,0,313.89,144.38Z" transform="translate(-180 -86.57)" fill="#fff" opacity="0.5"/>
|
||||||
|
<path id="Path_12" data-name="Path 12" d="M822.89,450.38a3.68,3.68,0,0,1-2-4.44,1.854,1.854,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.818,1.818,0,0,0-.2.36,3.67,3.67,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.622,1.622,0,0,0,.36.21,3.68,3.68,0,0,1,2,4.44,1.893,1.893,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.23h0a1.648,1.648,0,0,0,.2-.37,3.67,3.67,0,0,1,4.44-2,2,2,0,0,0,.41.08h0a1.84,1.84,0,0,0,1.22-3.31h0a1.619,1.619,0,0,0-.36-.25Z" transform="translate(-180 -86.57)" fill="#fff" opacity="0.5"/>
|
||||||
|
<path id="Path_13" data-name="Path 13" d="M260.89,592.38a3.68,3.68,0,0,1-2.05-4.44,1.859,1.859,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.818,1.818,0,0,0-.2.36,3.67,3.67,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.619,1.619,0,0,0,.36.21,3.68,3.68,0,0,1,2.05,4.44,1.891,1.891,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.23h0a1.649,1.649,0,0,0,.2-.37,3.67,3.67,0,0,1,4.44-2,2,2,0,0,0,.41.08h0a1.84,1.84,0,0,0,1.22-3.31h0A1.619,1.619,0,0,0,260.89,592.38Z" transform="translate(-180 -86.57)" fill="#fff" opacity="0.5"/>
|
||||||
|
<path id="Path_14" data-name="Path 14" d="M205.89,261.38a3.68,3.68,0,0,1-2-4.44,1.859,1.859,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.67,3.67,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.621,1.621,0,0,0,.36.21,3.68,3.68,0,0,1,2.05,4.44,1.889,1.889,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.23h0a1.65,1.65,0,0,0,.2-.37,3.67,3.67,0,0,1,4.44-2,2,2,0,0,0,.41.08h0a1.84,1.84,0,0,0,1.22-3.31h0A1.62,1.62,0,0,0,205.89,261.38Z" transform="translate(-180 -86.57)" fill="#fff" opacity="0.5"/>
|
||||||
|
<path id="Path_15" data-name="Path 15" d="M812.89,93.38a3.68,3.68,0,0,1-2-4.44,1.855,1.855,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.818,1.818,0,0,0-.2.36,3.67,3.67,0,0,1-4.44,2,2,2,0,0,0-.41-.08h0A1.84,1.84,0,0,0,801.34,93h0a1.618,1.618,0,0,0,.36.21,3.68,3.68,0,0,1,2,4.44,1.886,1.886,0,0,0-.08.4h0A1.84,1.84,0,0,0,807,99.23h0a1.65,1.65,0,0,0,.2-.37,3.67,3.67,0,0,1,4.44-2,2,2,0,0,0,.41.08h0a1.84,1.84,0,0,0,1.22-3.31h0a1.62,1.62,0,0,0-.38-.25Z" transform="translate(-180 -86.57)" fill="#fff" opacity="0.5"/>
|
||||||
|
<g id="Group_6" data-name="Group 6" opacity="0.5">
|
||||||
|
<rect id="Rectangle_2" data-name="Rectangle 2" width="3" height="17" transform="translate(110 257.85)" fill="#fff"/>
|
||||||
|
<rect id="Rectangle_3" data-name="Rectangle 3" width="3" height="17" transform="translate(120 264.85) rotate(90)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_7" data-name="Group 7" opacity="0.5">
|
||||||
|
<rect id="Rectangle_4" data-name="Rectangle 4" width="3" height="17" transform="translate(830 177.85)" fill="#fff"/>
|
||||||
|
<rect id="Rectangle_5" data-name="Rectangle 5" width="3" height="17" transform="translate(840 184.85) rotate(90)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_8" data-name="Group 8" opacity="0.5">
|
||||||
|
<rect id="Rectangle_6" data-name="Rectangle 6" width="3" height="17" transform="translate(730 456.85)" fill="#fff"/>
|
||||||
|
<rect id="Rectangle_7" data-name="Rectangle 7" width="3" height="17" transform="translate(740 463.85) rotate(90)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<circle id="Ellipse_11" data-name="Ellipse 11" cx="6" cy="6" r="6" transform="translate(717 75.85)" fill="#fff" opacity="0.5"/>
|
||||||
|
<circle id="Ellipse_12" data-name="Ellipse 12" cx="6" cy="6" r="6" transform="translate(0 6.85)" fill="#fff" opacity="0.5"/>
|
||||||
|
<circle id="Ellipse_13" data-name="Ellipse 13" cx="6" cy="6" r="6" transform="translate(180 351.85)" fill="#fff" opacity="0.5"/>
|
||||||
|
<ellipse id="Ellipse_14" data-name="Ellipse 14" cx="34" cy="7" rx="34" ry="7" transform="translate(200 147.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_15" data-name="Ellipse 15" cx="34" cy="7" rx="34" ry="7" transform="translate(200 200.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_16" data-name="Ellipse 16" cx="34" cy="7" rx="34" ry="7" transform="translate(587 147.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_17" data-name="Ellipse 17" cx="34" cy="7" rx="34" ry="7" transform="translate(587 200.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_18" data-name="Ellipse 18" cx="34" cy="7" rx="34" ry="7" transform="translate(398 117.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_19" data-name="Ellipse 19" cx="34" cy="7" rx="34" ry="7" transform="translate(423 44.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_20" data-name="Ellipse 20" cx="34" cy="7" rx="34" ry="7" transform="translate(358 74.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_21" data-name="Ellipse 21" cx="34" cy="7" rx="34" ry="7" transform="translate(483 87.43)" opacity="0.05"/>
|
||||||
|
<ellipse id="Ellipse_22" data-name="Ellipse 22" cx="34" cy="7" rx="34" ry="7" transform="translate(398 221.43)" opacity="0.05"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,121 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="330.653" height="229.984" viewBox="0 0 330.653 229.984">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
|
||||||
|
<stop offset="0" stop-color="gray" stop-opacity="0.251"/>
|
||||||
|
<stop offset="0.54" stop-color="gray" stop-opacity="0.122"/>
|
||||||
|
<stop offset="1" stop-color="gray" stop-opacity="0.102"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g id="undraw_press_play_bx2d" transform="translate(0 -33.899)">
|
||||||
|
<circle id="Ellipse_37" data-name="Ellipse 37" cx="3.972" cy="3.972" r="3.972" transform="translate(302.377 33.899)" fill="#6c63ff" opacity="0.1"/>
|
||||||
|
<ellipse id="Ellipse_38" data-name="Ellipse 38" cx="27.882" cy="2.78" rx="27.882" ry="2.78" transform="translate(200.471 258.323)" fill="#6c63ff" opacity="0.1"/>
|
||||||
|
<path id="Path_65" data-name="Path 65" d="M136.394,487.31l-.122,6.6-.98,53.523L126.9,567.077l-28.9.331V490.352l30.166-2.39Z" transform="translate(-65.564 -326.011)" fill="#5f5d7e"/>
|
||||||
|
<path id="Path_66" data-name="Path 66" d="M136.394,487.31l-.122,6.6-.98,53.523L126.9,567.077l-28.9.331V490.352l30.166-2.39Z" transform="translate(-65.564 -326.011)" opacity="0.1"/>
|
||||||
|
<path id="Path_67" data-name="Path 67" d="M194.819,487.31l-.122,6.6-.98,53.523-8.387,19.641,2.208-73.038-.007-.046-.94-6.031Z" transform="translate(-123.989 -326.011)" fill="#5f5d7e"/>
|
||||||
|
<path id="Path_68" data-name="Path 68" d="M128.166,487.962l8.228-.652-.122,6.6-7.166.079L98,494.34v-3.988Z" transform="translate(-65.564 -326.011)" opacity="0.1"/>
|
||||||
|
<path id="Path_69" data-name="Path 69" d="M930.981,487.562v76.613h-6.729L897.33,544.538V485.4l24.053-2.261,1.476.679,1.393.642Z" transform="translate(-600.328 -323.222)" fill="#5f5d7e"/>
|
||||||
|
<rect id="Rectangle_55" data-name="Rectangle 55" width="6.729" height="80.356" transform="translate(323.924 160.597)" opacity="0.1"/>
|
||||||
|
<path id="Path_70" data-name="Path 70" d="M930.981,483.819v4.405l-6.729.076-26.922.3v-3.2l24.053-2.261,1.476.679,1.393.642v-.642Z" transform="translate(-600.328 -323.222)" opacity="0.1"/>
|
||||||
|
<path id="Path_71" data-name="Path 71" d="M330.653,464.929v6.242L0,474.858v-7.944l31.113-6.289,270.745-1.986Z" transform="translate(0 -306.831)" fill="#5f5d7e"/>
|
||||||
|
<path id="Path_72" data-name="Path 72" d="M330.653,477.64v6.242L0,487.57v-7.944Z" transform="translate(0 -319.542)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_56" data-name="Rectangle 56" width="115.818" height="89.925" rx="22.82" transform="translate(120.975 64.539)" fill="#474157"/>
|
||||||
|
<rect id="Rectangle_57" data-name="Rectangle 57" width="97.349" height="73.356" transform="translate(130.295 72.651)" fill="#ededf4"/>
|
||||||
|
<circle id="Ellipse_39" data-name="Ellipse 39" cx="1.595" cy="1.595" r="1.595" transform="translate(124.9 107.732)" fill="#e6e8ec"/>
|
||||||
|
<circle id="Ellipse_40" data-name="Ellipse 40" cx="2.631" cy="2.631" r="2.631" transform="translate(229.326 106.868)" fill="#e6e8ec"/>
|
||||||
|
<path id="Path_73" data-name="Path 73" d="M620.934,349.638l-12.448-7.566a1.7,1.7,0,0,0-2.525,1.483V358.27a1.7,1.7,0,0,0,2.525,1.483l12.448-7.143a1.7,1.7,0,0,0,0-2.972Zm9.36,1.274a17.542,17.542,0,1,0-17.542,17.542A17.542,17.542,0,0,0,630.294,350.912Zm-31.688,0a14.146,14.146,0,1,1,14.146,14.146,14.146,14.146,0,0,1-14.146-14.146Z" transform="translate(-431.469 -240.026)" fill="#474157"/>
|
||||||
|
<path id="Path_74" data-name="Path 74" d="M736.127,405.782a4.14,4.14,0,0,0-.374-1.165c.251-.857.414-1.384.414-1.384a1.934,1.934,0,0,0-.04-.331,5.081,5.081,0,0,0-5.147-4.263c-1.986.036-5.753.169-9.93.639.238-1.671.523-3.671.821-5.729l.546.06a2.617,2.617,0,0,1,.391.02h.175a1.8,1.8,0,0,0,1.211-.371.715.715,0,0,0-.222-1.172A2.952,2.952,0,0,0,726.565,391a2.317,2.317,0,0,0,0-2.694c-.7-.993-2.178-1.655-2.257-2.823a3.449,3.449,0,0,1,.748-1.844,7.7,7.7,0,0,0-1.215-9.251,18.114,18.114,0,0,0-1.47-1.307c-.728-2.674-1.489-5.064-1.714-5.14-.291-.1-.791-.725-1.268-1.264a6.084,6.084,0,0,0-.023-1.367c-.351-2.317-2.648-3.972-3.912-6.017a10.388,10.388,0,0,1-1.168-6.894,49.322,49.322,0,0,1,1.807-6.9,8.782,8.782,0,0,0,.354-5.187,9.428,9.428,0,0,0-2.135-3.217,24.318,24.318,0,0,0-7.586-5.958,15.076,15.076,0,0,0-6.716-1.436h-.023l-.364.02-.258.017-.258.026-.275.026h0c-.281.036-.559.079-.837.136a28.9,28.9,0,0,0-6.14-.688h-.268a3.144,3.144,0,0,0-1.754.414c-.735.513-.828,1.433-1.049,2.234a6.2,6.2,0,0,1-2.383,3.31c-.791.569-1.721.993-2.476,1.589a2.522,2.522,0,0,0-1.142,2.37,2.586,2.586,0,0,0,1.655,1.622c-.1.119-.2.235-.288.357.156.063.331.119.473.165.993.295,2.062.331,3.068.6a6.722,6.722,0,0,1,.814.275,11.624,11.624,0,0,0-1.36,5.468,11.78,11.78,0,0,0,6.163,10.333v.331c.1,3.455-.159,7.659-1.926,8.371s-3.459,1.516-4.5,2.036l-.331.175c-.275-.126-.549-.258-.818-.4,0,0-1.407-.166-1.162.907,0,0-4.253-.662-6.587,1.155a60.655,60.655,0,0,0-6.914,6.6c-.751.99-6.56,3.154-6.56,3.154a7.448,7.448,0,0,0,1.039-5.693s-.874-3.78-.457-5.3,1.5-7.143,1.5-7.143.152-5.938-3.088-8.662-5.494-4.965-4.243-2.317a36.89,36.89,0,0,0,1.834,3.545s-7.748,1.84-5,4.713,3.5,2.876,3.5,2.876-.917,7.093-1.086,8.414-1.655,11.383-1.655,11.383-.083,4.786.751,5.527a3.765,3.765,0,0,0,4,2.979s6.58-.166,8.414-.907,8.162-4.7,8.831-4.455a.379.379,0,0,1,.129.086.945.945,0,0,1,.1.1c-.662,1.466-2.231,6.444-1.562,8.89,0,0-.583,6.927,2.916,9.155,0,0,5.081,8.579,3.164,13.2-.152.374-.288.718-.414,1.053-2.909-2.413-7.348-4.634-14.126-5.862-.692-.126-1.38-.278-2.062-.444-1.926-.467-7.225-.894-9.747,7.484a36.856,36.856,0,0,1-2.237,5.667,18.711,18.711,0,0,0-2.118,7.745c-.056,4,2.012,7.973,9.519,9.43a28.567,28.567,0,0,0,1.443,9.079c2.082,5.2,5.415,13.61,5.415,13.61s4,8.579,4.25,12.041a55.282,55.282,0,0,1,.235,7.282,3.246,3.246,0,0,1-.033.364,8.779,8.779,0,0,1-1.119,1.016c-.583.331-2.5,2.393-2.5,2.886a8.82,8.82,0,0,0,.126,1.41,3.474,3.474,0,0,0-1.4,2.515c0,4.475,12.7,8.1,28.365,8.1s28.362-3.641,28.362-8.1c0-4.084-10.592-7.46-24.354-8.016,2.87-1.145,5.418-2.347,6.474-3.31a1.549,1.549,0,0,0,.5-.682L705.5,473.78s-.208.046-.516.136l-.185-.278c-1.185-1.8-3.465-5.4-3.465-6.375,0-.361-.6-2.668-1.476-5.829V451.289c8.692,1.324,19.892-.477,19.892-.477l.05-.026h.218v-.119c1.506-.834,9.039-5.246,11.273-11.1.662-1.708-.162-4.154-1.8-6.769,1.145-2.843,3.972-10.188,3.69-13.117,0-.156-.02-.331-.02-.5a8.657,8.657,0,0,0,.033-.9c.331-4.3,2.979-12.164,2.979-12.164S736.16,405.981,736.127,405.782ZM679.86,386.665c.6,1.059,1.248,2.413,1.5,2.962h0s-.88-1.622-1.486-2.962Zm.629,92.709-.063.023v-.331a19.677,19.677,0,0,1,.063-2.588,3.032,3.032,0,0,0-.285-1.344,31.771,31.771,0,0,1-2.029-7.987,40.053,40.053,0,0,1-.434-6.835,121.041,121.041,0,0,0,.149-15.113l5.124,1.152,5.958,12.147s3.833,5.931,5.021,10.611V473.8a11.451,11.451,0,0,1-1.791,3.886c-.791,1.082-1.562,2.178-2.277,3.31-.218.351-.46.712-.7,1.049-.079,0-3.995.228-4.66.963a4.449,4.449,0,0,0-1.245,1.887l-.169.026a39.5,39.5,0,0,0-2.645-5.544Z" transform="translate(-470.055 -237.258)" fill="url(#linear-gradient)"/>
|
||||||
|
<path id="Path_75" data-name="Path 75" d="M775.915,767.873l-1.324,4.3-5.627,4.882-8.275,2.376s-3.889-2.128-2.565-2.542a3.266,3.266,0,0,0,1.248-1.086c-.463,1.688,3.22-.487,3.22-.487s9.516-6.785,10.509-7.53a7.484,7.484,0,0,1,2.118-.97C775.634,767.465,775.915,767.873,775.915,767.873Z" transform="translate(-540.277 -530.011)" opacity="0.1"/>
|
||||||
|
<path id="Path_76" data-name="Path 76" d="M757.738,692.923l-1.324,4.3-5.627,4.882-8.275,2.376s-3.889-2.128-2.565-2.542a3.264,3.264,0,0,0,1.248-1.086,16.54,16.54,0,0,0,1.105-1.6c.708-1.139,1.476-2.237,2.261-3.31a11.914,11.914,0,0,0,2.089-5.5c.579-4.551-5.3-13.736-5.3-13.736L730.68,654.79l14.894,1.82s8.026,27.555,8.026,28.878c0,.993,2.264,4.584,3.442,6.395C757.457,692.516,757.738,692.923,757.738,692.923Z" transform="translate(-522.1 -455.061)" fill="#fdc2cc"/>
|
||||||
|
<ellipse id="Ellipse_41" data-name="Ellipse 41" cx="28.173" cy="8.126" rx="28.173" ry="8.126" transform="translate(199.203 247.086)" fill="#5f5d7e"/>
|
||||||
|
<path id="Path_77" data-name="Path 77" d="M770.57,773.456a1.589,1.589,0,0,1-.5.685c-2.045,1.877-9.695,4.667-14.421,6.183a33.453,33.453,0,0,1-3.783,1.076,11.218,11.218,0,0,1-5.213-1.678c-1.655-1.016-.165-2.459.5-3.2s4.634-.966,4.634-.966c-1.9,3.167,2.81.387,2.81.387s9.516-6.785,10.509-7.53a9.134,9.134,0,0,1,2.813-1.158Z" transform="translate(-532.285 -530.298)" fill="#fff"/>
|
||||||
|
<path id="Path_79" data-name="Path 79" d="M789.781,788.09c-2.045,1.877-9.694,4.667-14.421,6.183C779.643,790.645,786.825,788.749,789.781,788.09Z" transform="translate(-551.992 -544.241)" opacity="0.1"/>
|
||||||
|
<ellipse id="Ellipse_42" data-name="Ellipse 42" cx="5.637" cy="1.625" rx="5.637" ry="1.625" transform="translate(221.74 250.969)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_58" data-name="Rectangle 58" width="5.792" height="42.862" transform="translate(224.242 209.732)" fill="#5f5d7e"/>
|
||||||
|
<path id="Path_80" data-name="Path 80" d="M783.792,687.128v4.965A40.735,40.735,0,0,1,778,689.045V685h1.208Z" transform="translate(-553.758 -475.272)" opacity="0.1"/>
|
||||||
|
<path id="Path_81" data-name="Path 81" d="M754.27,610.208s19.124-4.922,23.884-8.606,23.45,13.65,20.981,20.19-11.459,11.277-11.459,11.277-24.86,4.045-29.094-4.392S754.27,610.208,754.27,610.208Z" transform="translate(-537.882 -419.138)" fill="#474157"/>
|
||||||
|
<path id="Path_82" data-name="Path 82" d="M754.27,610.208s19.124-4.922,23.884-8.606,23.45,13.65,20.981,20.19-11.459,11.277-11.459,11.277-24.86,4.045-29.094-4.392S754.27,610.208,754.27,610.208Z" transform="translate(-537.882 -419.138)" opacity="0.1"/>
|
||||||
|
<path id="Path_83" data-name="Path 83" d="M749.27,604.208s19.124-4.922,23.884-8.606,23.45,13.65,20.981,20.19-11.459,11.277-11.459,11.277-24.86,4.045-29.094-4.392S749.27,604.208,749.27,604.208Z" transform="translate(-534.537 -415.124)" fill="#474157"/>
|
||||||
|
<path id="Path_84" data-name="Path 84" d="M673.421,423.313l-2.069-.751a7.524,7.524,0,0,0,1.036-5.709s-.87-3.793-.457-5.329,1.489-7.166,1.489-7.166.152-5.958-3.068-8.688-5.455-4.965-4.213-2.317a36.873,36.873,0,0,0,1.82,3.558s-7.7,1.844-4.965,4.73,3.475,2.883,3.475,2.883-.91,7.116-1.076,8.44-1.655,11.419-1.655,11.419-.083,4.8.745,5.544a3.744,3.744,0,0,0,3.972,2.979C669.046,432.9,676.069,425.134,673.421,423.313Z" transform="translate(-476.426 -279.362)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_85" data-name="Path 85" d="M784.127,413.249v4.634l-4.8,1.566-8.175,6.017-2.168,1.6-9.681-3.889-6.123-6.454s.3-.162.814-.43l.331-.175c1.036-.52,2.668-1.324,4.472-2.042s2.016-4.928,1.913-8.4v-.331c-.083-2.433-.331-4.422-.331-4.422s1.009-.192,2.479-.41c4.074-.606,11.677-1.423,11.009,1.072a5.75,5.75,0,0,0,0,2.578c.02.093.04.189.063.281a21.834,21.834,0,0,0,2.82,6.16l6.62,2.383.185.066Z" transform="translate(-537.153 -284.522)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_86" data-name="Path 86" d="M838.485,441.541v-1.407a4.635,4.635,0,0,1,1.572,0c.579.166,1.678,1.9,2.175,2.069s3.535,11.5,3.2,12.495-3.459,23.411-3.459,23.411l-6.305,6.951-1.241-19.114,4.055-11.336Z" transform="translate(-591.511 -311.408)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_87" data-name="Path 87" d="M737.631,601.77s-5.762,1.241-5.031,3.062,3.955,1.9,3.955,1.9Z" transform="translate(-523.342 -419.59)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_88" data-name="Path 88" d="M710.965,463.909l-4.385,9.45-5.213,3.806-.91-5.882s-1.761-3.889-2.519-4.548a.381.381,0,0,0-.129-.086c-.662-.248-6.951,3.724-8.771,4.468s-8.357.91-8.357.91l2.9-10.343s5.792-2.151,6.537-3.144a60.24,60.24,0,0,1,6.868-6.62c2.317-1.82,6.544-1.158,6.544-1.158l.066.027,1.086.47,3.144,7.7Z" transform="translate(-488.65 -318.485)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_89" data-name="Path 89" d="M701.066,669.314a19.745,19.745,0,0,0-.063,2.595c.023.923.063,1.708.063,1.708l-1.9,3.972s-6.537,2.151-5.461,1.241a3.6,3.6,0,0,0,.662-2.214,56.151,56.151,0,0,0-.235-7.3c-.248-3.475-4.22-12.081-4.22-12.081s-3.31-8.44-5.378-13.653-1.324-14.646-1.324-14.646.331-7.116,1.82-9.268,7.282-2.9,7.282-2.9l2.717,9.013s2.234,8.44,3.062,9.681.579,16.053.248,17.625a42.153,42.153,0,0,0,.434,6.858,32.21,32.21,0,0,0,2.012,8.01A3.058,3.058,0,0,1,701.066,669.314Z" transform="translate(-490.252 -429.625)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_90" data-name="Path 90" d="M722.3,785.068l-1.9,3.972s-6.537,2.151-5.461,1.241a3.6,3.6,0,0,0,.662-2.214c.235-.235.487-.493.745-.758a16.712,16.712,0,0,1,5.908-3.949h0C722.263,784.283,722.3,785.068,722.3,785.068Z" transform="translate(-511.489 -541.076)" opacity="0.1"/>
|
||||||
|
<path id="Path_91" data-name="Path 91" d="M719.522,791.588a.19.19,0,0,1,0,.046c-.331,1.572-5.792,3.724-5.792,3.724s-3.475.579-5.461,1.076a1.374,1.374,0,0,1-.467.043c-1.532-.116-1.6-3.065-1.6-3.518a9.406,9.406,0,0,1,2.482-2.9,17.731,17.731,0,0,0,1.84-1.764,17.078,17.078,0,0,1,6.031-4.028h0S719.787,789.956,719.522,791.588Z" transform="translate(-505.723 -541.685)" fill="#fff"/>
|
||||||
|
<path id="Path_93" data-name="Path 93" d="M722.76,806.268a.2.2,0,0,1,0,.046c-.331,1.572-5.792,3.724-5.792,3.724s-3.475.579-5.461,1.076a1.373,1.373,0,0,1-.467.043c1.8-1.235,6.166-4.2,6.755-4.263S721.287,805.993,722.76,806.268Z" transform="translate(-508.961 -556.365)" opacity="0.1"/>
|
||||||
|
<path id="Path_94" data-name="Path 94" d="M788.514,404.442c-2.045,1.685-3.925,1.443-6.782,1.443-2.065,0-4.75.725-6.441-.205-.07-2.585-.331-4.76-.331-4.76s14.4-2.731,13.488.662A6.018,6.018,0,0,0,788.514,404.442Z" transform="translate(-551.724 -284.523)" opacity="0.1"/>
|
||||||
|
<path id="Path_95" data-name="Path 95" d="M781.1,361.146a11.833,11.833,0,0,1-11.833,11.833,8.249,8.249,0,0,1-.907-.033h0a11.833,11.833,0,1,1,12.743-11.8Z" transform="translate(-540.003 -250.694)" fill="#fdc2cc"/>
|
||||||
|
<path id="Path_96" data-name="Path 96" d="M742.7,459.252l3.144,4.965-4.385,9.45-5.213,3.806-.91-5.9s-1.761-3.889-2.519-4.548c.218-.533.367-.778.367-.583,0,.827,2.036,4.551,2.036,4.551,6.289-2.151,4.336-10.509,4.336-10.509s-.781-7.447-1.086-9.407l1.086.47Z" transform="translate(-523.532 -318.776)" opacity="0.1"/>
|
||||||
|
<path id="Path_97" data-name="Path 97" d="M784.127,439.869V444.5l-4.8,1.566-8.175,6.017-2.168,1.6-9.681-3.889-6.123-6.454s.3-.162.814-.43l.331-.175a40.413,40.413,0,0,0,16.718,3.005c12.468-1.986,12.839-5,12.528-6.067Z" transform="translate(-537.153 -311.142)" opacity="0.1"/>
|
||||||
|
<path id="Path_98" data-name="Path 98" d="M743.016,514.772a92.77,92.77,0,0,1-9.6,4.055c-5.709,2.069-18.287-.662-19.859-1.076s-13.653-5.213-18.287-7.033-5.792-.331-6.868-.5-1.82-2.234-1.986-2.813,2.979-5.627,4.717-8.192,6.951-2.069,7.7-2.234,5.958,0,5.958,0-.331-1.655,1.572-6.289-3.144-13.239-3.144-13.239c-3.475-2.234-2.9-9.185-2.9-9.185-.827-3.062,1.82-10.1,1.82-9.268s2.036,4.551,2.036,4.551c6.289-2.151,4.336-10.509,4.336-10.509s-.91-8.688-1.152-9.764,1.152-.91,1.152-.91q.4.209.814.4a40.229,40.229,0,0,0,17.059,3.161c15.116-2.439,12.438-6.328,12.339-6.467l.735.261c5.461,3.972,3.806,17.128,3.806,17.128l-2.046,9.82-1.519,7.315s5.378,32.6,5.875,34.257S743.016,514.772,743.016,514.772Z" transform="translate(-492.484 -311.002)" fill="#be7575"/>
|
||||||
|
<path id="Path_99" data-name="Path 99" d="M730.994,622c-.331.248-4.055,7.944-1.324,10.095S730.994,622,730.994,622Z" transform="translate(-520.759 -433.124)" opacity="0.1"/>
|
||||||
|
<path id="Path_100" data-name="Path 100" d="M743.68,625.27c.083.248,7.778,12.495,12,13.488Z" transform="translate(-530.798 -435.311)" opacity="0.1"/>
|
||||||
|
<path id="Path_101" data-name="Path 101" d="M797.2,332.386l-1.231.261a8.3,8.3,0,0,1,1.039-.308Z" transform="translate(-565.78 -239.337)" opacity="0.1"/>
|
||||||
|
<path id="Path_102" data-name="Path 102" d="M783.931,396.545l-2.317,9.814A11.986,11.986,0,0,1,778.4,404.2a9.8,9.8,0,0,0-2.35-1.966,10.2,10.2,0,0,0-4.081-.563,19.632,19.632,0,0,1-5.1-.874,3.6,3.6,0,0,1-1.324-.642,3.217,3.217,0,0,1-.662-2.8,42.889,42.889,0,0,0,.05-5.723c-.02-.357-.046-.715-.076-1.072-.132-1.6-.563-3.452-2.2-4.137-.841-.331-1.844-.3-2.648-.7a2.184,2.184,0,0,1-.331-.205c-1.192-.834-1.3-2.506-1.254-3.912q.106-2.9.2-5.8a16.857,16.857,0,0,0-.063-2.863h0a6.355,6.355,0,0,0-.516-1.827c-.718-1.536-2.214-2.817-2.482-4.438a1.8,1.8,0,0,1-.03-.228c-.139-1.45.774-2.8,1.1-4.227.642-2.87-1.516-6.014-4.69-6.838-.993-.258-2.059-.308-3.048-.6a4.9,4.9,0,0,1-.467-.165,13.894,13.894,0,0,1,11.167-5.3c7.391,0,13.385,5.3,13.385,11.833a11.356,11.356,0,0,1-4.945,9.185c.02.093.043.189.07.281a20.819,20.819,0,0,0,3.191,6.16l7.493,2.383.834.265C785.8,383.395,783.931,396.545,783.931,396.545Z" transform="translate(-533.969 -250.697)" opacity="0.1"/>
|
||||||
|
<path id="Path_103" data-name="Path 103" d="M867.572,520.655a1.126,1.126,0,0,1-.212-.03A.44.44,0,0,1,867.572,520.655Z" transform="translate(-613.541 -365.301)" opacity="0.1"/>
|
||||||
|
<path id="Path_104" data-name="Path 104" d="M759.671,330a28.465,28.465,0,0,0-6.315-.738,3.5,3.5,0,0,0-1.986.417c-.732.513-.824,1.44-1.043,2.241a6.216,6.216,0,0,1-2.367,3.31c-.784.573-1.708.993-2.459,1.6a2.566,2.566,0,0,0-1.135,2.376,2.938,2.938,0,0,0,2.171,1.84c.993.281,2.049.331,3.048.6,3.174.824,5.329,3.972,4.687,6.835-.331,1.427-1.235,2.777-1.1,4.227.162,1.731,1.761,3.065,2.512,4.67a10.092,10.092,0,0,1,.586,4.687l-.2,5.805c-.053,1.529.079,3.369,1.589,4.117.808.4,1.814.354,2.648.705,1.635.682,2.065,2.539,2.2,4.134a42.728,42.728,0,0,1,.026,6.8,3.187,3.187,0,0,0,.662,2.8,3.549,3.549,0,0,0,1.324.642,19.634,19.634,0,0,0,5.1.874,10.307,10.307,0,0,1,4.081.563,9.879,9.879,0,0,1,2.35,1.966,12.988,12.988,0,0,0,7.672,3.359,2.285,2.285,0,0,0,1.734-.354c.427-.394.175-1.244-.434-1.195a2.943,2.943,0,0,0,2.787-1.066,2.35,2.35,0,0,0,0-2.7c-.692-.993-2.161-1.655-2.241-2.833a3.5,3.5,0,0,1,.741-1.85,7.781,7.781,0,0,0-1.2-9.268c-1.552-1.605-3.879-2.823-4.422-4.882-.361-1.377.185-2.823-.023-4.223-.331-2.317-2.625-3.972-3.886-6.037a10.5,10.5,0,0,1-1.162-6.914,49.178,49.178,0,0,1,1.8-6.918,8.928,8.928,0,0,0,.351-5.206,9.539,9.539,0,0,0-2.122-3.227,23.894,23.894,0,0,0-7.533-5.958,13.774,13.774,0,0,0-9.837-.907" transform="translate(-531.233 -237.276)" fill="#474157"/>
|
||||||
|
<path id="Path_105" data-name="Path 105" d="M759.671,330a28.465,28.465,0,0,0-6.315-.738,3.5,3.5,0,0,0-1.986.417c-.732.513-.824,1.44-1.043,2.241a6.216,6.216,0,0,1-2.367,3.31c-.784.573-1.708.993-2.459,1.6a2.566,2.566,0,0,0-1.135,2.376,2.938,2.938,0,0,0,2.171,1.84c.993.281,2.049.331,3.048.6,3.174.824,5.329,3.972,4.687,6.835-.331,1.427-1.235,2.777-1.1,4.227.162,1.731,1.761,3.065,2.512,4.67a10.092,10.092,0,0,1,.586,4.687l-.2,5.805c-.053,1.529.079,3.369,1.589,4.117.808.4,1.814.354,2.648.705,1.635.682,2.065,2.539,2.2,4.134a42.728,42.728,0,0,1,.026,6.8,3.187,3.187,0,0,0,.662,2.8,3.549,3.549,0,0,0,1.324.642,19.634,19.634,0,0,0,5.1.874,10.307,10.307,0,0,1,4.081.563,9.879,9.879,0,0,1,2.35,1.966,12.988,12.988,0,0,0,7.672,3.359,2.285,2.285,0,0,0,1.734-.354c.427-.394.175-1.244-.434-1.195a2.943,2.943,0,0,0,2.787-1.066,2.35,2.35,0,0,0,0-2.7c-.692-.993-2.161-1.655-2.241-2.833a3.5,3.5,0,0,1,.741-1.85,7.781,7.781,0,0,0-1.2-9.268c-1.552-1.605-3.879-2.823-4.422-4.882-.361-1.377.185-2.823-.023-4.223-.331-2.317-2.625-3.972-3.886-6.037a10.5,10.5,0,0,1-1.162-6.914,49.178,49.178,0,0,1,1.8-6.918,8.928,8.928,0,0,0,.351-5.206,9.539,9.539,0,0,0-2.122-3.227,23.894,23.894,0,0,0-7.533-5.958,13.774,13.774,0,0,0-9.837-.907" transform="translate(-531.233 -237.276)" opacity="0.1"/>
|
||||||
|
<path id="Path_106" data-name="Path 106" d="M737.18,548.476s2.813,1.076,5.792-1.9S737.18,548.476,737.18,548.476Z" transform="translate(-526.449 -382.018)" opacity="0.1"/>
|
||||||
|
<g id="Group_116" data-name="Group 116" transform="translate(213.048 92.004)" opacity="0.1">
|
||||||
|
<path id="Path_107" data-name="Path 107" d="M793.1,330.871a11.772,11.772,0,0,1,1.655-.209,12.553,12.553,0,0,0-2.317.073Z" transform="translate(-776.467 -330.203)"/>
|
||||||
|
<path id="Path_108" data-name="Path 108" d="M777.411,390.5a9.9,9.9,0,0,0-2.353-1.966,10.3,10.3,0,0,0-4.081-.563,19.527,19.527,0,0,1-5.1-.874,3.548,3.548,0,0,1-1.324-.642,3.225,3.225,0,0,1-.662-2.8,42.729,42.729,0,0,0-.026-6.8c-.136-1.6-.563-3.452-2.2-4.134-.837-.351-1.84-.308-2.648-.7-1.509-.748-1.655-2.588-1.592-4.117q.1-2.9.2-5.8a10.059,10.059,0,0,0-.586-4.69c-.751-1.605-2.35-2.936-2.512-4.67-.136-1.446.778-2.8,1.1-4.227.642-2.87-1.516-6.011-4.69-6.835-.993-.258-2.059-.311-3.048-.6a2.905,2.905,0,0,1-2.155-1.82,2.52,2.52,0,0,1,1.132-2.38c.751-.606,1.675-1.023,2.463-1.6a6.193,6.193,0,0,0,2.363-3.31,3.713,3.713,0,0,1,1.043-2.241,2.648,2.648,0,0,1,1.357-.4c-.295,0-.589-.017-.88-.017a3.521,3.521,0,0,0-1.986.414c-.732.516-.824,1.44-1.043,2.241a6.216,6.216,0,0,1-2.367,3.31c-.784.573-1.708.993-2.459,1.6a2.568,2.568,0,0,0-1.135,2.38,2.92,2.92,0,0,0,2.158,1.82c.99.295,2.049.331,3.048.6,3.174.824,5.329,3.972,4.687,6.835-.331,1.427-1.235,2.78-1.1,4.227.162,1.734,1.761,3.065,2.512,4.67a10.057,10.057,0,0,1,.586,4.69q-.1,2.9-.2,5.8c-.053,1.529.079,3.369,1.589,4.117.808.4,1.814.354,2.648.7,1.635.682,2.065,2.539,2.2,4.134a42.743,42.743,0,0,1,.026,6.8,3.187,3.187,0,0,0,.662,2.8,3.548,3.548,0,0,0,1.324.642,19.5,19.5,0,0,0,5.1.874,10.308,10.308,0,0,1,4.081.563A9.959,9.959,0,0,1,775.9,390.5a12.968,12.968,0,0,0,7.669,3.36,3.544,3.544,0,0,0,1.109-.043A12.945,12.945,0,0,1,777.411,390.5Z" transform="translate(-744.18 -329.32)"/>
|
||||||
|
</g>
|
||||||
|
<path id="Path_109" data-name="Path 109" d="M684.782,484s-2.648,2.429-2.261,3.422S684.782,484,684.782,484Z" transform="translate(-489.856 -340.8)" opacity="0.1"/>
|
||||||
|
<path id="Path_110" data-name="Path 110" d="M668.535,577.927c-1.91-.467-7.176-.9-9.681,7.507a37.18,37.18,0,0,1-2.221,5.683c-2.4,4.935-5.508,15.083,8.146,17.317l32.767,7.447s17.542,2.151,18.7,1.324a3.207,3.207,0,0,0,.993-2.648s-19.363,0-23.169-5.958-3.972-14.067-3.972-14.067.477-12.521-19.528-16.159C669.908,578.248,669.213,578.092,668.535,577.927Z" transform="translate(-471.152 -403.498)" fill="#474157"/>
|
||||||
|
<path id="Path_111" data-name="Path 111" d="M668.535,578.1c-1.91-.467-7.176-.9-9.681,7.51a37.185,37.185,0,0,1-2.221,5.683c-2.4,4.932-5.508,15.08,8.146,17.314l32.767,7.447s17.542,2.151,18.7,1.324a3.207,3.207,0,0,0,.993-2.648s-19.363,0-23.169-5.958S690.1,594.7,690.1,594.7s.477-12.521-19.528-16.159C669.908,578.418,669.213,578.256,668.535,578.1Z" transform="translate(-471.152 -403.612)" opacity="0.1"/>
|
||||||
|
<path id="Path_112" data-name="Path 112" d="M811.958,543.834a5.061,5.061,0,0,0-5.114-4.276c-4.713.086-19.22.715-25.959,5.117,0,0-5.13,3.31-6.62,3.31s-21.68,17.211,8.275,32.6c0,0,16.053,4.568,22.341-6.156,0,0,4.468-11.518,4.137-15.507S812,544.178,812,544.178,811.991,544.049,811.958,543.834Z" transform="translate(-545.886 -377.968)" fill="#474157"/>
|
||||||
|
<path id="Path_113" data-name="Path 113" d="M811.958,553.257a4.963,4.963,0,0,0-5.114-3.949c-4.713.079-19.22.662-25.959,4.723,0,0-5.13,3.055-6.62,3.055s-21.68,15.887,8.275,30.1c0,0,16.053,4.217,22.341-5.683,0,0,4.468-10.635,4.137-14.315S812,553.575,812,553.575,811.991,553.456,811.958,553.257Z" transform="translate(-545.886 -384.491)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_59" data-name="Rectangle 59" width="5.296" height="11.277" transform="translate(244.763 202.615)" fill="#5f5d7e"/>
|
||||||
|
<ellipse id="Ellipse_43" data-name="Ellipse 43" cx="14.908" cy="0.957" rx="14.908" ry="0.957" transform="translate(41.439 154.848)" opacity="0.1"/>
|
||||||
|
<path id="Path_114" data-name="Path 114" d="M266.794,405.634a5.687,5.687,0,0,0-.755,1.42c-.046.126-.093.265-.139.4a1.22,1.22,0,0,0-.262-.089,3.753,3.753,0,0,0-1.182-.1c0-.152.02-.331.023-.483.05-1.744-.156-4.177-1.82-3.148-1.6.993-.457,2.648.573,3.71l.265.258c-.94.662-1.119,2.228-1.274,3.853s-1.536,3.406-2.453,4.415c-.093.1-.175.2-.258.281a3.346,3.346,0,0,0-2.664-.685c-.036-.142-.079-.291-.122-.45-.741-2.674-2.28-7.311-4.243-8.328l.258-.331c.834-1.092,1.774-2.711.387-3.128s-1.513,1.407-1.436,2.77c0,.172.026.331.04.483a2.042,2.042,0,0,0-1.45.708l-.215-.252c-1.125-1.324-3.187-3.432-3.813-1.84-.583,1.483,1.235,3.406,2.512,4.521l.079.07c-.857,3.485,2.876,6.332,4.9,7.563l.261.159c-2.78,3.277-4.5,9.417-4.5,9.417l7.785,1.39s5.163-4.452,4.5-8.635h.053c5.16-1.033,6.332-6.534,5.527-9.8l.093-.036a5.871,5.871,0,0,0,2.39-1.807C271.3,405.928,268.271,403.664,266.794,405.634Z" transform="translate(-197.937 -286.721)" fill="#2b4ca5"/>
|
||||||
|
<path id="Path_115" data-name="Path 115" d="M266.794,405.634a5.687,5.687,0,0,0-.755,1.42c-.046.126-.093.265-.139.4a1.22,1.22,0,0,0-.262-.089,3.753,3.753,0,0,0-1.182-.1c0-.152.02-.331.023-.483.05-1.744-.156-4.177-1.82-3.148-1.6.993-.457,2.648.573,3.71l.265.258c-.94.662-1.119,2.228-1.274,3.853s-1.536,3.406-2.453,4.415c-.093.1-.175.2-.258.281a3.346,3.346,0,0,0-2.664-.685c-.036-.142-.079-.291-.122-.45-.741-2.674-2.28-7.311-4.243-8.328l.258-.331c.834-1.092,1.774-2.711.387-3.128s-1.513,1.407-1.436,2.77c0,.172.026.331.04.483a2.042,2.042,0,0,0-1.45.708l-.215-.252c-1.125-1.324-3.187-3.432-3.813-1.84-.583,1.483,1.235,3.406,2.512,4.521l.079.07c-.857,3.485,2.876,6.332,4.9,7.563l.261.159c-2.78,3.277-4.5,9.417-4.5,9.417l7.785,1.39s5.163-4.452,4.5-8.635h.053c5.16-1.033,6.332-6.534,5.527-9.8l.093-.036a5.871,5.871,0,0,0,2.39-1.807C271.3,405.928,268.271,403.664,266.794,405.634Z" transform="translate(-197.937 -286.721)" fill="none" opacity="0.1"/>
|
||||||
|
<path id="Path_116" data-name="Path 116" d="M252.281,410.632l-.9,2.664s-.506-.357-1.145-.92c-1.278-1.115-3.095-3.038-2.512-4.521.626-1.592,2.688.51,3.813,1.84C251.98,410.222,252.281,410.632,252.281,410.632Z" transform="translate(-198.92 -289.475)" fill="#fff"/>
|
||||||
|
<path id="Path_117" data-name="Path 117" d="M265.366,406.372a12.872,12.872,0,0,1-.887,1.043,13.968,13.968,0,0,1-.162-1.4c-.076-1.364.069-3.174,1.436-2.77S266.187,405.279,265.366,406.372Z" transform="translate(-210.085 -286.734)" fill="#fff"/>
|
||||||
|
<path id="Path_118" data-name="Path 118" d="M297.718,407.222c-.026.877-.113,1.576-.113,1.576a11.251,11.251,0,0,1-1.135-1.013c-1.029-1.069-2.168-2.717-.573-3.71C297.559,403.045,297.765,405.477,297.718,407.222Z" transform="translate(-230.694 -287.164)" fill="#fff"/>
|
||||||
|
<path id="Path_119" data-name="Path 119" d="M310.61,411.379a5.872,5.872,0,0,1-2.4,1.8,6.68,6.68,0,0,1-.8.288l-1.072-1.506a10.932,10.932,0,0,1,.444-1.463,5.687,5.687,0,0,1,.755-1.42A1.919,1.919,0,0,1,310.61,411.379Z" transform="translate(-238.21 -290.173)" fill="#fff"/>
|
||||||
|
<path id="Path_120" data-name="Path 120" d="M256.831,414.57c.453.526.755.937.755.937l-.9,2.664s-.506-.357-1.145-.92a5.213,5.213,0,0,1,1.026-2.34A3.1,3.1,0,0,1,256.831,414.57Z" transform="translate(-204.224 -294.35)" opacity="0.1"/>
|
||||||
|
<path id="Path_121" data-name="Path 121" d="M265.4,412.088a12.888,12.888,0,0,1-.887,1.043,13.977,13.977,0,0,1-.162-1.4A1.807,1.807,0,0,1,265.4,412.088Z" transform="translate(-210.118 -292.45)" opacity="0.1"/>
|
||||||
|
<path id="Path_122" data-name="Path 122" d="M263.826,423.624l-2.264.993s-.493-.238-1.2-.682c-2.38-1.466-7.162-5.15-3.955-9.493s5.882,3.449,6.934,7.255C263.671,422.84,263.826,423.624,263.826,423.624Z" transform="translate(-204.084 -293.409)" fill="#fff"/>
|
||||||
|
<path id="Path_123" data-name="Path 123" d="M299.22,414.643a1.844,1.844,0,0,1,1.248-.563c-.026.877-.113,1.575-.113,1.575A11.259,11.259,0,0,1,299.22,414.643Z" transform="translate(-233.447 -294.022)" opacity="0.1"/>
|
||||||
|
<path id="Path_124" data-name="Path 124" d="M308.213,417.581a6.68,6.68,0,0,1-.8.288l-1.072-1.506a10.935,10.935,0,0,1,.444-1.463A3.83,3.83,0,0,1,308.213,417.581Z" transform="translate(-238.21 -294.571)" opacity="0.1"/>
|
||||||
|
<path id="Path_125" data-name="Path 125" d="M285.8,427.814l-.381.066c-7.589,1.155-2.5-2.939-2.5-2.939s.331-.314.8-.831c.917-1.009,2.294-2.78,2.453-4.415.238-2.459.513-4.766,3.416-4.088C292.452,416.272,293,426.374,285.8,427.814Z" transform="translate(-221.423 -294.963)" fill="#fff"/>
|
||||||
|
<rect id="Rectangle_60" data-name="Rectangle 60" width="14.5" height="3.813" transform="translate(49.747 151.743)" fill="#474157"/>
|
||||||
|
<rect id="Rectangle_61" data-name="Rectangle 61" width="18.946" height="13.306" transform="translate(47.443 139.351)" fill="#474157"/>
|
||||||
|
<rect id="Rectangle_62" data-name="Rectangle 62" width="14.5" height="3.813" transform="translate(49.608 151.743)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_63" data-name="Rectangle 63" width="18.946" height="13.306" transform="translate(47.384 139.354)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_64" data-name="Rectangle 64" width="14.5" height="3.813" transform="translate(50.7 151.743)" fill="#474157"/>
|
||||||
|
<path id="Path_126" data-name="Path 126" d="M273.539,439c.331,1.139.49,1.923.49,1.923l-2.264.993s-.493-.238-1.2-.682A5.677,5.677,0,0,1,273.539,439Z" transform="translate(-214.273 -310.694)" opacity="0.1"/>
|
||||||
|
<path id="Path_127" data-name="Path 127" d="M285.8,445.244l-.381.066c-7.589,1.155-2.5-2.939-2.5-2.939s.331-.314.8-.831A5,5,0,0,1,285.8,445.244Z" transform="translate(-221.423 -312.393)" opacity="0.1"/>
|
||||||
|
<path id="Path_128" data-name="Path 128" d="M257.76,451.555s4.25-15.225,10.211-10.525-2.426,11.915-2.426,11.915Z" transform="translate(-205.709 -311.449)" fill="#fff"/>
|
||||||
|
<circle id="Ellipse_44" data-name="Ellipse 44" cx="0.477" cy="0.477" r="0.477" transform="translate(53.719 122.944)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_45" data-name="Ellipse 45" cx="0.477" cy="0.477" r="0.477" transform="translate(53.679 125.172)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_46" data-name="Ellipse 46" cx="0.477" cy="0.477" r="0.477" transform="translate(67.504 123.381)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_47" data-name="Ellipse 47" cx="0.477" cy="0.477" r="0.477" transform="translate(56.38 134.783)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_48" data-name="Ellipse 48" cx="0.477" cy="0.477" r="0.477" transform="translate(66.511 127.078)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_49" data-name="Ellipse 49" cx="0.477" cy="0.477" r="0.477" transform="translate(61.586 132.003)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_50" data-name="Ellipse 50" cx="0.477" cy="0.477" r="0.477" transform="translate(55.347 123.897)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_51" data-name="Ellipse 51" cx="0.477" cy="0.477" r="0.477" transform="translate(66.194 124.814)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_52" data-name="Ellipse 52" cx="0.477" cy="0.477" r="0.477" transform="translate(64.565 128.508)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_53" data-name="Ellipse 53" cx="0.477" cy="0.477" r="0.477" transform="translate(59.557 134.426)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_54" data-name="Ellipse 54" cx="0.477" cy="0.477" r="0.477" transform="translate(58.525 132.083)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_55" data-name="Ellipse 55" cx="0.477" cy="0.477" r="0.477" transform="translate(56.062 126.8)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_65" data-name="Rectangle 65" width="14.5" height="1.393" transform="translate(50.7 151.743)" opacity="0.1"/>
|
||||||
|
<rect id="Rectangle_66" data-name="Rectangle 66" width="18.946" height="13.306" transform="translate(48.397 139.351)" fill="#474157"/>
|
||||||
|
<circle id="Ellipse_56" data-name="Ellipse 56" cx="0.477" cy="0.477" r="0.477" transform="translate(60.193 136.571)" opacity="0.1"/>
|
||||||
|
<circle id="Ellipse_57" data-name="Ellipse 57" cx="0.477" cy="0.477" r="0.477" transform="translate(57.333 137.167)" opacity="0.1"/>
|
||||||
|
<path id="Path_129" data-name="Path 129" d="M399.263,626s2.36,3.088-1.089,7.748-6.289,8.606-5.15,11.505c0,0,5.21-8.659,9.45-8.778S403.927,631.21,399.263,626Z" transform="translate(-296.032 -435.8)" fill="#fff"/>
|
||||||
|
<path id="Path_130" data-name="Path 130" d="M399.525,626a3.8,3.8,0,0,1,.483.967c4.134,4.859,6.338,9.393,2.363,9.509-3.7.116-8.146,6.736-9.211,8.39.036.129.079.258.126.381,0,0,5.21-8.659,9.45-8.778S404.188,631.21,399.525,626Z" transform="translate(-296.294 -435.8)" opacity="0.1"/>
|
||||||
|
<path id="Path_131" data-name="Path 131" d="M424.553,636.492c0,1.086-.122,1.966-.271,1.966s-.271-.88-.271-1.966.152-.576.3-.576S424.553,635.4,424.553,636.492Z" transform="translate(-316.933 -442.353)" fill="#ffd037"/>
|
||||||
|
<path id="Path_132" data-name="Path 132" d="M426.437,640.312c-.953.52-1.784.834-1.857.7s.642-.662,1.6-1.182.576-.142.662,0S427.393,639.793,426.437,640.312Z" transform="translate(-317.311 -444.876)" fill="#ffd037"/>
|
||||||
|
<path id="Path_133" data-name="Path 133" d="M363.985,626s-2.36,3.088,1.089,7.748,6.289,8.606,5.147,11.505c0,0-5.206-8.659-9.446-8.778S359.321,631.21,363.985,626Z" transform="translate(-273.229 -435.8)" fill="#fff"/>
|
||||||
|
<path id="Path_134" data-name="Path 134" d="M363.985,626a3.8,3.8,0,0,0-.483.967c-4.134,4.859-6.338,9.393-2.363,9.509,3.7.116,8.146,6.736,9.211,8.39a3.672,3.672,0,0,1-.129.381s-5.206-8.655-9.446-8.768S359.321,631.21,363.985,626Z" transform="translate(-273.229 -435.8)" opacity="0.1"/>
|
||||||
|
<path id="Path_135" data-name="Path 135" d="M361.44,636.492c0,1.086.122,1.966.271,1.966s.271-.88.271-1.966-.152-.576-.3-.576S361.44,635.4,361.44,636.492Z" transform="translate(-275.073 -442.353)" fill="#ffd037"/>
|
||||||
|
<path id="Path_136" data-name="Path 136" d="M355.691,640.312c.953.52,1.784.834,1.857.7s-.642-.662-1.6-1.182-.576-.142-.662,0S354.734,639.793,355.691,640.312Z" transform="translate(-270.83 -444.876)" fill="#ffd037"/>
|
||||||
|
<ellipse id="Ellipse_58" data-name="Ellipse 58" cx="24.691" cy="3.79" rx="24.691" ry="3.79" transform="translate(72.3 225.503)" fill="#6c63ff" opacity="0.1"/>
|
||||||
|
<path id="Path_137" data-name="Path 137" d="M380.556,668.693l-.119.963-.166,1.364-.066.566-.169,1.364-.07.569-.165,1.36-1.873,15.49c-.169,1.383-2.429,2.459-5.153,2.459h-9.837c-2.727,0-4.965-1.076-5.15-2.459l-1.893-15.49-.165-1.36-.069-.569-.169-1.364-.066-.566-.165-1.364-.119-.963c-.1-.781,1.125-1.443,2.671-1.443h20.077C379.427,667.25,380.652,667.912,380.556,668.693Z" transform="translate(-270.854 -463.397)" fill="#65617d"/>
|
||||||
|
<path id="Path_138" data-name="Path 138" d="M280.188,623.15l-.165,1.36H255.176l-.165-1.36Z" transform="translate(-170.606 -416.891)" fill="#9d9cb5"/>
|
||||||
|
<path id="Path_139" data-name="Path 139" d="M280.425,628.98l-.165,1.364h-24.38l-.169-1.364Z" transform="translate(-171.074 -420.791)" fill="#9d9cb5"/>
|
||||||
|
<path id="Path_140" data-name="Path 140" d="M280.668,634.81l-.165,1.364H256.6l-.165-1.364Z" transform="translate(-171.556 -424.691)" fill="#9d9cb5"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 33 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="311.983" height="311.929" viewBox="0 0 311.983 311.929">
|
||||||
|
<g id="Icon_ionic-ios-apps" data-name="Icon ionic-ios-apps" transform="translate(-4.494 -4.496)">
|
||||||
|
<path id="Path_9" data-name="Path 9" d="M305.678,64.318,184.327,9a65.721,65.721,0,0,0-47.842,0L15.22,64.318c-14.293,6.5-14.293,17.117,0,23.639l120.221,54.826a69.059,69.059,0,0,0,50.033,0L305.687,87.956C319.971,81.46,319.971,70.822,305.678,64.318Z" transform="translate(0.07 0)" fill="#b5c8ff"/>
|
||||||
|
<g id="Group_1" data-name="Group 1" transform="translate(4.493 135.941)">
|
||||||
|
<path id="Path_10" data-name="Path 10" d="M135.441,61.195,54.375,24.239a13.18,13.18,0,0,0-10.8,0L15.22,37.154C.927,43.65.927,54.271,15.22,60.792l120.221,54.826a69.058,69.058,0,0,0,50.033,0L305.687,60.792c14.293-6.5,14.293-17.117,0-23.639L277.341,24.239a13.18,13.18,0,0,0-10.8,0L185.474,61.195A69.058,69.058,0,0,1,135.441,61.195Z" transform="translate(-4.423 60.176)" fill="#fff"/>
|
||||||
|
<path id="Path_11" data-name="Path 11" d="M305.757,28.732,280,17.033a12.992,12.992,0,0,0-10.724,0l-87.724,39.72a71.712,71.712,0,0,1-42.159,0L51.681,17.033a12.992,12.992,0,0,0-10.724,0l-25.744,11.7C.92,35.228.92,45.849,15.213,52.371L135.426,107.2a69.058,69.058,0,0,0,50.033,0L305.671,52.371C320.049,45.866,320.049,35.228,305.757,28.732Z" transform="translate(-4.493 -15.875)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 956 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |