Commit a126baf3 authored by Dan Jacobowitz's avatar Dan Jacobowitz

- debian/patches/rtld-vdso-assertion.dpatch: Fix an assertion failure

      running /lib/libc.so.6.
    - debian/rules.d/debhelper.mk: Mark runnable libraries +x again.

svn path=/glibc-package/trunk/; revision=905
parent c012bc06
glibc (2.3.2.ds1-22) unstable; urgency=medium
* Daniel Jacobowitz <dan@debian.org>
- debian/patches/rtld-vdso-assertion.dpatch: Fix an assertion failure
running /lib/libc.so.6.
- debian/rules.d/debhelper.mk: Mark runnable libraries +x again.
-- Daniel Jacobowitz <dan@debian.org> Tue, 10 May 2005 15:11:53 -0400
glibc (2.3.2.ds1-21) unstable; urgency=high
* GOTO Masanori <gotom@debian.org>
......
......@@ -124,3 +124,4 @@ glibc232-pthread-cancellation
glibc232-tls-crashfix
glibc232-clock_settime
glibc23-mips-lazy-eval
rtld-vdso-assertion
#! /bin/sh -e
# All lines beginning with `# DP:' are a description of the patch.
# DP: Description: Correct a bit of VDSO support which broke running
# DP: binaries linked against ld.so directly.
# DP: Related bugs: 207872, 210840, 274852, 276384
# DP: Dpatch author: Daniel Jacobowitz <dan@debian.org>
# DP: Patch author: Daniel Jacobowitz, Roland McGrath, Jakub Jelinek
# DP: Upstream status: In CVS
# DP: Status Details: Backported
# DP: Date: 2005-05-08
PATCHLEVEL=1
if [ $# -ne 2 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch) patch -d "$2" -f --no-backup-if-mismatch -p$PATCHLEVEL < $0;;
-unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p$PATCHLEVEL < $0;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
# append the patch here and adjust the -p? flag in the patch calls.
2004-02-27 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Adjust l->l_ld of the vDSO by l->l_addr.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Only set
GL(dl_sysinfo) if non-zero.
2004-02-26 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (dl_main): Correctly set up l_map_end and l_addr
in vDSO's link_map, don't assume l_addr == 0. Set GL(dl_sysinfo)
from e_entry only if AT_SYSINFO not present and adjust by l_addr.
Take vDSO into account when inserting rtld into _dl_loaded chain.
2003-10-09 Roland McGrath <roland@redhat.com>
* elf/rtld.c (dl_main): Don't set l_name for sysinfo DSO, since there
is no file to name.
2003-10-08 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/dl-sysdep.c (_dl_important_hwcaps): Don't generate
two identical copies of strings.
2003-09-30 Daniel Jacobowitz <drow@mvista.com>
* elf/rtld.c (dl_main): Set l_libname and l_name for the sysinfo DSO
to work around kernel problem.
--- glibc-2.3.2/elf/rtld.c.orig 2005-05-08 10:25:33.775671493 -0400
+++ glibc-2.3.2/elf/rtld.c 2005-05-08 10:29:36.631515133 -0400
@@ -1161,11 +1161,9 @@ of this helper program; chances are you
}
#ifdef NEED_DL_SYSINFO
+ struct link_map *sysinfo_map = NULL;
if (GL(dl_sysinfo_dso) != NULL)
{
- /* We have a prelinked DSO preloaded by the system. */
- GL(dl_sysinfo) = GL(dl_sysinfo_dso)->e_entry;
-
/* Do an abridged version of the work _dl_map_object_from_fd would do
to map in the object. It's already mapped and prelinked (and
better be, since it's read-only and so we couldn't relocate it).
@@ -1174,7 +1172,7 @@ of this helper program; chances are you
struct link_map *l = _dl_new_object ((char *) "", "", lt_library, NULL);
if (__builtin_expect (l != NULL, 1))
{
- static ElfW(Dyn) dyn_temp [DL_RO_DYN_TEMP_CNT];
+ static ElfW(Dyn) dyn_temp[DL_RO_DYN_TEMP_CNT];
l->l_phdr = ((const void *) GL(dl_sysinfo_dso)
+ GL(dl_sysinfo_dso)->e_phoff);
@@ -1188,18 +1186,32 @@ of this helper program; chances are you
l->l_ldnum = ph->p_memsz / sizeof (ElfW(Dyn));
break;
}
- if (ph->p_type == PT_LOAD)
- assert ((void *) ph->p_vaddr == GL(dl_sysinfo_dso));
+ else if (ph->p_type == PT_LOAD)
+ {
+ if (! l->l_addr)
+ l->l_addr = ph->p_vaddr;
+ else if (ph->p_vaddr + ph->p_memsz >= l->l_map_end)
+ l->l_map_end = ph->p_vaddr + ph->p_memsz;
+ }
}
+ l->l_map_start = (ElfW(Addr)) GL(dl_sysinfo_dso);
+ l->l_addr = l->l_map_start - l->l_addr;
+ l->l_map_end += l->l_addr;
+ l->l_ld = (void *) ((ElfW(Addr)) l->l_ld + l->l_addr);
elf_get_dynamic_info (l, dyn_temp);
_dl_setup_hash (l);
l->l_relocated = 1;
/* Now that we have the info handy, use the DSO image's soname
so this object can be looked up by name. */
if (l->l_info[DT_SONAME] != NULL)
l->l_libname->name = ((char *) D_PTR (l, l_info[DT_STRTAB])
+ l->l_info[DT_SONAME]->d_un.d_val);
+
+ /* We have a prelinked DSO preloaded by the system. */
+ if (GL(dl_sysinfo) == DL_SYSINFO_DEFAULT)
+ GL(dl_sysinfo) = GL(dl_sysinfo_dso)->e_entry + l->l_addr;
+ sysinfo_map = l;
}
}
#endif
@@ -1245,9 +1268,17 @@ of this helper program; chances are you
++i;
GL(dl_rtld_map).l_prev = GL(dl_loaded)->l_searchlist.r_list[i - 1];
if (__builtin_expect (mode, normal) == normal)
- GL(dl_rtld_map).l_next = (i + 1 < GL(dl_loaded)->l_searchlist.r_nlist
- ? GL(dl_loaded)->l_searchlist.r_list[i + 1]
- : NULL);
+ {
+ GL(dl_rtld_map).l_next = (i + 1 < GL(dl_loaded)->l_searchlist.r_nlist
+ ? GL(dl_loaded)->l_searchlist.r_list[i + 1]
+ : NULL);
+#ifdef NEED_DL_SYSINFO
+ if (sysinfo_map != NULL
+ && GL(dl_rtld_map).l_prev->l_next == sysinfo_map
+ && GL(dl_rtld_map).l_next != sysinfo_map)
+ GL(dl_rtld_map).l_prev = sysinfo_map;
+#endif
+ }
else
/* In trace mode there might be an invisible object (which we
could not find) after the previous one in the search list.
--- glibc-2.3.2/sysdeps/generic/dl-sysdep.c.orig 2005-05-08 10:16:09.270961000 -0400
+++ glibc-2.3.2/sysdeps/generic/dl-sysdep.c 2005-05-08 10:41:11.607089482 -0400
@@ -196,7 +196,7 @@ _dl_sysdep_start (void **start_argptr,
#if defined NEED_DL_SYSINFO
/* Only set the sysinfo value if we also have the vsyscall DSO. */
- if (GL(dl_sysinfo_dso) != 0)
+ if (GL(dl_sysinfo_dso) != 0 && new_sysinfo)
GL(dl_sysinfo) = new_sysinfo;
#endif
@@ -454,7 +454,7 @@ _dl_important_hwcaps (const char *platfo
}
else
{
- n = 1 << cnt;
+ n = 1 << (cnt - 1);
do
{
n -= 2;
......@@ -47,9 +47,9 @@ msgid ""
"locale.gen', which you can also edit manually (you need to run `locale-gen' "
"afterwards)."
msgstr ""
"Vælg hvilke lokaliteter der skal genereres. Dine valg vil blive gemt til '"
"/etc/locale.gen', som du også kan redigere manuelt (du skal køre 'locale-gen'"
" bagefter."
"Vælg hvilke lokaliteter der skal genereres. Dine valg vil blive gemt til '/"
"etc/locale.gen', som du også kan redigere manuelt (du skal køre 'locale-gen' "
"bagefter."
#. Type: select
#. Choices
......@@ -73,9 +73,9 @@ msgid ""
"generate."
msgstr ""
"Mange pakker i Debian bruger lokaliteter til at vise tekst i det korrekt "
"sprog til brugerne. Du kan ændre standard-lokaliteten hvis engelsk ikke "
"er dit modersmåls sprog. Dine valg er baseret på hvilke lokalitetsfiler "
"du valgte at generere."
"sprog til brugerne. Du kan ændre standard-lokaliteten hvis engelsk ikke er "
"dit modersmåls sprog. Dine valg er baseret på hvilke lokalitetsfiler du "
"valgte at generere."
#. Type: select
#. Description
......@@ -87,4 +87,5 @@ msgid ""
"default locale."
msgstr ""
"Bemærk: Dette vil sætte sproget for hele systemet. Hvis ikke alle brugerne "
"på dit system kan forstå det sprog som du vælger, kan de løbe ind i problemer."
"på dit system kan forstå det sprog som du vælger, kan de løbe ind i "
"problemer."
......@@ -38,9 +38,9 @@ msgid ""
"Locale is a framework to switch between multiple languages for users who can "
"select to use their language, country, characters, collation order, etc."
msgstr ""
"Το γλωσσικό περιβάλλον (locale) είναι ένα πλαίσιο υποστήριξης εναλλαγής πολλαπλών "
"γλωσσών, ώστε οι χρήστες να μπορούν να χρησιμοποιούν τη γλώσσα τους, με όλα τα "
"συνεπακόλουθα, χαρακτήρες, νόμισμα, τοπικές ρυθμίσεις, κλπ."
"Το γλωσσικό περιβάλλον (locale) είναι ένα πλαίσιο υποστήριξης εναλλαγής "
"πολλαπλών γλωσσών, ώστε οι χρήστες να μπορούν να χρησιμοποιούν τη γλώσσα "
"τους, με όλα τα συνεπακόλουθα, χαρακτήρες, νόμισμα, τοπικές ρυθμίσεις, κλπ."
#. Type: multiselect
#. Description
......@@ -51,8 +51,9 @@ msgid ""
"afterwards)."
msgstr ""
"Επιλέξτε ποια γλωσσικά περιβάλλοντα θέλετε να δημιουργηθούν. Η επιλογή θα "
"αποθηκευτεί στο αρχείο '/etc/locale.gen', το οποίο μπορείτε να επεξεργαστείτε και "
"χειροκίνητα (έπειτα θα πρέπει να εκτελέσετε την εντολή 'locale-gen')."
"αποθηκευτεί στο αρχείο '/etc/locale.gen', το οποίο μπορείτε να "
"επεξεργαστείτε και χειροκίνητα (έπειτα θα πρέπει να εκτελέσετε την εντολή "
"'locale-gen')."
#. Type: select
#. Choices
......@@ -76,9 +77,9 @@ msgid ""
"generate."
msgstr ""
"Πολλά πακέτα στο Debiaν χρησιμοποιούν τη δυνατότητα των γλωσσικών "
"περιβάλλοντων για να εμφανίζουν κείμενο στην επιλεγμένη γλώσσα του "
"κάθε χρήστη. Μπορείτε να αλλάξετε το προκαθορισμένο γλωσσικό περιβάλλον "
"αν η Αγγλική δεν είναι η μητρική σας γλώσσα. Αυτές οι επιλογές βασίζονται στα "
"περιβάλλοντων για να εμφανίζουν κείμενο στην επιλεγμένη γλώσσα του κάθε "
"χρήστη. Μπορείτε να αλλάξετε το προκαθορισμένο γλωσσικό περιβάλλον αν η "
"Αγγλική δεν είναι η μητρική σας γλώσσα. Αυτές οι επιλογές βασίζονται στα "
"γλωσσικά περιβάλλοντα που επιλέξατε να δημιουργηθούν."
#. Type: select
......@@ -93,5 +94,5 @@ msgstr ""
"Σημείωση: Αυτή η επιλογή θα επιλέξει τη γλώσσα για ολόκληρο το σύστημά σας. "
"Αν έχετε ένα πολυχρηστικό σύστημα, στο οποίο οι χρήστες δε μιλούν όλοι την "
"γλώσσα που εσείς επιλέξατε, τότε πιθανόν να συναντήσουν δυσκολίες και για το "
"λόγο αυτό ίσως να μη πρέπει να ορίσετε ένα προκαθορισμένο γλωσσικό περιβάλλον."
"λόγο αυτό ίσως να μη πρέπει να ορίσετε ένα προκαθορισμένο γλωσσικό "
"περιβάλλον."
......@@ -24,8 +24,9 @@ msgid ""
"Locale is a framework to switch between multiple languages for users who can "
"select to use their language, country, characters, collation order, etc."
msgstr ""
"Wybierane tutaj ustawienia loklane stanowią podstawową strukturę "
"dającą możliwość pracy systemu w specyficznym dla danego kraju środowisku (język, zestaw znaków, kolejność sortowania itp.)"
"Wybierane tutaj ustawienia loklane stanowią podstawową strukturę dającą "
"możliwość pracy systemu w specyficznym dla danego kraju środowisku (język, "
"zestaw znaków, kolejność sortowania itp.)"
#. Type: multiselect
#. Description
......@@ -34,7 +35,11 @@ msgid ""
"Choose which locales to generate. The selection will be saved to `/etc/"
"locale.gen', which you can also edit manually (you need to run `locale-gen' "
"afterwards)."
msgstr "Wybierz, który zestaw ustawień loklanych chcesz wygenerować. Twój wybór zostanie zapisany do pliku `/etc/locale.gen', który można później edytować dowolnym edytorem tekstu (w tym przypadku konieczne będzie późniejsze uruchomienie 'locale-gen')."
msgstr ""
"Wybierz, który zestaw ustawień loklanych chcesz wygenerować. Twój wybór "
"zostanie zapisany do pliku `/etc/locale.gen', który można później edytować "
"dowolnym edytorem tekstu (w tym przypadku konieczne będzie późniejsze "
"uruchomienie 'locale-gen')."
#. Type: select
#. Choices
......@@ -56,7 +61,12 @@ msgid ""
"for users. You can change the default locale if you're not a native English "
"speaker. These choices are based on which locales you have chosen to "
"generate."
msgstr "Wiele programów dostarczanych w pakietach Debiana wykorzystuje ustawienia lokalne, aby wyświetlać tekst we właściwym dla użytkownika języku. Możesz zmienić domyślne ustawienia loklane jeżeli nie chcesz posługiwać się językiem angielskim. Można wybrać tylko te ustawienia loklane, które wcześniej zostały wygenerowane."
msgstr ""
"Wiele programów dostarczanych w pakietach Debiana wykorzystuje ustawienia "
"lokalne, aby wyświetlać tekst we właściwym dla użytkownika języku. Możesz "
"zmienić domyślne ustawienia loklane jeżeli nie chcesz posługiwać się "
"językiem angielskim. Można wybrać tylko te ustawienia loklane, które "
"wcześniej zostały wygenerowane."
#. Type: select
#. Description
......@@ -66,5 +76,8 @@ msgid ""
"a multi-user system where not all of your users speak the language of your "
"choice, then they will run into difficulties and you might want not to set a "
"default locale."
msgstr "Zwróć uwagę na to, że wybrany tutaj język ma wpływ na na cały system i większość działających w nim programów. Jeżeli z tego systemu korzysta więcej użytkowników posłujących się różnymi językami najlepiej będzie pozostawić domyślne (angielskie) ustawiania lokalne."
msgstr ""
"Zwróć uwagę na to, że wybrany tutaj język ma wpływ na na cały system i "
"większość działających w nim programów. Jeżeli z tego systemu korzysta "
"więcej użytkowników posłujących się różnymi językami najlepiej będzie "
"pozostawić domyślne (angielskie) ustawiania lokalne."
......@@ -75,8 +75,9 @@ msgid ""
"generate."
msgstr ""
" Debian "
" . , "
" . , ."
" . , "
" . , "
" ."
#. Type: select
#. Description
......
......@@ -29,8 +29,9 @@ msgid ""
"Locale is a framework to switch between multiple languages for users who can "
"select to use their language, country, characters, collation order, etc."
msgstr ""
"Yerel (locale), kullanıcıların kullanmak istediği dil, ülke, karakter, sıralama şekli gibi dile "
"özgü ayarlar arasında kolayca geçiş yapmasını sağlayan bir yapıdır."
"Yerel (locale), kullanıcıların kullanmak istediği dil, ülke, karakter, "
"sıralama şekli gibi dile özgü ayarlar arasında kolayca geçiş yapmasını "
"sağlayan bir yapıdır."
#. Type: multiselect
#. Description
......@@ -40,9 +41,9 @@ msgid ""
"locale.gen', which you can also edit manually (you need to run `locale-gen' "
"afterwards)."
msgstr ""
"Oluşturulacak yerelleri seçiniz. Yapılan seçim '/etc/locale.gen' dosyası içinde "
"saklanacaktır. Daha sonra bu dosyayı elle değiştirebilirsiniz (bunu yaptıktan sonra "
"`locale-gen' komutunu çalıştırmanız gerekecektir)."
"Oluşturulacak yerelleri seçiniz. Yapılan seçim '/etc/locale.gen' dosyası "
"içinde saklanacaktır. Daha sonra bu dosyayı elle değiştirebilirsiniz (bunu "
"yaptıktan sonra `locale-gen' komutunu çalıştırmanız gerekecektir)."
#. Type: select
#. Choices
......@@ -65,8 +66,10 @@ msgid ""
"speaker. These choices are based on which locales you have chosen to "
"generate."
msgstr ""
"Çoğu Debian paketi mesajları göstermekte kullanacağı dili belirlemek için yerelleri kullanır. Ana diliniz İngilizce değil ise öntanımlı yereli değiştirebilirsiniz. "
"Bütün bu seçimler, oluşturulmak üzere seçtiğiniz yerellere göre belirlenir."
"Çoğu Debian paketi mesajları göstermekte kullanacağı dili belirlemek için "
"yerelleri kullanır. Ana diliniz İngilizce değil ise öntanımlı yereli "
"değiştirebilirsiniz. Bütün bu seçimler, oluşturulmak üzere seçtiğiniz "
"yerellere göre belirlenir."
#. Type: select
#. Description
......@@ -77,6 +80,7 @@ msgid ""
"choice, then they will run into difficulties and you might want not to set a "
"default locale."
msgstr ""
"Not: Bu ayar, sisteminizin bütününde kullanılacak dili seçecektir. Eğer farklı dilleri "
"konuşan kullanıcıların da bulunduğu çok kullanıcılı bir sistem çalıştırıyorsanız, bu kullanıcılar bazı zorluklarla karşılaşabilir. Bu nedenle öntanımlı bir yerel belirlememeyi isteyebilirsiniz."
"Not: Bu ayar, sisteminizin bütününde kullanılacak dili seçecektir. Eğer "
"farklı dilleri konuşan kullanıcıların da bulunduğu çok kullanıcılı bir "
"sistem çalıştırıyorsanız, bu kullanıcılar bazı zorluklarla karşılaşabilir. "
"Bu nedenle öntanımlı bir yerel belirlememeyi isteyebilirsiniz."
......@@ -38,8 +38,8 @@ msgid ""
"select to use their language, country, characters, collation order, etc."
msgstr ""
"Локаль -- це механізм, що дозволяє перемикатися між кількома мовами для "
"користувачів, які можуть використовувати свою мову, країну, символи "
"порядок сортування і т.п."
"користувачів, які можуть використовувати свою мову, країну, символи порядок "
"сортування і т.п."
#. Type: multiselect
#. Description
......@@ -49,9 +49,9 @@ msgid ""
"locale.gen', which you can also edit manually (you need to run `locale-gen' "
"afterwards)."
msgstr ""
"Вкажіть, які локалі потрібно створити. Ваш вибір буде збережений у "
"файлі \"/etc/locale.gen\", який ви також можете редагувати вручну "
"(після цього потрібно запускати \"locale-gen\")."
"Вкажіть, які локалі потрібно створити. Ваш вибір буде збережений у файлі \"/"
"etc/locale.gen\", який ви також можете редагувати вручну (після цього "
"потрібно запускати \"locale-gen\")."
#. Type: select
#. Choices
......@@ -74,10 +74,10 @@ msgid ""
"speaker. These choices are based on which locales you have chosen to "
"generate."
msgstr ""
"В Debian багато пакунків використовують локалі для відображення "
"тексту на вибраній користувачем мові. Якщо ваша рідна мова не англійська, то "
"ви можете змінити локаль за замовчанням. Список складений із локалей "
"які ви вирішили згенерувати."
"В Debian багато пакунків використовують локалі для відображення тексту на "
"вибраній користувачем мові. Якщо ваша рідна мова не англійська, то ви можете "
"змінити локаль за замовчанням. Список складений із локалей які ви вирішили "
"згенерувати."
#. Type: select
#. Description
......@@ -89,7 +89,6 @@ msgid ""
"default locale."
msgstr ""
"Примітка: цей пункт вибирає мову для всієї системи. Якщо в вашій системі "
"працюють декілька користувачів, які не розмовляють мовою, яку ви вибрали, "
"то вони можуть зіткнутися із труднощами, і тому, можливо, вам краще "
"не встановлювати локаль за замовчанням."
"працюють декілька користувачів, які не розмовляють мовою, яку ви вибрали, то "
"вони можуть зіткнутися із труднощами, і тому, можливо, вам краще не "
"встановлювати локаль за замовчанням."
......@@ -24,7 +24,7 @@ msgstr ""
"Language-Team: Chinese/Simplified <i18n-translation@lists.linux.net.cn>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit"
"Content-Transfer-Encoding: 8bit\n"
#. Type: multiselect
#. Description
......@@ -50,8 +50,8 @@ msgid ""
"locale.gen', which you can also edit manually (you need to run `locale-gen' "
"afterwards)."
msgstr ""
"请选择需要生成的区域设置(locale)。选择结果将被保存在“/etc/locale.gen”,您可"
"对其进行手工编辑(您需要在编辑结束后运行“locale-gen”)。"
"请选择需要生成的区域设置(locale)。选择结果将被保存在“/etc/locale.gen”,您可"
"对其进行手工编辑(您需要在编辑结束后运行“locale-gen”)。"
#. Type: select
#. Choices
......
......@@ -108,8 +108,15 @@ endif
dh_compress -p$(curpass)
dh_fixperms -p$(curpass) -Xpt_chown
# Use this instead of -X to dh_fixperms so that we can use
# an unescaped regular expression.
find debian/$(curpass) -type f -regex '.*lib.*/ld.*so.*' \
# an unescaped regular expression. ld.so must be executable;
# libc.so and NPTL's libpthread.so print useful version
# information when executed.
# FIXME: LinuxThread's libpthread.so doesn't. It would be good
# to either fix that, or use a more robust method than searching
# for /tls/ in the path to identify NPTL.
find debian/$(curpass) -type f \( -regex '.*lib.*/ld.*so.*' \
-o -regex '.*lib.*/tls/.*libpthread.*so.*' \
-o -regex '.*lib.*/libc[.-].*so.*' \) \
-exec chmod a+x '{}' ';'
dh_makeshlibs -p$(curpass) -V "$(call xx,shlib_dep)"
......@@ -130,7 +137,9 @@ $(patsubst %,$(stamp)binaryinst_%,$(DEB_UDEB_PACKAGES)): $(stamp)debhelper
dh_strip -p$(curpass)
dh_compress -p$(curpass)
dh_fixperms -p$(curpass)
find debian/$(curpass) -type f -regex '.*lib.*/ld.*so.*' \
find debian/$(curpass) -type f \( -regex '.*lib.*/ld.*so.*' \
-o -regex '.*lib.*/tls/.*libpthread.*so.*' \
-o -regex '.*lib.*/libc[.-].*so.*' \) \
-exec chmod a+x '{}' ';'
# dh_makeshlibs -p$(curpass) -V "$(call xx,shlib_dep)"
dh_installdeb -p$(curpass)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment