mirror of
https://github.com/tuna/mirror-web.git
synced 2025-12-26 05:02:48 +00:00
Merge branch 'wizard' of github.com:tuna/mirror-web into wizard
This commit is contained in:
commit
71901b00a3
|
|
@ -27,7 +27,12 @@ gems:
|
|||
- jekyll-babel
|
||||
- jekyll-sitemap
|
||||
|
||||
babel_js_extensions: 'es6'
|
||||
|
||||
exclude: [Gemfile, Gemfile.lock, README.md, gen_robot.sh, vendor]
|
||||
|
||||
# Content Related
|
||||
new_mirrors: [arch4edu, ros, elvish, HHVM, steamos, bjlx, loongson, tensorflow, elastic]
|
||||
new_mirrors: [arch4edu, ros, elvish, HHVM, steamos, bjlx, loongson, tensorflow, elasticstack]
|
||||
|
||||
descriptions:
|
||||
AOSP: 'Android Open Source Project'
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
<script src="/static/js/jquery.min.js"></script>
|
||||
<script src="/static/js/bootstrap.min.js"></script>
|
||||
<script src="/static/js/bootstrap-select.min.js"></script>
|
||||
<script src="/static/js/vue.min.js"></script>
|
||||
<script src="/static/js/markup.min.js"></script>
|
||||
<script src="/static/js/webfont.js"></script>
|
||||
</head>
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
|
|||
<div class="form-group">
|
||||
<label>选择你的 CentOS 版本: </label>
|
||||
<select class="form-control release-select" data-template="#repo-template" data-target="#repo-content">
|
||||
<option data-release="5" selected>CentOS 5</option>
|
||||
<option data-release="5">CentOS 5</option>
|
||||
<option data-release="6">CentOS 6</option>
|
||||
<option data-release="7">CentOS 7</option>
|
||||
<option data-release="7" selected>CentOS 7</option>
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -45,7 +45,6 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
|
|||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
|
||||
|
||||
|
||||
#released updates
|
||||
[updates]
|
||||
name=CentOS-$releasever - Updates
|
||||
|
|
@ -61,7 +60,6 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch
|
|||
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
|
||||
|
||||
{{if release_name|equals>5}}
|
||||
#packages used/produced in the build but not released
|
||||
[addons]
|
||||
|
|
@ -79,7 +77,6 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$base
|
|||
gpgcheck=1
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
|
||||
|
||||
{{if release_name|between>5>6}}
|
||||
#contrib - packages by Centos Users
|
||||
[contrib]
|
||||
|
|
@ -88,9 +85,7 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/contrib/$basearc
|
|||
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
|
||||
gpgcheck=1
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
|
||||
|
||||
{{/if}}
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}{{/if}}
|
||||
</script>
|
||||
{% endraw %}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
---
|
||||
category: help
|
||||
layout: help
|
||||
mirrorid: tensorflow
|
||||
---
|
||||
|
||||
# TensorFlow 镜像使用帮助
|
||||
|
||||
请先安装 python 环境,科学计算用途建议安装 [anaconda](/help/anaconda/)。
|
||||
TensorFlow 安装方法请参考 <https://www.tensorflow.org/get_started>,把 `https://storage.googleapis.com/` 替换为 `https://mirrors.tuna.tsinghua.edu.cn/`
|
||||
即可。
|
||||
|
||||
或直接运行下列命令,一步完成整个安装过程。
|
||||
|
||||
|
||||
{% raw %}
|
||||
<div id="content-form">
|
||||
<form class="form-inline">
|
||||
<div class="form-group">
|
||||
<label>计算单元: </label>
|
||||
<select v-model="form.xpu" class="form-control">
|
||||
<option value="gpu">GPU</option>
|
||||
<option value="cpu">CPU</option>
|
||||
</select>
|
||||
|
||||
<label>操作系统: </label>
|
||||
<select v-model="form.os" class="form-control">
|
||||
<option value="linux">Linux</option>
|
||||
<option value="mac">Mac OS X</option>
|
||||
</select>
|
||||
|
||||
<label>Python 版本: </label>
|
||||
<select v-model="form.python" class="form-control">
|
||||
<template v-if="form.os === 'linux'">
|
||||
<option value="35">3.5</option>
|
||||
<option value="34">3.4</option>
|
||||
<option value="27">2.7</option>
|
||||
</template>
|
||||
<template v-if="form.os == 'mac'">
|
||||
<option value="3">3</option>
|
||||
<option value="2">2</option>
|
||||
</template>
|
||||
</select>
|
||||
|
||||
<label>TensorFlow 版本: </label>
|
||||
<select v-model="form.tfver" class="form-control">
|
||||
<option value="0.11.0">0.11.0</option>
|
||||
<option value="0.10.0">0.10.0</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<p></p>
|
||||
<pre>
|
||||
pip install \
|
||||
-i https://pypi.tuna.tsinghua.edu.cn/simple/ \
|
||||
https://mirrors.tuna.tsinghua.edu.cn/tensorflow/{{form.os}}/{{form.xpu}}/tensorflow-{{form.tfver}}-{{pytag}}.whl
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: "#content-form",
|
||||
data: {
|
||||
form: {
|
||||
xpu: "gpu",
|
||||
os: "linux",
|
||||
python: "35",
|
||||
tfver: "0.11.0"
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
pytag: function() {
|
||||
if (this.form.os === "linux") {
|
||||
if (this.form.python === "27") {
|
||||
return "cp" + this.form.python + "-none-linux_x86_64";
|
||||
}
|
||||
return "cp" + this.form.python + "-cp"+this.form.python+"m-linux_x86_64";
|
||||
} else if (this.form.os === "mac") {
|
||||
return "py" + this.form.python + "-none-any";
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"form.os": function (newOS) {
|
||||
if (newOS === "linux") {
|
||||
this.form.python = "35";
|
||||
} else if (newOS === "mac") {
|
||||
this.form.python = "3";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endraw %}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
category: news
|
||||
layout: news
|
||||
title: "新增 Tensorflow 等一系列镜像"
|
||||
author: Xavier Yao & Harry Chen
|
||||
---
|
||||
|
||||
TUNA 镜像站新增一系列镜像。
|
||||
|
||||
- tensorflow: Google 开发的、采用数据流图(data flow graphs)、用于数值计算的开源软件库,被广泛应用于深度学习等领域。使用方法见 [TensorFlow 镜像使用帮助](/help/tensorflow/)。
|
||||
- arch4edu: 用于 ArchLinux 的一系列科研、教学所需工具
|
||||
- ros: 用于开发机器人的工具包
|
||||
- elvish: TUNA 前会长 [xiaq](https://github.com/xiaq) 开发的革命性 Shell ,详见 [这里](https://elvish.io/)
|
||||
- HHVM: 由 Facebook 开发的高性能 PHP 虚拟机
|
||||
- steamos: 不解释,剁手专用
|
||||
- bjlx: [北京龙芯 & Debian 俱乐部](http://www.bjlx.org.cn/) 的公开源
|
||||
- loongson: 用于龙芯电脑的软件包
|
||||
- elasticstack: ELK 系列数据分析工具,5.x 之后改名为 elastic stack
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
# is disto name specified in below sections. Lower N makes the distro
|
||||
# show higher. Default N is 0xFFFF for distro not mentioned.
|
||||
[%main%]
|
||||
root = /srv/www/
|
||||
root = /data/
|
||||
urlbase = /
|
||||
d30 = Ubuntu
|
||||
d40 = Ubuntu 衍生版
|
||||
|
|
@ -177,10 +177,70 @@ pattern = deepin-([0-9.]+)-(\w+).iso
|
|||
version = $1
|
||||
platform = $2
|
||||
|
||||
#[qt5]
|
||||
#distro = Qt
|
||||
#listvers = 1
|
||||
#location_0 = qt/official_releases/qt/5.[0-9]/5.[0-9].[0-9]/qt-opensource-*.run
|
||||
#location_1 = qt/official_releases/qt/5.[0-9]/5.[0-9].[0-9]/qt-opensource-*.dmg
|
||||
#location_2 = qt/official_releases/qt/5.[0-9]/5.[0-9].[0-9]/qt-opensource-*.exe
|
||||
#pattern = qt-opensource-(\w+)-.(run|dmg|exe)
|
||||
[qt5]
|
||||
distro = Qt 5 (含 Qt Creator)
|
||||
listvers = 1
|
||||
location = qt/official_releases/qt/5.*/5.*/qt-opensource-*
|
||||
pattern = qt-opensource-(.*)-([\d.]+).(run|dmg|exe)
|
||||
platform = $1
|
||||
version = $2
|
||||
category = app
|
||||
|
||||
[msys2]
|
||||
distro = MSYS2
|
||||
listvers = 1
|
||||
location = msys2/distrib/msys2-*.exe
|
||||
pattern = msys2-(i686|x86_64)-(latest).exe
|
||||
platform = Windows
|
||||
type = $1
|
||||
version = $2
|
||||
category = app
|
||||
|
||||
[virtualbox]
|
||||
distro = VirtualBox
|
||||
listvers = 1
|
||||
location = virtualbox/virtualbox-*
|
||||
pattern = virtualbox-(.*)-(latest).(exe|dmg)
|
||||
platform = $1
|
||||
version = $2
|
||||
category = app
|
||||
|
||||
[texlive]
|
||||
distro = TeX 排版系统
|
||||
listvers = 1
|
||||
location = CTAN/systems/texlive/Images/texlive*.iso
|
||||
pattern = texlive(\d+)-\d+.iso
|
||||
platform = Windows & Linux
|
||||
version = TeX Live $1
|
||||
category = app
|
||||
|
||||
[mactex]
|
||||
distro = TeX 排版系统
|
||||
listvers = 1
|
||||
location = CTAN/systems/mac/mactex/mactex-*.pkg
|
||||
pattern = mactex-(\d+).pkg
|
||||
platform = macOS
|
||||
version = MacTeX $1
|
||||
category = app
|
||||
|
||||
[miktex]
|
||||
distro = TeX 排版系统
|
||||
listvers = 1
|
||||
location = CTAN/systems/win32/miktex/setup/basic-miktex-*
|
||||
pattern = basic-miktex-((\d+.)+\d+)(|-)*(x64)*.exe
|
||||
platform = Windows
|
||||
type = $4
|
||||
version = MikTeX $1
|
||||
category = app
|
||||
|
||||
[anaconda]
|
||||
distro = Anaconda
|
||||
listvers = 1
|
||||
location = anaconda/archive/Anaconda*
|
||||
pattern = (Anaconda\d*)-(\d+.\d+.\d+)-(Windows|Linux|MacOSX)-(x86|x86_64).\w+
|
||||
platform = $3
|
||||
type = $4
|
||||
version = $2
|
||||
category = app
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ def parseSection(items):
|
|||
group_count = len(result.groups()) + 1
|
||||
imageinfo = {"filepath": imagepath, "distro": items["distro"]}
|
||||
|
||||
for prop in ("version", "type", "platform"):
|
||||
for prop in ("version", "type", "platform", "category"):
|
||||
s = items.get(prop, "")
|
||||
for i in range(0, group_count):
|
||||
s = s.replace("$%d" % i, result.group(i))
|
||||
|
|
@ -90,7 +90,8 @@ def getDetail(image_info, urlbase):
|
|||
image_info['platform'],
|
||||
", %s" % image_info['type'] if image_info['type'] else ''
|
||||
)
|
||||
category = image_info.get('category', 'os')
|
||||
|
||||
category = image_info.get('category', 'os') or "os"
|
||||
return (desc, url, category)
|
||||
|
||||
|
||||
|
|
@ -146,4 +147,3 @@ if __name__ == "__main__":
|
|||
import sys
|
||||
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
||||
print(getImageList())
|
||||
|
||||
|
|
|
|||
50
index.html
50
index.html
|
|
@ -6,9 +6,10 @@ permalink: /
|
|||
{% include head.html %}
|
||||
<body>
|
||||
{% include nav.html %}
|
||||
|
||||
|
||||
<div id="mirrors">
|
||||
<div class="spacing hidden-xs"></div>
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-8 table-responsive">
|
||||
|
|
@ -27,10 +28,6 @@ permalink: /
|
|||
<div class="col-md-4">
|
||||
<div class="spacing hidden-xs"></div>
|
||||
<div id="wizard">
|
||||
<!-- Button trigger iso modal -->
|
||||
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#isoModal">
|
||||
获取安装镜像
|
||||
</button>
|
||||
</div>
|
||||
<div id="news">
|
||||
<h4><span class="fa fa-bullhorn"></span> 新闻公告 </h4>
|
||||
|
|
@ -49,6 +46,13 @@ permalink: /
|
|||
<li><a href="https://mirrors4.tuna.tsinghua.edu.cn/">https://mirrors4.tuna.tsinghua.edu.cn/</a> 只解析 IPv4</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4><span class="fa fa-file-archive-o"></span> 下载链接 </h4>
|
||||
<p>常用发行版 iso 和应用工具安装包直接下载</p>
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#isoModal">
|
||||
获取下载链接
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<h4> <span class="fa fa-envelope-o"></span> 联系我们 </h4>
|
||||
<ul>
|
||||
|
|
@ -76,6 +80,7 @@ permalink: /
|
|||
{% include footer.html %}
|
||||
<!-- iso download wizard modal -->
|
||||
<!-- Modal -->
|
||||
{% raw %}
|
||||
<div class="modal fade" id="isoModal" tabindex="-1" role="dialog" aria-labelledby="isoModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
|
|
@ -86,18 +91,35 @@ permalink: /
|
|||
<h4 class="modal-title" id="isoModalLabel">获取安装镜像</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>选择安装发行版: <select class="selectpicker" id="isodistro" ></select></p>
|
||||
<p>选择发行版版本: <select class="selectpicker" id="isoversion">
|
||||
<option value="none">-</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" id="btn_download">下载</button>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<ul class="nav nav-tabs">
|
||||
<li role="presentation" :class="[curCategory === 'os' ? 'active' : '']" @click="switchCategory('os')"><a href="#">操作系统</a></li>
|
||||
<li role="presentation" :class="[curCategory === 'app' ? 'active' : '']" @click="switchCategory('app')"><a href="#">应用软件</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<ul class="nav nav-pills nav-stacked">
|
||||
<li v-for="distro in curDistroList" :class="[selected.distro == distro.distro ? 'active' : '']">
|
||||
<a href="#" @click="switchDistro(distro)">{{ distro.distro }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<h3>{{selected.distro}}</h3>
|
||||
<ul>
|
||||
<template v-for="url in selected.urls">
|
||||
<li><a :href="url.url">{{url.name}}</a></li>
|
||||
</template>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /iso download wizard modal -->
|
||||
{% endraw %}
|
||||
|
||||
</body>
|
||||
{% raw %}
|
||||
|
|
@ -106,7 +128,7 @@ permalink: /
|
|||
{{if is_master}}
|
||||
<tr class="status-{{status}} row">
|
||||
<td class="col-md-8">
|
||||
<a href="{{if url}}{{url}}{{else}}/{{name}}{{/if}}">{{name}}</a>
|
||||
<a class="mirror-item-label" data-toggle="popover" data-trigger="hover" data-placement="right" data-content="{{if description}}{{description}}{{/if}}" href="{{if url}}{{url}}{{else}}/{{name}}{{/if}}">{{name}}</a>
|
||||
{{if is_new}}<span class="label label-new">new</span>{{/if}}
|
||||
{{if help_url}}<a href="{{help_url}}"><i class="fa fa-question-circle" title="Help"></i></a>{{/if}}
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -125,6 +125,9 @@ $font_local: 'Heiti SC', 'Hiragino Sans GB', 'STHeiti', 'Source Han Sans CN', 'W
|
|||
color: $color_grey;
|
||||
}
|
||||
}
|
||||
.fa-user {
|
||||
font-family: #{$font_default}, 'FontAwesome';
|
||||
}
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ $(document).ready(() => {
|
|||
let help_url = $(ev.target).find("option:selected").data('help-url');
|
||||
window.location = `${window.location.protocol}//${window.location.host}${help_url}`;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// vim: ts=2 sts=2 sw=2 noexpandtab
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ var mir_tmpl = $("#template").text(),
|
|||
new_mirrors = {
|
||||
{% for n in site.new_mirrors %}"{{n}}": true{% if forloop.index < forloop.length %},{% endif %}{% endfor %}
|
||||
},
|
||||
|
||||
unlisted = [
|
||||
{
|
||||
'status': 'success',
|
||||
|
|
@ -39,7 +40,10 @@ var mir_tmpl = $("#template").text(),
|
|||
'homebrew': {
|
||||
'url': "/help/homebrew/",
|
||||
}
|
||||
};
|
||||
},
|
||||
descriptions = {
|
||||
{% for item in site.descriptions %}{{ item[0] }}: '{{ item[1] }}' {% endfor %}
|
||||
}
|
||||
|
||||
window.refreshMirrorList = () => {
|
||||
$.getJSON("/static/tunasync.json", (status_data) => {
|
||||
|
|
@ -58,6 +62,7 @@ window.refreshMirrorList = () => {
|
|||
d.label = label_map[d.status];
|
||||
d.help_url = help_url[d.name];
|
||||
d.is_new = new_mirrors[d.name];
|
||||
d.description = descriptions[d.name];
|
||||
d.show_status = (d.status != "success");
|
||||
if (d.is_master === undefined) {
|
||||
d.is_master = true;
|
||||
|
|
@ -78,53 +83,45 @@ window.refreshMirrorList = () => {
|
|||
}
|
||||
var result = Mark.up(mir_tmpl, {mirrors: mirrors});
|
||||
$('#mirror-list').html(result);
|
||||
|
||||
$('.mirror-item-label').popover();
|
||||
});
|
||||
setTimeout(refreshMirrorList, 10000);
|
||||
}
|
||||
|
||||
window.modal = () => {
|
||||
var bx = document.getElementById("isomodal");
|
||||
bx.style.visibility = (bx.style.visibility == "visible") ? "hidden" : "visible";
|
||||
}
|
||||
|
||||
window.switchDistro = () => {
|
||||
var distro = document.getElementById("isodistro");
|
||||
var idx = distro.selectedIndex;
|
||||
var s = document.getElementById('isoversion');
|
||||
s.options.length = 0;
|
||||
for (var i = 0; i < isoinfo[idx].urls.length; i++) {
|
||||
s.options[s.options.length] = new Option(isoinfo[idx].urls[i].name, i)
|
||||
}
|
||||
$('.selectpicker').selectpicker('refresh')
|
||||
|
||||
}
|
||||
|
||||
var refreshISOList = () => {
|
||||
$.getJSON("/static/isoinfo.json", (isoinfo) => {
|
||||
window.isoinfo = isoinfo;
|
||||
window.s = document.getElementById("isodistro");
|
||||
s.options.length = 0;
|
||||
for (var i = 0; i < isoinfo.length; i++) {
|
||||
s.options[s.options.length] = new Option(isoinfo[i].distro, i);
|
||||
}
|
||||
$('.selectpicker').selectpicker('refresh')
|
||||
switchDistro();
|
||||
});
|
||||
}
|
||||
|
||||
$('#isodistro').change(switchDistro);
|
||||
$('#btn_download').click(() => {
|
||||
var distro = document.getElementById("isodistro");
|
||||
var version = document.getElementById("isoversion");
|
||||
var i = distro.selectedIndex;
|
||||
var j = version.selectedIndex;
|
||||
var link = isoinfo[i].urls[j].url;
|
||||
window.open(link);
|
||||
$('#isoModal').modal('toggle');
|
||||
});
|
||||
refreshISOList();
|
||||
refreshMirrorList();
|
||||
|
||||
var vm = new Vue({
|
||||
el: "#isoModal",
|
||||
data: {
|
||||
distroList: [],
|
||||
selected: null,
|
||||
curCategory: "os"
|
||||
},
|
||||
created: function () {
|
||||
var self = this;
|
||||
$.getJSON("/static/isoinfo.json", function (isoinfo) {
|
||||
self.distroList = isoinfo;
|
||||
self.selected = self.curDistroList[0];
|
||||
});
|
||||
},
|
||||
computed: {
|
||||
curDistroList () {
|
||||
return this.distroList.filter((x)=> x.category === this.curCategory);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
switchDistro (distro) {
|
||||
this.selected = distro;
|
||||
},
|
||||
switchCategory (category) {
|
||||
this.curCategory = category;
|
||||
this.selected = this.curDistroList[0];
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// vim: ts=2 sts=2 sw=2 noexpandtab
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue