]> granicus.if.org Git - taglib/log
taglib
17 years agoIgnore all autotools and cmake generated files.
Lukáš Lalinský [Sat, 10 Nov 2007 15:58:10 +0000 (15:58 +0000)]
Ignore all autotools and cmake generated files.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@734971 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoUse Unicode filenames on Windows.
Lukáš Lalinský [Sat, 10 Nov 2007 15:16:49 +0000 (15:16 +0000)]
Use Unicode filenames on Windows.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@734944 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoWavPack support.
Lukáš Lalinský [Tue, 6 Nov 2007 18:50:09 +0000 (18:50 +0000)]
WavPack support.

CCBUG:114982

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@733568 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDecode unsynch-encoded tag (ID3v2.3) and frame (ID3v2.4) data before parsing them.
Lukáš Lalinský [Tue, 6 Nov 2007 18:27:47 +0000 (18:27 +0000)]
Decode unsynch-encoded tag (ID3v2.3) and frame (ID3v2.4) data before parsing them.

BUG:138829

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@733565 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoUse separate DLL export macro for libtag_c and use the right DEFINE_SYMBOL.
Lukáš Lalinský [Mon, 5 Nov 2007 02:04:10 +0000 (02:04 +0000)]
Use separate DLL export macro for libtag_c and use the right DEFINE_SYMBOL.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@732908 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoRemove duplicate check for zlib and make zlib optional.
Lukáš Lalinský [Mon, 5 Nov 2007 01:58:56 +0000 (01:58 +0000)]
Remove duplicate check for zlib and make zlib optional.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@732907 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSVN_SILENT didn't mean for that to go in
Scott Wheeler [Sun, 21 Oct 2007 17:37:28 +0000 (17:37 +0000)]
SVN_SILENT didn't mean for that to go in

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@727756 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoMore TAGLIB_EXPORTs from Lukas.
Scott Wheeler [Sun, 21 Oct 2007 17:35:40 +0000 (17:35 +0000)]
More TAGLIB_EXPORTs from Lukas.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@727755 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoGot permission from all (non-trivial) contributors to dual license under the MPL.
Scott Wheeler [Wed, 10 Oct 2007 18:22:58 +0000 (18:22 +0000)]
Got permission from all (non-trivial) contributors to dual license under the MPL.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@723791 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoInstall header.
Scott Wheeler [Tue, 9 Oct 2007 17:46:48 +0000 (17:46 +0000)]
Install header.

CCMAIL:taglib-devel@kde.org

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@723447 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoNote OGA as the new extension for Ogg FLAC.
Scott Wheeler [Thu, 27 Sep 2007 21:41:12 +0000 (21:41 +0000)]
Note OGA as the new extension for Ogg FLAC.

