Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-06-20 11:09:49

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Odrobinę bardziej profesjonalne tworzenie pakietów

Przy pracach nad Hagiem potrzebuję zrobić kilka pakietów w bardziej profesjonalny sposób. Mam jednak przy tym kilka wątpliwości, których Podręcznik dla nowych opiekunów pakietów nie rozwiał. Jest na DUG-u kilku opiekunów, a może nawet jakiś deweloper, może ktoś mi pomoże. :)

Na początek takie pytanie: czy format daty w changelogu jest ściśle określony? Czy musi to być koniecznie np.:

Kod:

Sun, 04 Nov 2007 00:12:56 +0100

czy może być standardowy format date'a, np.:

Kod:

Fri Jun 20 11:05:34 CEST 2008

?


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#2  2008-06-20 11:23:13

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Nie jestem opiekunem ani deweloperem ;p ale z tego co wiem format daty w changelogu jest ściśle określony, tylko nie pamiętam jaki.


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#3  2008-06-20 11:40:20

  AgayKhan - Członek DUG

AgayKhan
Członek DUG
Skąd: Płock
Zarejestrowany: 2006-03-21
Serwis

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

To ja się podłączę z prostszym pytaniem.
Mam aplikację do obsługi kamerki internetowej, wymaga ona dirac. Spakietowałem sobie dirac, ale chciałbym z niego zrobić trzy oddzielne pakiety: dirac-bin libdirac0 i libdirac-dev, dirac-doc
dirac-bin :

Kod:

/usr/bin/dirac_instrumentation
/usr/bin/dirac_encoder
/usr/bin/UYVYtoYUV422
/usr/bin/create_dirac_testfile.pl
/usr/bin/UYVYtoRGB
/usr/bin/YUV420toYUV422
/usr/bin/RGBtoYUV422
/usr/bin/RGBtoBMP
/usr/bin/YUV444toRGB
/usr/bin/RGBtoYUV444
/usr/bin/YUV411toRGB
/usr/bin/dirac_decoder
/usr/bin/BMPtoRGB
/usr/bin/YUV422toYUV420
/usr/bin/RGBtoUYVY
/usr/bin/YUV422toRGB
/usr/bin/YUV422toUYVY
/usr/bin/RGBtoYUV420
/usr/bin/YUV420toRGB
/usr/bin/RGBtoYUV411

libdirac0

Kod:

/usr/lib/libdirac_encoder.so.0
/usr/lib/libdirac_encoder.so.0.0.0
/usr/lib/libdirac_decoder.so.0
/usr/lib/libdirac_decoder.so.0.0.0

libdirac-dev

Kod:

/usr/include/dirac/libdirac_encoder
/usr/include/dirac/libdirac_encoder/dirac_encoder.h
/usr/include/dirac/libdirac_decoder
/usr/include/dirac/libdirac_decoder/decoder_types.h
/usr/include/dirac/libdirac_decoder/dirac_parser.h
/usr/include/dirac/libdirac_common
/usr/include/dirac/libdirac_common/common_types.h
/usr/include/dirac/libdirac_common/dirac-stdint.h
/usr/include/dirac/libdirac_common/dirac_inttypes.h
/usr/include/dirac/libdirac_common/dirac_types.h
/usr/lib/libdirac_decoder.a
/usr/lib/pkgconfig
/usr/lib/pkgconfig/dirac.pc
/usr/lib/libdirac_decoder.la
/usr/lib/libdirac_encoder.la
/usr/lib/libdirac_encoder.a
/usr/lib/libdirac_decoder.la

dirac-doc wsio w dokumentacji
I problem:
Nie potrafię rozdzielić dirac na te pakiety. Modyfikacja libdirac0.install nie działa. Powstają tylko puste pliki .deb libdirac0 ma tylko katalog /usr/share/.


born to be root
linux register user #362473

Offline

 

#4  2008-06-20 11:58:49

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

