优化:自动签到报告&新增:开启简洁签到报告

This commit is contained in:
Wuyi无疑 2022-02-01 00:15:09 +08:00
parent 83b548c2f2
commit 5ca4013639
9 changed files with 140 additions and 309 deletions

337
README.md
View File

@ -1,306 +1,61 @@
# GenshinUID / 原神UID查询
<p align="center">
<a href="https://github.com/KimigaiiWuyi/GenshinUID/"><img src="https://s2.loli.net/2022/01/31/kwCIl3cF1Z2GxnR.png" width="256" height="256" alt="GenshinUID"></a>
</p>
<h1 align = "center">GenshinUID</h1>
<h4 align = "center">♾️基于<a href="https://github.com/Ice-Cirno/HoshinoBot" target="_blank">HoshinoBot</a>/<a href="https://github.com/nonebot/nonebot2" target="_blank">NoneBot2</a>/<a href="https://bot.q.qq.com/wiki/#" target="_blank">QQ官方频道Bot</a>的原神多功能插件♾️</h4>
<div align = "center">
<a href="https://github.com/KimigaiiWuyi/GenshinUID/wiki" target="_blank">安装文档</a> &nbsp; · &nbsp;
<a href="https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E6%9F%A5%E8%AF%A2%E6%A8%A1%E5%9D%97%E6%8C%87%E4%BB%A4%E5%88%97%E8%A1%A8" target="_blank">指令列表</a> &nbsp; · &nbsp;
<a href="https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98qa">常见问题</a>
</div>
一个HoshinoBot插件用于查询原神UID信息用于查询树脂/探索派遣状态,推送树脂快满了,每日签到。
**一定要读更新记录和指令!!**
## 丨我该如何安装该插件?
注意:本插件不包含本体,您应该配合[Mrs4s](https://github.com/Mrs4s) / [go-cqhttp](https://github.com/Mrs4s/go-cqhttp) 和 [HoshinoBot](https://github.com/Ice-Cirno/HoshinoBot) 使用本插件的作用是利用米游社API查询指定原神UID信息Cookies获取可前往[YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info)查看教程)
+ 如果你使用的是[Go-cqhttp](https://github.com/Mrs4s/go-cqhttp) & [HoshinoBot](https://github.com/Ice-Cirno/HoshinoBot)**安装方法查看[此处](https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%AE%89%E8%A3%85hoshinobot-)**。
+ 如果你使用的是[Go-cqhttp](https://github.com/Mrs4s/go-cqhttp) & [NoneBot2](https://github.com/nonebot/nonebot2)**安装方法查看[此处](https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%AE%89%E8%A3%85nonebot2)**。(**开发者正在使用**
再次提醒:**Cookies是重要信息请不要随意泄露**
+ 如果你想在QQ官方的频道Bot使用此插件你需要**做好以下准备**
- 拥有QQ频道机器人的开发者账号类型私域
- 拥有已经备案好的服务器地址(视情况后期官方放开本地图片发送而定)
- **腾讯频道Bot官方的文档**,查看[此处](https://bot.q.qq.com/wiki/#)
- 安装方法:基于官方的[PythonSDK](https://github.com/tencent-connect/botpy),本插件的安装方法可自行摸索。
示例:
## 丨我该如何获取Cookies[#92](https://github.com/KimigaiiWuyi/GenshinUID/issues/92)[@RemKeeper](https://github.com/RemKeeper)
![1](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/1.PNG)
![6](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/6.PNG)
- [安装HoshinoBot](#安装HoshinoBot)
- [更新记录](#更新记录)
- [指令](#指令)
- [相关仓库](#相关仓库)
- [其他](#其他)
## 安装HoshinoBot
基于[Mrs4s](https://github.com/Mrs4s) / [go-cqhttp](https://github.com/Mrs4s/go-cqhttp) 和 [HoshinoBot](https://github.com/Ice-Cirno/HoshinoBot) 的插件请确保你知晓HoshinoBot的插件安装方法和go-cqhttp的使用方法。
1、在hoshino/modules目录下执行
```sh
$ git clone https://github.com/KimigaiiWuyi/GenshinUID.git
```
var cookie=document.cookie;
var Str_Num = cookie.indexOf('_MHYUUID=');
cookie ='添加 '+cookie.substring(Str_Num);
var ask=confirm('Cookie:'+cookie+'\n\n按确认然后粘贴发送给机器人');
if(ask==true)
{copy(cookie);
msg=cookie}
else
{msg='Cancel'}
```
2、进入GenshinUID文件夹内安装依赖库
1. 复制上面全部代码然后打开https://bbs.mihoyo.com/ys/
2. 在页面上右键检查或者Ctrl+Shift+i
3. 选择控制台Console粘贴回车在弹出的窗口点确认点完自动复制
4. 然后在和机器人的私聊窗口,粘贴发送即可
```sh
$ pip3 install -r requirements.txt
```
**警告Cookies属于个人隐私其效用相当于账号密码请勿随意公开**
3、在hoshino/config的`__bot__.py`文件中添加GenshinUID
4、启动HoshinoBot后私聊机器人发送
```sh
添加 cookies
```
注意事项可以添加多条但一次只能添加一条添加两个字的之后必须带有空格cookies填入你自己的**并且不要泄露给任何人**~~如果添加了错误的cookies会导致一系列问题如果想删除错误的cookies请操作sqlite数据库完成~~目前已实现Cookies校验如果校验失败请检查Cookies是否按照格式输入。
5、进入机器人在的群聊即可正常使用本插件。
## 更新记录
**作者已经转用NoneBot2Hoshino的更新可能未经测试有bug及时提Issues**
#### 2022-01-06
新增:`原魔`指令,支持模糊查询,例如`原魔使徒`
新增:`语音`指令,不支持模糊查询,发送`语音列表`可查看全部语音id例子:`语音可莉357`请确保运行环境有FFMpeg否则无法正常发送语音。
优化:`开启<自动签到/推送>`命令可由超级管理员at关闭或开启`开启<自动签到/推送>@xxxx`
优化:`武器`指令已支持查询特定等级且可以模糊查询,例如`武器翼90`可查询90级天空之翼的属性
优化:`当前状态`支持查询当前洞天宝钱数量
#### 2021-12-20
新增8角色查询UI全角色查询UI将会随背景图片改变而改变主题色。
新增:`角色xx<数字>`命令,例如`角色钟离84`可以查看84级钟离基本属性。
新增:`角色xx`命令的类型匹配,例如`角色长柄武器`,可以查看所有长柄武器的角色,例如`角色火``角色火元素伤害加成``角色琉璃袋``角色燃愿玛瑙`等等……
新增:`材料xx`命令,例如`材料可莉`,可以查看可莉的材料列表。
新增:`活动列表`命令,第一次使用可能输出时间略久,需等待一段时间。
新增:`御神签`命令,随机抽签。
修复若干bug
#### 2021-12-04
修复:`查询词云`功能失效的问题。
修复:`查询`功能只能查到8个角色的问题经测试应该BanIP概率极低默认生效
修复:`校验全部Cookies`命令错误的问题(**由于API返回字段变化的缘故旧版本使用该命令会清空所有Ck旧版本请不要使用该命令**),该问题同时导致`添加`命令不可用,均已修复。
优化查询时优先从数据库中调用主人的Cookies。
优化错误Cookies将在`NewCookiesTable`中的`Extra`标记为`error`(失效)或者`limit30`(今天达到30人限制),其中`limit30`将在每日零点清空。
#### 2021-11-24
新增:超级管理员`全部重签`功能
#### 2021-11-21
新增:`查询词云`功能
优化:`命座\dxx`
修改:默认背景图
#### 2021-11-18
修复:最新的深渊查询返回数据
修复wiki百科接口
调整:默认背景图
#### 2021-11-14
新增NoneBot2分支前往NoneBot分支查看
新增原神wiki功能beta特别感谢[minigg](https://www.minigg.cn/)提供的Api调用使用方式查看[指令](#指令)。
#### 2021-10-24
修复Cookies池中存在失效Cookies时可能导致自动签到不正常运作
新增每月统计的命令该功能需要Cookies具体使用可以前往[指令](#指令)处查阅。
优化:添加了部分代码的注释
#### 2021-10-24
**重要目前Cookies池又采用了新的方式去除冗余如果你是上个版本的使用者请在更新后使用群聊命令优化Cookies无损迁移旧版本全部Cookies如果你是上上个版本的使用者更新后使用命令迁移Cookies**
修复可能会导致的添加cookies问题
新增绑定Cookies后可以实现米游社签到如果开启自动签到之后可以每天0:30准时签到具体使用可以前往[指令](#指令)处查阅。
#### 2021-10-17
**重要目前Cookies池采用了新的方式如果你是之前版本的使用者请在更新后使用群聊命令迁移Cookies无损迁移旧版本全部Cookies**
新增奇馈宝箱的支持以及新UI的调整。
新增绑定Cookies可以实现基于当前绑定uid信息的树脂查询以及推送具体使用可以前往[指令](#指令)处查阅。
新增可以查询深渊总览信息beta具体使用可以前往[指令](#指令)处查阅。
新增:可以群内@某人查询(角色信息、深渊总览、深渊固定层数),具体使用可以前往[指令](#指令)处查阅。
优化更换了背景图更新了readme的指令表格。
优化支持群内命令校验全部Cookies以此判断是否Cookies池有失效CK。
修复:在查询深渊时背景图片无法正确缩放的问题。
修复极少数情况下查询功能失效的实例先uid查询后mys查询
#### 2021-9-27
新增Cookies次数防浪费机制查过的mysid/uid会锁定使用过的cookies当天再查时会使用同样的cookies防止次数浪费每日零点清空。
优化Cookies填入现在需要私聊bot可以设置多条并且不会随着git pull而需要重新设置。
优化:白色底图现在的透明度会更高。
修复:使用心海刷新深渊记录时,尝试查询深渊时无法输出正确的结果。
#### 2021-9-20
新增米游社id查询指令示例mys123456789该方法同样支持深渊查询指令示例mys123456789深渊12.
新增支持绑定指令示例绑定uid123456789指令示例绑定mys123456789二选一绑定或者都绑定也可自动优先调用mys命令。
新增绑定后可查询指令示例查询同时支持深渊查询指令示例查询深渊12该指令同时支持自定义图片指令示例查询[此处应有图片]
修复:修复图片拉伸比例不正确等问题。
优化现在输出的图片质量默认为90%,优化发送速度。
优化文件夹目录的bg文件夹可自由添加背景随机图库。
优化:优化代码结构
#### 2021-9-7
修改了米游社的salt值[@Azure](https://github.com/Azure99)修复了米游社ds算法[@lulu666lululu](https://github.com/lulu666lulu)
更换了新ui+新背景画面。
添加了自动下载拼接头像、武器的程序,以后理论上游戏更新也通用。
uid命令现在可以根据角色数量自动设定长宽并且自定义背景仍然适用并且添加了角色当前携带的武器ui界面。
UID命令在uid命令的基础上删除了武器的ui界面。
添加了深渊查询指令uidxxxxxx深渊xx例如uid123456789深渊12只能查指定楼层beta
删除角色命令。
#### 2021-8-14
修复宵宫和早柚可能导致的输入错误bug。
增加了简易的cookies池现在填写cookies的方法在函数cache_Cookie()中的cookie_list中支持多个cookies共同使用。
增加了新功能beta使用uid+九位数字+角色的方式触发,获取全部角色+武器信息。
增加了新的默认随机图简单修改了部分ui。
#### 2021-8-05
修复自定义图片时,竖屏图片可能造成黑边问题。
降低高斯模糊值。
#### 2021-8-01
添加自定义背景图。
#### 2021-7-29
优化排序算法。
#### 2021-7-28
添加排序算法。
#### 2021-7-26
完成主体。
#### 2021-7-18
本项目开坑。
## 指令
**括号内为可选词缀**,以下所有可以输出图片的,**命令后跟图可自定义背景图片**
| 触发前缀 | 触发后缀/备注 | 效果 | 举例 | 备注 |
| :--------------------- | ---------------------- | -------------------------------------- | ------------------ | ---------------------------------------- |
| uid | | 获取角色信息一览(带武器信息) | uid123456789 | |
| uid | (上期)深渊 | 获取角色深渊总览(层数为最后一层) | uid123456789深渊 | |
| uid | 上期深渊9/10/11/12 | 获取角色深渊某一层数据 | uid123456789深渊12 | |
| mys | | 角色信息(带武器信息,冒险等级) | mys123456 | 米游社通行证 |
| mys | (上期)深渊 | 获取角色深渊总览(层数为最后一层) | mys123456深渊 | 米游社通行证 |
| mys | 上期深渊9/10/11/12 | 获取角色深渊某一层数据 | mys123456深渊12 | 米游社通行证 |
| 活动列表 | | 输出活动列表 | 活动列表 | |
| 御神签 | | 抽一张御神签 | 御神签 | |
| 绑定uid | | 当前qq号关联绑定uid | 绑定uid123456789 | 查询前缀前置条件 |
| 绑定mys | | 当前qq号关联绑定米游社通行证 | 绑定mys12345678 | 查询前缀前置条件 |
| 查询 | | 查询当前绑定角色信息一览 | 查询 | **必须**绑定过mys/uid |
| 查询(上期)深渊 | | 查询当前绑定角色深渊总览 | 查询深渊 | **必须**绑定过mys/uid |
| 查询(上期)深渊\d | | 查询当前绑定角色深渊某一层数据 | 查询深渊10 | **必须**绑定过mys/uid |
| 添加 | | 向cookies池添加cookies | 添加 _ga=balabala | **私聊**bot注意空格 |
| 查询 @人 | | 获取@的群友的角色信息一览 | 查询 @Wuyi | |
| 查询(上期)深渊 @人 | | 获取@的群友的深渊信息一览 | 查询深渊 @Wuyi | |
| 查询(上期)深渊\d @人 | | 获取@的群友的深渊某一层数据 | 查询深渊10 @Wuyi | |
| 当前状态 | | 获取树脂、每日委托、派遣等信息 | 当前状态 | **必须**绑定过CK和uid |
| 开启推送 | @xxx(必须为超级管理员) | 开启推送超过140树脂提醒旅行者 | 开启推送 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
| 关闭推送 | @xxx(必须为超级管理员) | 关闭树脂快满的提醒 | 关闭推送 | 都可以 |
| 校验全部Cookies | | 校验当前池内全部Cookies状态 | 校验全部Cookies | **群聊** |
| 迁移Cookies | | 迁移旧版本上上个版本全部Cookies | 迁移Cookies | **群聊** |
| 优化Cookies | | 优化上个版本全部Cookies | 优化Cookies | **群聊** |
| 签到 | | 米游社签到 | 签到 | **必须**绑定过CK和uid |
| 开启自动签到 | @xxx(必须为超级管理员) | 开启每日米游社签到 | 开启自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
| 关闭自动签到 | @xxx(必须为超级管理员) | 关闭每日米游社签到 | 关闭自动签到 | 群聊/私聊都可<br />**必须**绑定过CK和uid |
| 全部重签 | | 手动重新签到所有人 | 重新自动签到 | **群聊** <br />**必须**由超级管理员执行 |
| 每月统计 | | 查询当前绑定账号的每月/每日的原石/莫拉 | | 仅限群聊,**必须**绑定Cookies和uid |
| 武器 | | 查询武器信息 | 武器天空之卷 | 支持模糊查询 |
| 武器 | \d | 查询武器某个等级的属性 | 武器卷90 | 支持模糊查询 |
| 命座\d | | 查询角色命座信息 | 命座6可莉 | 支持模糊查询 |
| 角色 | | 查询角色简略信息 | 角色可莉 | 支持模糊查询 |
| 角色 | \d | 查询角色某个等级的属性 | 角色可莉64 | 支持模糊查询 |
| 角色 | <某种类型> | 匹配一整类角色 | 角色燃愿玛瑙 | 支持模糊查询 |
| 材料 | | 输出角色材料列表 | 材料可莉 | 支持模糊查询 |
| 原魔 | | 原魔名字 | 原魔使徒 | 支持模糊查询 |
| 语音列表 | | 查看全部语音ID | 语音列表 | 不支持模糊查询 |
| 语音 | | 语音+名称+语音ID | 语音可莉357 | **必须**有FFMpeg环境 |
| 查询词云 | | 查询绑定角色的词云 | 查询词云 | 必须绑定过UID/MYSID |
### 深渊查询:
![2](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/2.png)
### 当前状态:
![3](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/3.png)
### 签到:
![3](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/4.PNG)
### 查询词云:
![3](https://raw.githubusercontent.com/KimigaiiWuyi/GenshinUID/main/readme/5.PNG)
## 相关仓库
## 丨感谢
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它
- [YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info) - 米游社API来自于它
- *[MiniGG](https://www.minigg.cn/)* - Wiki API来自于它
- [@lgc233](https://github.com/lgc2333) - 众多优秀PR贡献
- [@RemKeeper](https://github.com/RemKeeper) - 简易Cookies获取文档
- [@wudifeixue](https://github.com/wudifeixue) - PR贡献 & Bug报告
- [@ZhouYingSASA](https://github.com/ZhouYingSASA) - PR贡献 & Bug报告
## 其他
## 丨其他
代码写的很烂勿喷有问题可以发issues/Pull Requests~
顺便求个star~
+ 如果对本插件有功能建议&Bug报告欢迎提Issuse & Pr每一条都会详细看过
+ 如果本插件对你有帮助不要忘了点个Star~
+ 本项目仅供学习使用,请勿用于商业用途
+ [爱发电](https://afdian.net/@KimigaiiWuyi)
+ [GPL-3.0 License](https://github.com/KimigaiiWuyi/GenshinUID/blob/main/LICENSE) © [@KimigaiiWuyi](https://github.com/KimigaiiWuyi)

View File

@ -1,4 +1,4 @@
from .getDB import (CheckDB, OpenPush, connectDB, deletecache, selectDB, get_alots)
from .getDB import (CheckDB, OpenPush, connectDB, deletecache, selectDB, get_alots, config_check)
from .getImg import (draw_abyss0_pic, draw_abyss_pic, draw_event_pic, draw_pic, draw_wordcloud)
from .getMes import (foods_wiki, artifacts_wiki, enemies_wiki, sign, daily, weapon_wiki, char_wiki, audio_wiki, award, deal_ck)
@ -195,31 +195,58 @@ async def dailysign():
"SELECT * FROM NewCookiesTable WHERE StatusB != ?", ("off",))
c_data = cursor.fetchall()
temp_list = []
for row in c_data:
im = await sign(str(row[0]))
if row[4] == "on":
try:
im = await sign(str(row[0]))
await bot.send_private_msg(user_id = row[2],message = im)
except Exception as e:
except:
traceback.print_exc()
print(im + "\nerror")
else:
im = await sign(str(row[0]))
message = f"[CQ:at,qq={row[2]}]\n{im}"
for i in temp_list:
if row[4] == i["push_group"]:
i["push_message"] = i["push_message"] + "\n" + message
break
if await config_check("SignReportSimple"):
for i in temp_list:
if row[4] == i["push_group"]:
if im == "签到失败请检查Cookies是否失效。" or im.startswith("网络有点忙,请稍后再试~!"):
i["failed"] += 1
i["push_message"] += "\n" + message
else:
i["success"] += 1
break
else:
if im == "签到失败请检查Cookies是否失效。":
temp_list.append({"push_group":row[4],"push_message":message,"success":0,"failed":1})
else:
temp_list.append({"push_group":row[4],"push_message":"","success":1,"failed":0})
else:
temp_list.append({"push_group":row[4],"push_message":message})
await asyncio.sleep(6+random.randint(0,2))
for i in temp_list:
try:
await bot.send_group_msg(group_id = i["push_group"],message = i["push_message"])
except Exception as e:
traceback.print_exc()
await asyncio.sleep(3+random.randint(0,2))
for i in temp_list:
if row[4] == i["push_group"] and i["num"] < 4:
i["push_message"] += "\n" + message
i["num"] += 1
break
else:
temp_list.append({"push_group":row[4],"push_message":message,"num":1})
await asyncio.sleep(6+random.randint(1,3))
if await config_check("SignReportSimple"):
for i in temp_list:
try:
report = "以下为签到失败报告:{}".format(i["push_message"]) if i["push_message"] != "" else ""
await bot.send_group_msg(group_id = i["push_group"],message = "今日自动签到已完成!\n本群共签到成功{}人,共签到失败{}人。{}".format(i["success"],i["failed"],report))
except:
traceback.print_exc()
print(i["push_message"])
await asyncio.sleep(4+random.randint(1,3))
else:
for i in temp_list:
try:
await bot.send_group_msg(group_id = i["push_group"],message = i["push_message"])
except:
traceback.print_exc()
print(i["push_message"])
await asyncio.sleep(4+random.randint(1,3))
conn.close()
return
#每隔半小时检测树脂是否超过设定值
@sv.scheduled_job('interval', hours = 1)
@ -324,6 +351,16 @@ async def _(bot:HoshinoBot, ev: CQEvent):
except Exception as e:
traceback.print_exc()
await bot.send(ev,"未绑定uid信息",at_sender=True)
elif m == "简洁签到报告":
try:
if qid in bot.config.SUPERUSERS:
_ = await config_check("SignReportSimple","OPEN")
await bot.send(ev,"成功!", at_sender=True)
else:
return
except Exception as e:
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
traceback.print_exc()
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
@ -370,6 +407,16 @@ async def _(bot:HoshinoBot, ev: CQEvent):
except Exception as e:
traceback.print_exc()
await bot.send(ev,"未绑定uid信息",at_sender=True)
elif m == "简洁签到报告":
try:
if qid in bot.config.SUPERUSERS:
_ = await config_check("SignReportSimple","CLOSED")
await bot.send(ev,"成功!", at_sender=True)
else:
return
except Exception as e:
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))
traceback.print_exc()
except Exception as e:
traceback.print_exc()
await bot.send(ev,"发生错误 {},请检查后台输出。".format(e))

View File

@ -14,6 +14,35 @@ BASE_PATH = os.path.dirname(__file__)
BASE2_PATH = os.path.join(BASE_PATH,'mys')
INDEX_PATH = os.path.join(BASE2_PATH,'index')
async def config_check(func,mode = "CHECK"):
conn = sqlite3.connect('ID_DATA.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS Config
(Name TEXT PRIMARY KEY NOT NULL,
Status TEXT,
GroupList TEXT,
Extra TEXT);''')
c.execute("INSERT OR IGNORE INTO Config (Name,Status) \
VALUES (?, ?)",(func,"on"))
if mode == "CHECK":
cursor = c.execute("SELECT * from Config WHERE Name = ?",(func,))
c_data = cursor.fetchall()
conn.close()
if c_data[0][1] != "off":
return True
else:
return False
elif mode == "OPEN":
c.execute("UPDATE Config SET Status = ? WHERE Name=?",("on",func))
conn.commit()
conn.close()
return True
elif mode == "CLOSED":
c.execute("UPDATE Config SET Status = ? WHERE Name=?",("off",func))
conn.commit()
conn.close()
return True
async def get_alots(qid):
conn = sqlite3.connect('ID_DATA.db')
c = conn.cursor()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 KiB