(Note: for the bug report, this won't actually make things work in Amarok, in fact, this change
wasn't needed at all for it to work there.)

BUG:149987

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@717998 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoAdd a few checks to make sure that we don't blow up when trying to read zero-byte
Scott Wheeler [Thu, 27 Sep 2007 20:52:50 +0000 (20:52 +0000)]
Add a few checks to make sure that we don't blow up when trying to read zero-byte
values.

BUG:150250

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@717984 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agomore win32 fixes
Christian Ehrlicher [Sat, 15 Sep 2007 16:01:02 +0000 (16:01 +0000)]
more win32 fixes

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@712894 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agowin32 install fixes
Christian Ehrlicher [Sat, 15 Sep 2007 10:12:27 +0000 (10:12 +0000)]
win32 install fixes

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@712787 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agowe also need config.h on win32!
Christian Ehrlicher [Sat, 15 Sep 2007 09:03:22 +0000 (09:03 +0000)]
we also need config.h on win32!

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@712779 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoUnfix compiler warning. Compiler warnings good, BIC changes bad.
Kevin Krammer [Wed, 29 Aug 2007 23:33:30 +0000 (23:33 +0000)]
Unfix compiler warning. Compiler warnings good, BIC changes bad.
Make it a bit more obvious for the next poor fellow

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@706333 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFixing compiler warning about missing virtual destructor in class with virtual methods
Kevin Krammer [Wed, 29 Aug 2007 22:57:23 +0000 (22:57 +0000)]
Fixing compiler warning about missing virtual destructor in class with virtual methods

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@706328 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoStill need the C++ runtime for the C bindings on Solaris; need stdlib.h for various...
Adriaan de Groot [Mon, 27 Aug 2007 20:05:44 +0000 (20:05 +0000)]
Still need the C++ runtime for the C bindings on Solaris; need stdlib.h for various prototypes.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@705364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoNeed ostream for std::ostream in some STLs
Adriaan de Groot [Mon, 27 Aug 2007 19:41:38 +0000 (19:41 +0000)]
Need ostream for std::ostream in some STLs

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@705359 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoActually, forcing a particular STL implementation on the C bindings is a bad idea.
Adriaan de Groot [Mon, 27 Aug 2007 13:58:19 +0000 (13:58 +0000)]
Actually, forcing a particular STL implementation on the C bindings is a bad idea.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@705222 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDon't hardcode version
Laurent Montel [Mon, 27 Aug 2007 07:04:18 +0000 (07:04 +0000)]
Don't hardcode version

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@705092 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years ago Don't hardcode version number
Laurent Montel [Mon, 27 Aug 2007 07:02:29 +0000 (07:02 +0000)]
 Don't hardcode version number

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@705090 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoWant div_t
Adriaan de Groot [Tue, 21 Aug 2007 09:41:41 +0000 (09:41 +0000)]
Want div_t

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@702849 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix the automake build.
Scott Wheeler [Mon, 20 Aug 2007 11:59:02 +0000 (11:59 +0000)]
Fix the automake build.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@702323 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agomore exports from Serhiy Kachaniuk
Christian Ehrlicher [Sun, 19 Aug 2007 15:16:35 +0000 (15:16 +0000)]
more exports from Serhiy Kachaniuk

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@701861 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoThe C bindings use the C++ library which uses the C++ runtime. On Solaris, this doesn...
Adriaan de Groot [Thu, 16 Aug 2007 12:05:50 +0000 (12:05 +0000)]
The C bindings use the C++ library which uses the C++ runtime. On Solaris, this doesn't automatically mean that applications linking to the C bindings get the C++ runtime; add the C++ runtime explicitly to the bindings library so that the runtime gets pulled in by apps. aka. make-it-link.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@700769 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSomewhat hackish; might be better off as a downstream patch.
Adriaan de Groot [Thu, 16 Aug 2007 11:47:08 +0000 (11:47 +0000)]
Somewhat hackish; might be better off as a downstream patch.

Sun Studio fails on taglib because Map specializes in too many ways;
adding the class keyword reduces the specializations to one and it's ok,
but not all specializations of Map actually use T as a template class
parameter. So introduce a #define to switch that around.

Original patch from Stefan Teleman, pared down by me.

CCMAIL: kde-solaris@kde.org

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@700759 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoNot generate/install pkgconfig file on windows we can't use it
Laurent Montel [Tue, 14 Aug 2007 07:33:36 +0000 (07:33 +0000)]
Not generate/install pkgconfig file on windows we can't use it

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@699889 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoexported the rest of the classes (hope I got all)
Christian Ehrlicher [Sat, 11 Aug 2007 08:33:49 +0000 (08:33 +0000)]
exported the rest of the classes (hope I got all)

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@698836 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years ago(initial) win32 export support
Christian Ehrlicher [Sat, 11 Aug 2007 08:29:23 +0000 (08:29 +0000)]
(initial) win32 export support

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@698835 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix pc filesx
Laurent Montel [Sun, 29 Jul 2007 09:38:17 +0000 (09:38 +0000)]
Fix pc filesx

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@693853 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoWork around the fact that iTunes can't properly parse ID3v2.4 numerical genres.
Scott Wheeler [Thu, 19 Jul 2007 15:20:10 +0000 (15:20 +0000)]
Work around the fact that iTunes can't properly parse ID3v2.4 numerical genres.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689932 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDon't include empty strings in the text field list. This is a slight deviation
Scott Wheeler [Thu, 19 Jul 2007 00:44:37 +0000 (00:44 +0000)]
Don't include empty strings in the text field list.  This is a slight deviation
from the standard, but major editors (i.e. iTunes) mess up ID3v2 text frames with
null termination (which technically indicates a field with content, plus an empty
field).

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689739 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoThis didn't work in the case of an empty buffer read since subtracting 1
Scott Wheeler [Thu, 19 Jul 2007 00:04:37 +0000 (00:04 +0000)]
This didn't work in the case of an empty buffer read since subtracting 1
from a unsigned value, well, left a lot of room at the end.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689729 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoUpdate APE location after adding new tags.
Scott Wheeler [Wed, 18 Jul 2007 17:08:09 +0000 (17:08 +0000)]
Update APE location after adding new tags.

BUG:122700

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689608 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoMake sure that we only write the number of bytes that we read.
Scott Wheeler [Wed, 18 Jul 2007 16:41:10 +0000 (16:41 +0000)]
Make sure that we only write the number of bytes that we read.

BUG:122698

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689596 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix SV4 MPC file length. (Read the length at the correct offset.)
Scott Wheeler [Wed, 18 Jul 2007 15:50:52 +0000 (15:50 +0000)]
Fix SV4 MPC file length.  (Read the length at the correct offset.)

BUG:133959

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689576 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoAdd a string reading function to the frame base class and then use that to read strings
Scott Wheeler [Wed, 18 Jul 2007 15:23:18 +0000 (15:23 +0000)]
Add a string reading function to the frame base class and then use that to read strings
(thus making them unicode safe).

BUG:135123
BUG:135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123135123

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689562 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoBrian is right. It makes more sense to compute the alignment based on the offset...
Scott Wheeler [Wed, 18 Jul 2007 14:38:40 +0000 (14:38 +0000)]
Brian is right.  It makes more sense to compute the alignment based on the offset than the the beginning of the vector.

CCBUG:135123

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689545 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoPromote the int to a float so that the calcualtion works properly. Patch from Stephe...
Scott Wheeler [Wed, 18 Jul 2007 12:52:07 +0000 (12:52 +0000)]
Promote the int to a float so that the calcualtion works properly.  Patch from Stephen Booth.

BUG:143938

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689510 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSpelling fixes (first part of a patch from Lucas Lalinsky)
Scott Wheeler [Wed, 18 Jul 2007 12:48:24 +0000 (12:48 +0000)]
Spelling fixes (first part of a patch from Lucas Lalinsky)

CCBUG:138829

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689506 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix RVA setting / parsing. Patch from Stephen Booth.
Scott Wheeler [Wed, 18 Jul 2007 11:36:26 +0000 (11:36 +0000)]
Fix RVA setting / parsing.  Patch from Stephen Booth.

BUG:107025

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@689477 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoset correct install_name for os x
Martin Aumüller [Wed, 4 Jul 2007 10:12:22 +0000 (10:12 +0000)]
set correct install_name for os x

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@683171 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoRemove empty Xiph comments. Patch from Stephan Booth.
Scott Wheeler [Fri, 8 Jun 2007 11:02:49 +0000 (11:02 +0000)]
Remove empty Xiph comments.  Patch from Stephan Booth.

BUG:145532
CCMAIL:taglib-devel@kde.org

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@672863 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix another MSVC 2007 STL bug (our bug, not theirs) by not resizing a buffer in
Michael Pyne [Wed, 6 Jun 2007 03:56:38 +0000 (03:56 +0000)]
Fix another MSVC 2007 STL bug (our bug, not theirs) by not resizing a buffer in
writeBlock.  It was possible to resize it to 0 and although it would not be written to
again, the address would be taken of the buffer and MSVC 2007's STL implementation is
strict and will not allow the address of an empty buffer to be taken.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@672039 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agothe usual daily unbreak compilation
Dirk Mueller [Thu, 31 May 2007 20:51:55 +0000 (20:51 +0000)]
the usual daily unbreak compilation

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@670244 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDon't allow address of zero-length array to be taken to prevent run-time errors with
Michael Pyne [Sat, 26 May 2007 23:03:17 +0000 (23:03 +0000)]
Don't allow address of zero-length array to be taken to prevent run-time errors with
strict STL implementations.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@668610 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agothe usual "daily unbreak compilation"
Dirk Mueller [Fri, 4 May 2007 16:15:11 +0000 (16:15 +0000)]
the usual "daily unbreak compilation"

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@661112 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agowin32 compile / warnings--
Christian Ehrlicher [Sat, 28 Apr 2007 16:31:29 +0000 (16:31 +0000)]
win32 compile / warnings--

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@658841 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agowin32 compile / warnings--
Christian Ehrlicher [Sat, 28 Apr 2007 16:17:30 +0000 (16:17 +0000)]
win32 compile / warnings--

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@658838 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agodon't dereference d twice (CID 3444)
Stephan Kulow [Wed, 11 Apr 2007 20:35:37 +0000 (20:35 +0000)]
don't dereference d twice (CID 3444)

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@652702 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agodon't deref d twice (CID 3445)
Stephan Kulow [Wed, 11 Apr 2007 20:34:57 +0000 (20:34 +0000)]
don't deref d twice (CID 3445)

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@652701 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoCheck for CBR Info headers also.
Scott Wheeler [Sun, 1 Apr 2007 22:22:53 +0000 (22:22 +0000)]
Check for CBR Info headers also.

BUG:141681

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@649037 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSVN_SILENT too many emacs modes...
Scott Wheeler [Sun, 1 Apr 2007 22:21:44 +0000 (22:21 +0000)]
SVN_SILENT too many emacs modes...

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@649036 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoStrip nulls from the end of ID3v2 text fields.
Scott Wheeler [Sun, 1 Apr 2007 22:08:44 +0000 (22:08 +0000)]
Strip nulls from the end of ID3v2 text fields.

Simplified version of the patch from Xavier Duret.

BUG:141680

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@649032 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoAdd a comment about valid encoding types for ID3v2 tags.
Scott Wheeler [Sun, 1 Apr 2007 21:07:08 +0000 (21:07 +0000)]
Add a comment about valid encoding types for ID3v2 tags.

CCBUG:135122

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@649003 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSwitch to using a list of genres and checking for membership in there to avoid repeat...
Scott Wheeler [Sun, 1 Apr 2007 20:54:13 +0000 (20:54 +0000)]
Switch to using a list of genres and checking for membership in there to avoid repeated values.

Based on a patch from Xavier Duret.

BUG:141679

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@648998 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSVN_SILENT grr, accidentally inserted tabs
Scott Wheeler [Sun, 1 Apr 2007 20:49:15 +0000 (20:49 +0000)]
SVN_SILENT grr, accidentally inserted tabs

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@648997 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoStrip whitespaces from the end of ID3v1 fields on the way into TagLib.
Scott Wheeler [Sun, 1 Apr 2007 20:31:03 +0000 (20:31 +0000)]
Strip whitespaces from the end of ID3v1 fields on the way into TagLib.

BUG:141678

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@648986 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDelete APE tag.
Scott Wheeler [Sun, 1 Apr 2007 20:25:54 +0000 (20:25 +0000)]
Delete APE tag.

BUG:141682

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@648984 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix signature.
Scott Wheeler [Thu, 22 Mar 2007 17:30:29 +0000 (17:30 +0000)]
Fix signature.

BUG:143103

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@645468 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSVN_SILENT tabs -> spaces
Scott Wheeler [Mon, 26 Feb 2007 11:40:05 +0000 (11:40 +0000)]
SVN_SILENT tabs -> spaces

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@637415 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSVN_SILENT whoops, those were tabs
Scott Wheeler [Fri, 16 Feb 2007 16:15:55 +0000 (16:15 +0000)]
SVN_SILENT whoops, those were tabs

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@634206 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDelete d-pointer.
Scott Wheeler [Fri, 16 Feb 2007 14:29:40 +0000 (14:29 +0000)]
Delete d-pointer.

CCBUG:141682

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@634161 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoSVN_SILENT whoops
Scott Wheeler [Tue, 13 Feb 2007 10:19:20 +0000 (10:19 +0000)]
SVN_SILENT whoops

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633141 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoRead the frame data length as a synch-safe int. (Mostly only relevant to
Scott Wheeler [Tue, 13 Feb 2007 10:18:30 +0000 (10:18 +0000)]
Read the frame data length as a synch-safe int.  (Mostly only relevant to
compressed frames)

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633140 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoDon't try to parse invalid frames.
Scott Wheeler [Tue, 13 Feb 2007 09:55:56 +0000 (09:55 +0000)]
Don't try to parse invalid frames.

BUG:137635

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633133 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoAdd another sanity check -- don't let invalid frames try to allocate anything
Scott Wheeler [Tue, 13 Feb 2007 09:26:31 +0000 (09:26 +0000)]
Add another sanity check -- don't let invalid frames try to allocate anything
larger than the tag size.

BUG:140515

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633123 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoFix the byte ordering for UTF16BE
Scott Wheeler [Tue, 13 Feb 2007 08:40:58 +0000 (08:40 +0000)]
Fix the byte ordering for UTF16BE

BUG:135121

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633110 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoRework the read-only check so that it gets along better with networked file systems.
Scott Wheeler [Tue, 13 Feb 2007 07:21:45 +0000 (07:21 +0000)]
Rework the read-only check so that it gets along better with networked file systems.

CCMAIL:apoikos@gmail.com

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633092 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

17 years agoActually overwrite the value, as documented.
Scott Wheeler [Tue, 13 Feb 2007 05:43:10 +0000 (05:43 +0000)]
Actually overwrite the value, as documented.

BUG:141496

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@633078 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agocorrect docs
Scott Wheeler [Sun, 7 Jan 2007 15:33:21 +0000 (15:33 +0000)]
correct docs

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@620852 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoRevert this as this change isn't BC
Scott Wheeler [Sun, 7 Jan 2007 15:31:01 +0000 (15:31 +0000)]
Revert this as this change isn't BC

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@620850 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoA few spelling fixes, identified using krazy.
Brad Hards [Tue, 2 Jan 2007 11:54:03 +0000 (11:54 +0000)]
A few spelling fixes, identified using krazy.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@618883 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoRemove check as condition will always be true (checked in the if condition, above).
Jeff Mitchell [Sat, 23 Dec 2006 01:34:01 +0000 (01:34 +0000)]
Remove check as condition will always be true (checked in the if condition, above).

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@615877 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoFix warning
Laurent Montel [Thu, 7 Dec 2006 14:13:46 +0000 (14:13 +0000)]
Fix warning
Fix create HAVE_ZLIB variable

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@611286 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years ago-pedantic
André Wöbbeking [Mon, 27 Nov 2006 18:17:05 +0000 (18:17 +0000)]
-pedantic

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@608497 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agocopied gcc compile flags from FindKDE4Internal.cmake
André Wöbbeking [Mon, 27 Nov 2006 18:15:11 +0000 (18:15 +0000)]
copied gcc compile flags from FindKDE4Internal.cmake

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@608496 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoFix compile under windows
Laurent Montel [Fri, 10 Nov 2006 10:43:59 +0000 (10:43 +0000)]
Fix compile under windows

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@603814 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoUhh, no. Once again, TagLib is not part of KDE and is still used by a lot more things
Scott Wheeler [Sun, 15 Oct 2006 17:24:13 +0000 (17:24 +0000)]
Uhh, no.  Once again, TagLib is not part of KDE and is still used by a lot more things
than JuK, most of which still use Qt 3.  If you want to fix the defines to check for the version
that's fine.  I'm not too worried about it since the code still works with Qt 4.

CCMAIL:Tim Beaulen <tbscope@gmail.com>

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@595794 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoreplace uft8() with toUtf8() to silence warnings in Juk.
Tim Beaulen [Sun, 15 Oct 2006 08:04:12 +0000 (08:04 +0000)]
replace uft8() with toUtf8() to silence warnings in Juk.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@595632 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoDon't dereference the iterator before checking its validity.
Scott Wheeler [Thu, 12 Oct 2006 21:11:48 +0000 (21:11 +0000)]
Don't dereference the iterator before checking its validity.

CCMAIL:taglib-devel@kde.org

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@594940 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agofix make install - I guess examples shouldn't actually be installed
David Faure [Thu, 12 Oct 2006 10:50:45 +0000 (10:50 +0000)]
fix make install - I guess examples shouldn't actually be installed
(I see that Makefile.am required "make examples" explicitly)

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@594795 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoSVN_SILENT spacing
Scott Wheeler [Mon, 9 Oct 2006 02:51:52 +0000 (02:51 +0000)]
SVN_SILENT spacing

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@593781 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoChange the taglib build system to use relative include paths.
Brad Hards [Sun, 8 Oct 2006 06:28:19 +0000 (06:28 +0000)]
Change the taglib build system to use relative include paths.

This allows you to build taglib either as part of kdesupport
(i.e. with a source directory of kdesupport/) or by itself
(i.e. with a source directory of kdesupport/taglib/).

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@593544 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoDon't try to erase a key that isn't there.
Scott Wheeler [Sat, 7 Oct 2006 22:29:06 +0000 (22:29 +0000)]
Don't try to erase a key that isn't there.

BUG:134726

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@593479 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoMake the Xing header publically accessible.
Scott Wheeler [Sat, 7 Oct 2006 22:17:07 +0000 (22:17 +0000)]
Make the Xing header publically accessible.

WISH:133757

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@593475 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoCompile fix, correcting the include paths.
Brad Hards [Sat, 7 Oct 2006 11:45:35 +0000 (11:45 +0000)]
Compile fix, correcting the include paths.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@593292 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoFix install files
Laurent Montel [Thu, 5 Oct 2006 08:03:42 +0000 (08:03 +0000)]
Fix install files

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@592630 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoAdd support for examples
Laurent Montel [Wed, 4 Oct 2006 15:21:01 +0000 (15:21 +0000)]
Add support for examples

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@592362 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoAdd tests directory into build
Laurent Montel [Wed, 4 Oct 2006 15:12:47 +0000 (15:12 +0000)]
Add tests directory into build

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@592361 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoMake paths relative so that it works with running cmake on kdesupport/ or on kdesuppo...
David Faure [Fri, 29 Sep 2006 09:36:22 +0000 (09:36 +0000)]
Make paths relative so that it works with running cmake on kdesupport/ or on kdesupport/taglib.
Added toplevel cmake file so that kdesvn-build can build kdesupport using cmake.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@590077 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoFix compile
Laurent Montel [Wed, 27 Sep 2006 08:57:22 +0000 (08:57 +0000)]
Fix compile

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588867 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoForgot something. ;-)
Scott Wheeler [Sun, 24 Sep 2006 20:57:22 +0000 (20:57 +0000)]
Forgot something.  ;-)

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588077 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoThis is how it's done elsewhere.
Scott Wheeler [Sun, 24 Sep 2006 18:36:42 +0000 (18:36 +0000)]
This is how it's done elsewhere.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588044 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoAnd now get everything building again...
Scott Wheeler [Sun, 24 Sep 2006 18:10:30 +0000 (18:10 +0000)]
And now get everything building again...

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588037 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoAdd KDE 3.5 admin as external.
Scott Wheeler [Sun, 24 Sep 2006 17:28:14 +0000 (17:28 +0000)]
Add KDE 3.5 admin as external.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588027 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoThis is starting to look more sane.
Scott Wheeler [Sun, 24 Sep 2006 17:12:40 +0000 (17:12 +0000)]
This is starting to look more sane.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588022 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoadd this first, hopefully the next attempt at fixing the dirs will work
Scott Wheeler [Sun, 24 Sep 2006 17:10:42 +0000 (17:10 +0000)]
add this first, hopefully the next attempt at fixing the dirs will work

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588021 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

18 years agoOne more step. Wow, this was impressively broken.
Scott Wheeler [Sun, 24 Sep 2006 16:59:54 +0000 (16:59 +0000)]
One more step.  Wow, this was impressively broken.

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@588016 283d02a7-25f6-0310-bc7c-ecb5cbfe19da