harry666t: dzięki. Format jest taki, jak w pierwszym przykładzie. To będę musiał sobie podrasować date w skrypcie...
AgayKhan: pokaż plik rules. (Niecne podłączanie się do mojego wątku przemilczę :P)

Ostatnio edytowany przez azhag (2008-06-20 11:59:38)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#5  2008-06-20 12:07:46

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

opiekunem nie jestem, ale przypomne ze jest narzedzie do zarzadzania changelogiem - debchange ... moze sie przyda ...

Ostatnio edytowany przez bercik (2008-06-20 12:09:12)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#6  2008-06-20 12:18:54

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Niestety nie tym razem, chcę dopiero changelog utworzyć (a z pewnych względów nie chcę tego robić za pomocą dh_make).
Ale dzięki, przyda się na przyszłość.

PS. Zanim ktoś następny napisze "wprawdzie nie jestem opiekunem/dewelopere", powiedzmy że miałem na myśli kogoś, kto się zna na budowaniu "profesjonalnych" pakietów. ;)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#7  2008-06-20 12:34:18

  AgayKhan - Członek DUG

AgayKhan
Członek DUG
Skąd: Płock
Zarejestrowany: 2006-03-21
Serwis

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Dobra, już mniej więcej wiem, gdzie był błąd.
dh_make robiło takie coś w rules

Kod:

binary-arch: build install
    dh_testdir
    dh_testroot
    dh_installchangelogs ChangeLog
    dh_installdocs
    dh_installexamples
#    dh_install
#    dh_installmenu
#    dh_installdebconf    
#    dh_installlogrotate
#    dh_installemacsen
#    dh_installpam
#    dh_installmime
#    dh_installinit
#    dh_installcron
#    dh_installinfo
    dh_installman
    dh_link
    dh_strip
    dh_compress
    dh_fixperms
#    dh_perl
#    dh_python
#    dh_makeshlibs
    dh_installdeb
    dh_shlibdeps
    dh_gencontrol
    dh_md5sums
    dh_builddeb

Po zmianie na

Kod:

binary-arch: build install
    dh_testdir
    dh_testroot
    dh_installchangelogs ChangeLog
    dh_installdocs
    dh_installexamples
    dh_install
#    dh_installmenu
#    dh_installdebconf    
#    dh_installlogrotate
#    dh_installemacsen
#    dh_installpam
#    dh_installmime
#    dh_installinit
#    dh_installcron
#    dh_installinfo
    dh_installman
    dh_link
    dh_strip
    dh_compress
    dh_fixperms
#    dh_perl
#    dh_python
    dh_makeshlibs
    dh_installdeb
    dh_shlibdeps
    dh_gencontrol
    dh_md5sums
    dh_builddeb

działa.
Opcja instalacji była wywalona z rules, dlatego nie instalowało.
Dzięki azhag, jesteś wielki.
Przepakietowałem sobie ffmpeg z obsługo dirac i wykrywa jako zależnośc libdirac0. Super.

Ostatnio edytowany przez AgayKhan (2008-06-20 13:05:07)


born to be root
linux register user #362473

Offline

 

#8  2008-06-20 21:03:47

  harry666t - Członek DUG

harry666t
Członek DUG
Zarejestrowany: 2007-01-28

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

azhag napisał(-a):

PS. Zanim ktoś następny napisze "wprawdzie nie jestem opiekunem/deweloperem"(...)

Czytujesz slashdota? (: tam połowa postów w dziale "your rights online" zaczyna się od "IANAL, but..." :P


[ /\/\/\ o_0 ----->>>       Ascii Art Userbar User ]

"steal and steal and steal some more and give it to all your friends and keep on stealin'"
- Reznor

Offline

 

#9  2008-06-20 21:08:56

  Bodzio - Ojciec Założyciel

Bodzio
Ojciec Założyciel
Skąd: Gorlice
Zarejestrowany: 2004-04-17
Serwis

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Patryk -> Prezu jest opiekunem


Debian jest lepszy niż wszystkie klony
Linux register users: #359018
http://www.freebsd.org/gifs/powerlogo.gif
Beskid Niski

Offline

 

#10  2008-06-20 21:11:38

  AgayKhan - Członek DUG

AgayKhan
Członek DUG
Skąd: Płock
Zarejestrowany: 2006-03-21
Serwis

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

qnapi i kadu ?


born to be root
linux register user #362473

Offline

 

#11  2008-06-20 21:14:21

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Następne pytanie tyczy się pola Replaces w pliku control. Wg wymienionego w pierwszym poście podręcznika pliki z pakietu "zastępującego" nadpiszą pliki "zastępowanego". Jasna sprawa.
Co jednak, jeśli odwrócimy kolejność instalacji? Pakiet "zastępujący" jest już zaisntalowany, do niego chcemy doinstalować "zastępowany". Czy w takim wypadku konfliktujący plik z "zastępowanego" pozostanie nie zainstalowany? Logicznie rzecz ujmując tak będzie, ale wolę się upewnić, zanim się natyram na darmo.

PS. Jeszcze takie głupie pytanie — czy można zakomentować linię w control lub innych (poza rules ;]) debianowych plikach?



kurcze, nic nie było jak zaczynałem pisać, a teraz nagle 3 posty :)

harry666t napisał(-a):

azhag napisał(-a):

PS. Zanim ktoś następny napisze "wprawdzie nie jestem opiekunem/deweloperem"(...)

Czytujesz slashdota? (: tam połowa postów w dziale "your rights online" zaczyna się od "IANAL, but..." :P

nie czytuję :)
co znaczy AL?

Bodzio napisał(-a):

Patryk -> Prezu jest opiekunem

wiem, ale nie chciałem zgłaszać nikogo na ochotnika ;)

AgayKhan napisał(-a):

qnapi i kadu ?

nie tylko :) (nie ma to jak prywatność :P)

Ostatnio edytowany przez azhag (2008-06-20 21:20:53)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#12  2008-06-20 22:21:12

  Ventrue - Użytkownik

Ventrue
Użytkownik
Skąd: Lubin
Zarejestrowany: 2007-08-16

Re: Odrobinę bardziej profesjonalne tworzenie pakietów


The Linux philosophy is 'Laugh in the face of danger'. Oops. Wrong One. 'Do it yourself'. Yes, that's it.
Linus Torvalds

Offline

 

#13  2008-07-07 22:41:52

  AgayKhan - Członek DUG

AgayKhan
Członek DUG
Skąd: Płock
Zarejestrowany: 2006-03-21
Serwis

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

A ja sie pochwalę, iż w debian-multimedia pojawił sie dirac, prawie identycznie spakowany jak mój. Tylko zamiast dirac-bin jest dirac.


born to be root
linux register user #362473

Offline

 

#14  2008-07-09 09:30:05

  Prezu - Moderator

Prezu
Moderator
Skąd: Vancouver, BC
Zarejestrowany: 2005-06-02

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Wcześniej nie widziałem tego wątku, dlatego nie pisałem nic.

Azhag, w changelog'u data ma być w formacie zdefiniowanym w RFC822 -- czyli takim, jaki zwraca:

Kod:

$ date -R

Jeśli używasz Sida, to zainstaluj paczkę debian-policy. Jeśli testing, lub stable, to wejdź na http://debian.org/devel i tam masz Debian Policy (Zasady Polityki Debiana jak to przetłumaczono :). O formatach wszystkich plików esencjonalnych dla paczki źródłowej tam wszystko znajdziesz. Np. o formacie daty jest mowa w punkcie "4.4 Debian changelog: debian/changelog".

Co do komentarzy w debian/control, to nie wolno. Ale w debian/rules jak najbardziej -- ten plik to zwykły plik z regułami dla make'a, więc obowiązują dokładnie te same zasady co dla Makefile'i.

W pozostałych plikach, jak na przykład debian/pakiet.install, debian/pakiet.postrm itd, to zależy. Np. ten drugi (postrm/prerm/postinst itd) to zwykłe skrypty powłoki. Ale .install to już plik dla jednego z narzędzi debhelpera (w tym przypadku dh_install -- korzystanie z narzędzi debhelpera jest oczywiście opcjonalne -- można robić sobie na piechotę to co za nas robią dh_*, ale widzę w powyższych przykładach, że lubicie dh_*, ja z resztą też :). Co do formatu plików dla debhelpera, to trzeba poczytać manuale dla poszczególnych dh_whatever -- ja też nie znam ich wszystkich na pamięć i zaglądam do mana od czasu do czasu. Zwróć uwagę, że pliki .install jest plikiem dla dh_install, który jest opcjonalnym narzędziem. Nie jest to plik esencjonalny dla paczki źródłowej, dlatego jego dokumentacji szukasz nie w Debian Policy, tylko dokumentacji debhelpera (tu konkretnie dh_install(1)).

Jak by się zdarzyło pytanie do mnie, a bym nie odpowiadał (może mi umknąć post), to szturchnięcie na PMa proszę. :)

Offline

 

#15  2008-07-09 09:52:41

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Prezu napisał(-a):

Azhag, w changelog'u data ma być w formacie zdefiniowanym w RFC822 — czyli takim, jaki zwraca:

Kod:

$ date -R

lol, a ja wyskrobałem jakiegoś potwora:

Kod:

LC_ALL=en_EN date +"%a, %d %b %Y %T %z"

:D

Dzięki wielkie, cenne informacje. O zajrzeniu do Debian Policy nawet nie pomyślałem. :)

Jakbym miał jakieś pytania jeszcze, nie omieszkam Cię zmolestować przez PM. :)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#16  2008-07-09 10:12:30

  Prezu - Moderator

Prezu
Moderator
Skąd: Vancouver, BC
Zarejestrowany: 2005-06-02

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Spoko. :)

Jeszcze apropos changelog'a — zainstaluj sobie pakiet devscripts. Jest tam m. in. tulik dch. Służy on do zarządzania chagnelog'iem właśnie. W katalogu ze źródłami paczki, gdy dodajesz wpis dla nowej wersji upstreamowej:

Kod:

$ dch -v nowa_wersja

Lub jeśli puszczasz nową rewizję tej samej wersji:

Kod:

$ dch -i

Jak widzisz, sam tworzy nowe wpisy. :) Jeśli chcesz np. tylko uaktualnić datę do ostatniego wpisu (bo ostatnią modyfikację zrobiłeś np. kilka dni temu) to

Kod:

$ dch -e

To służy do edycji ostatniego wpisu, ale przy okazji "odświeża" datę.

Zmienną środowiskową EDITOR wybierasz edytor. Jeśli EDITOR nie jest ustawiony, to użyty zostanie skrypt /usr/bin/sensible-editor do wyboru edytora.

EDIT: Aha, ustaw sobie jeszcze mienną DEBEMAIL (najlepiej w .bashrc, czy co tam używasz), bo inaczej dch nie będzie wiedział jakie imię, nazwisko, email wpisać. Szczegóły w dch(1).

Ostatnio edytowany przez Prezu (2008-07-09 10:15:02)

Offline

 

#17  2008-07-13 14:48:09

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

A jak to jest z nazwami pakietów? Który z wymienionych jest nowszy: pakiet_0.1 czy pakiet_0.1-0dev1337?
Czy taki (0.1, bez sufiksu) schemat nazywania finalnych wersji pakietów przejdzie, czy muszę im nadawać wersję 0.1-1?

Edit: głupie pytanie, oczywiscie, że muszę dać 0.1-1...

Ostatnio edytowany przez azhag (2008-07-13 17:02:29)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#18  2008-07-14 14:38:51

  Prezu - Moderator

Prezu
Moderator
Skąd: Vancouver, BC
Zarejestrowany: 2005-06-02

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

To co jest po "-" to rewizja debianowa. Ma ona najmniejsze znaczenie w wersji paczki dla apta. Jeśli jej nie ma, to tak jak by była równa 0. Czyli 0.1 to tak na prawdę 0.1-0, a to znaczy, że 0.1 jest starsze niż 0.1-0dev1337. Można nie dać wcale rewizji debianowej, ale zalecane jest jej dodanie zaczynając zawsze od 1. Normalnie to powinny być kolejne liczby naturalne. Ale w niektórych wypadkach jest inaczej, np. NMU (Non Maintainer Upload), czy poprawki bezpieczeństwa dla stable.

Wszystkie pola wersji paczki debianowej i ich wzajemnej relacji jest w policy w punkcie 5.6.12. Warto przyjrzeć się np. znaczeniu tyldy ("~") w wersji. :) Przydaje się release candidate'ach, czy betach. Sam w Kadu wykorzystywałem.

Ostatnio edytowany przez Prezu (2008-07-14 14:39:58)

Offline

 

#19  2008-07-14 15:14:04

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

O, jak zwykle wielkie dzięki. Muszę się wreszcie wczytać w Policy. :)

PS. Tak trochę a propos wersji, ostatnio jeden z DD pokpiwał z wersji pakietów w Ubuntu:

Kod:

matt@krypton:~$ dpkg -s flashplugin-nonfree | grep Version
Version: 10.0.1.218+10.0.0.525ubuntu1~hardy1+really9.0.124.0ubuntu2

to jest dopiero wersja. ;)

Ostatnio edytowany przez azhag (2008-07-14 15:15:24)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#20  2008-07-14 15:18:58

  Prezu - Moderator

Prezu
Moderator
Skąd: Vancouver, BC
Zarejestrowany: 2005-06-02

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

hehehehe pewnie nawet opiekun tego nie ogarnia po kilku tygodniach od ostatniego uploadu... :D

Offline

 

#21  2008-07-29 13:11:55

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Jak najłatwiej wymusić nadpisanie chronionego pliku innego pakietu (conffiles)? Pole Replaces z control wydaje się nie mieć "wystarczającej mocy".

Pewnie da się przez stosowny skrypt w postinst, ale może istnieje mniej barbarzyńska metoda.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#22  2008-08-02 10:31:54

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

na razie udało mi się ustalić, że powinienem się dpkg-divert zainteresować
ale jego obsłuiga jeszcze jest dla mnie tajemnicą :)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#23  2008-08-19 15:39:04

  Prezu - Moderator

Prezu
Moderator
Skąd: Vancouver, BC
Zarejestrowany: 2005-06-02

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Osobiście tego nie przerobiłem. :] Mogę tylko się domyślać. Anyway, jeśli jeszcze nie rozwiązałeś tego problemu to zagadaj do mnie na jabbera.

Offline

 

#24  2008-08-19 16:14:04

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Już to przerobiłem — problem leżał w tym miejscu, że ów plik już raz był dywersyfikowany, kolejna próba dywersyfikacji wywalała błąd.
Kombinowałem z napisaniem reguły dla dpkg-divert, która najpierw usuwa starą dywersyfikację i dopiero tworzy nową, ale dałem za wygraną po nastej próbie.

Ostatecznie uznałem, że patchowanie felernego pakietu będzie prostszym rozwiązaniem. :)

Ostatnio edytowany przez azhag (2008-08-19 16:14:34)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#25  2008-12-20 08:49:41

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Odrobinę bardziej profesjonalne tworzenie pakietów

Zna ktoś jakiś dokument dotyczący alternatyw w Debianie? update-alternatives(8) nie w pełni mnie usatysfakcjonował. W Debian Policy, Debian Reference, Debian Developer's Reference i Debian New Maintainers' Guide właściwie nic nie znalazłem.

Najbardziej interesuje mnie zasada nadawania priorytetów. Ich zakres, metodologia nadawania, znaczenie (co np. znaczy ujemny priorytet?). Innymi informacjami też bym nie pogardził :)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)