X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/b53c9cea2902572822bbbece5bac236c1bbf846e..090c6f0a7ff49acb49be67433a7114ff8bfe5a70:/debian/libapt-pkg5.0.symbols diff --git a/debian/libapt-pkg5.0.symbols b/debian/libapt-pkg5.0.symbols index 20deaed77..e59fcb881 100644 --- a/debian/libapt-pkg5.0.symbols +++ b/debian/libapt-pkg5.0.symbols @@ -268,13 +268,10 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"pkgOrderList::DepUnPackPre(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::DepUnPackCrit(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::DepUnPackPreD(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::OrderCompareA(void const*, void const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::OrderCompareB(void const*, void const*)@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::OrderCritical()@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::VisitProvides(pkgCache::DepIterator, bool)@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::OrderConfigure()@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::VisitRProvides(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::VerIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::Me@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::DoRun()@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::Score(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 (c++)"pkgOrderList::AddLoop(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 @@ -369,7 +366,6 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"pkgPackageManager::pkgPackageManager(pkgDepCache*)@APTPKG_5.0" 0.8.0 (c++)"pkgPackageManager::~pkgPackageManager()@APTPKG_5.0" 0.8.0 (c++)"pkgProblemResolver::InstallProtect()@APTPKG_5.0" 0.8.0 - (c++)"pkgProblemResolver::This@APTPKG_5.0" 0.8.0 (c++)"pkgProblemResolver::pkgProblemResolver(pkgDepCache*)@APTPKG_5.0" 0.8.0 (c++)"pkgProblemResolver::~pkgProblemResolver()@APTPKG_5.0" 0.8.0 (c++)"debVersioningSystem::CmpFragment(char const*, char const*, char const*, char const*)@APTPKG_5.0" 0.8.0 @@ -835,9 +831,6 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"SummationImplementation::AddFD(FileFd&, unsigned long long)@APTPKG_5.0" 0.8.16~exp9 (c++|optional=deprecated,previous-inline)"FileFd::gzFd()@APTPKG_5.0" 0.8.0 ### CacheSet rework: making them real containers breaks bigtime the API (for the CacheSetHelper) - (c++)"APT::PackageContainer, std::allocator > >::empty() const@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::PackageContainer > >::empty() const@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::VersionContainer > >::empty() const@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::CacheSetHelper::canNotFindTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::CacheSetHelper::canNotFindRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::CacheSetHelper::canNotFindAllVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 @@ -847,29 +840,14 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"APT::CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const&, pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::CacheSetHelper::canNotFindCandInstVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::CacheSetHelper::canNotFindInstCandVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::PackageContainer, std::allocator > >::clear()@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::PackageContainer, std::allocator > >::insert(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::PackageContainer > >::clear()@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::PackageContainer > >::insert(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::VersionContainer > >::clear()@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::VersionContainer > >::insert(pkgCache::VerIterator const&)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::VersionContainerInterface::getCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::VersionContainerInterface::getInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 (c++)"APT::VersionContainerInterface::FromModifierCommandLine(unsigned short&, APT::VersionContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 (c++)"EDSP::WriteLimitedScenario(pkgDepCache&, _IO_FILE*, APT::PackageContainer, std::allocator > > const&, OpProgress*)@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 (c++)"typeinfo for APT::PackageContainerInterface@APTPKG_5.0" 0.8.16~exp9 (c++)"typeinfo for APT::VersionContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 (c++)"typeinfo name for APT::PackageContainerInterface@APTPKG_5.0" 0.8.16~exp9 (c++)"typeinfo name for APT::VersionContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 (c++)"vtable for APT::PackageContainerInterface@APTPKG_5.0" 0.8.16~exp9 (c++)"vtable for APT::VersionContainerInterface@APTPKG_5.0" 0.8.16~exp9 ### rework of the packagemanager rework @@ -1045,6 +1023,34 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_5.0" 1.1~exp4 (c++)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_5.0" 1.1~exp4 (c++)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&, bool)@APTPKG_5.0" 1.1~exp4 + (c++)"APT::VersionContainer > >::size() const@APTPKG_5.0" 1.1~exp9 + (c++)"APT::VersionContainer > >::~VersionContainer()@APTPKG_5.0" 1.1~exp9 + (c++)"APT::PackageContainer, std::allocator > >::empty() const@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::PackageContainer > >::empty() const@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::VersionContainer > >::empty() const@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::PackageContainer, std::allocator > >::clear()@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::PackageContainer, std::allocator > >::insert(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::PackageContainer > >::clear()@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::PackageContainer > >::insert(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::VersionContainer > >::clear()@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::VersionContainer > >::insert(pkgCache::VerIterator const&)@APTPKG_5.0" 0.8.16~exp9 + (c++)"typeinfo for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"typeinfo for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"typeinfo for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"vtable for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"vtable for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"vtable for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::VersionContainer > >::clear()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::VersionContainer > >::empty() const@APTPKG_5.0" 1.1~exp15 + (c++)"APT::VersionContainer > >::insert(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::VersionContainer > >::size() const@APTPKG_5.0" 1.1~exp15 + (c++)"APT::VersionContainer > >::~VersionContainer()@APTPKG_5.0" 1.1~exp15 + (c++)"typeinfo for APT::VersionContainer > >@APTPKG_5.0" 1.1~exp15 + (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_5.0" 1.1~exp15 + (c++)"vtable for APT::VersionContainer > >@APTPKG_5.0" 1.1~exp15 ### all the hashes are belong to us # (c++|optional=inline)"Hashes::AddFD(int, unsigned long long, bool, bool, bool, bool)@APTPKG_5.0" 0.8.16~exp6 # (c++|optional=inline)"Hashes::AddFD(FileFd&, unsigned long long, bool, bool, bool, bool)@APTPKG_5.0" 0.8.16~exp9 @@ -1195,8 +1201,6 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"APT::VersionContainerInterface::operator=(APT::VersionContainerInterface const&)@APTPKG_5.0" 1.1~exp9 (c++)"APT::VersionContainerInterface::~VersionContainerInterface()@APTPKG_5.0" 1.1~exp9 (c++)"APT::VersionContainerInterface::VersionContainerInterface()@APTPKG_5.0" 1.1~exp9 - (c++)"APT::VersionContainer > >::size() const@APTPKG_5.0" 1.1~exp9 - (c++)"APT::VersionContainer > >::~VersionContainer()@APTPKG_5.0" 1.1~exp9 (c++)"ChangeOwnerAndPermissionOfFile(char const*, char const*, char const*, char const*, unsigned int)@APTPKG_5.0" 1.1~exp9 (c++)"CommandLine::CommandLine()@APTPKG_5.0" 1.1~exp9 (c++)"Configuration::FindVector(char const*, std::__cxx11::basic_string, std::allocator > const&, bool) const@APTPKG_5.0" 1.1~exp9 @@ -1458,16 +1462,6 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"typeinfo name for SigVerify@APTPKG_5.0" 1.1~exp9 (c++)"typeinfo name for TranslationsCopy@APTPKG_5.0" 1.1~exp9 (c++)"URI::ArchiveOnly(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(APT::Configuration::Compressor&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(char const*&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgCache::GrpIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgCache::PkgIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgCache::RlsFileIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgCache::VerIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgDPkgPM::Item&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgIndexFile*&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector >::emplace_back(pkgTagSection::Tag&&)@APTPKG_5.0" 1.1~exp9 - (c++)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&)@APTPKG_5.0" 1.1~exp9 (c++)"vtable for APT::PackageUniverse@APTPKG_5.0" 1.1~exp9 (c++)"vtable for debDebianSourceDirIndex@APTPKG_5.0" 1.1~exp9 (c++)"vtable for debDebPkgFileIndex@APTPKG_5.0" 1.1~exp9 @@ -1492,8 +1486,67 @@ libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# (c++)"vtable for pkgUserTagSection@APTPKG_5.0" 1.1~exp9 (c++)"vtable for SigVerify@APTPKG_5.0" 1.1~exp9 (c++)"vtable for TranslationsCopy@APTPKG_5.0" 1.1~exp9 +### dpkg selection state changer & general dpkg interfacing + (c++)"APT::StateChanges::clear()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::empty() const@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Error()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Hold()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Hold(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Install()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Install(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::operator=(APT::StateChanges&&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Purge()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Purge(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Remove()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Remove(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Save(bool)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::~StateChanges()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::StateChanges()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::StateChanges(APT::StateChanges&&)@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Unhold()@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::Unhold(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgSystem::ArchitecturesSupported[abi:cxx11]() const@APTPKG_5.0" 1.1~exp15 + (c++)"pkgSystem::MultiArchSupported() const@APTPKG_5.0" 1.1~exp15 + (c++)"metaIndex::IsArchitectureSupported(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp15 +### misc stuff + (c++)"RemoveFile(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgOrderList::OrderCompareA(pkgCache::Package*, pkgCache::Package*)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgOrderList::OrderCompareB(pkgCache::Package*, pkgCache::Package*)@APTPKG_5.0" 1.1~exp15 + (c++)"CommandLine::DispatchArg(CommandLine::Dispatch const*, bool)@APTPKG_5.0" 1.1~exp15 + (c++)"Configuration::MoveSubTree(char const*, char const*)@APTPKG_5.0" 1.1~exp15 + (c++)"GetTempDir(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp15 + (c++)"HashString::usable() const@APTPKG_5.0" 1.1~exp15 + (c++)"IndexTarget::OptionBool(IndexTarget::OptionKeys) const@APTPKG_5.0" 1.1~exp12 + (c++)"pkgDepCache::GetCandidateVersion(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgDepCache::Policy::GetPriority(pkgCache::VerIterator const&, bool)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgPackageManager::CheckRBreaks(pkgCache::PkgIterator const&, pkgCache::DepIterator, char const*)@APTPKG_5.0" 1.1~exp11 + (c++)"pkgPolicy::GetPriority(pkgCache::VerIterator const&, bool)@APTPKG_5.0" 1.1~exp9 + (c++)"pkgSourceList::AddVolatileFiles(CommandLine&, std::vector >*)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgSourceList::AddVolatileFile(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp15 + (c++)"pkgVersionMatch::VersionMatches(pkgCache::VerIterator)@APTPKG_5.0" 1.1~exp9 + (c++)"GetSrvRecords(std::__cxx11::basic_string, std::allocator >, int, std::vector >&)@APTPKG_5.0" 1.1~exp15 + (c++)"GetSrvRecords(std::__cxx11::basic_string, std::allocator >, std::vector >&)@APTPKG_5.0" 1.1~exp15 + (c++)"PopFromSrvRecs(std::vector >&)@APTPKG_5.0" 1.1~exp15 + (c++)"SrvRec::operator==(SrvRec const&) const@APTPKG_5.0" 1.1~exp15 ### symbol versioning: APTPKG_5.0@APTPKG_5.0 1.1~exp9 +### gcc artifacts + (c++)"void std::vector >::emplace_back(APT::Configuration::Compressor&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(char const*&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::GrpIterator*&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::PkgIterator*&&)@APTPKG_5.0" 1.1~exp9 +# (c++|optional=std)"void std::vector >::emplace_back(pkgCache::RlsFileIterator*&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::VerIterator*&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgDPkgPM::Item&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgIndexFile*&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgTagSection::Tag&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&)@APTPKG_5.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(long&&)@APTPKG_5.0" 1.1~exp15 + (c++|optional=std)"void std::vector >::emplace_back(metaIndex*&&)@APTPKG_5.0" 1.1~exp15 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::DepIterator*&&)@APTPKG_5.0" 1.1~exp15 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::PrvIterator*&&)@APTPKG_5.0" 1.1~exp15 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::VerIterator&&)@APTPKG_5.0" 1.1~exp15 + (c++|optional=std)"SrvRec* std::__move_merge<__gnu_cxx::__normal_iterator > >, SrvRec*, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, SrvRec*, __gnu_cxx::__ops::_Iter_less_iter)@APTPKG_5.0" 1.1~exp15 ### try to ignore std:: template instances (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@APTPKG_5.0$" 0.8.0 (c++|regex|optional=std)"^(void |)std::[^ ]+<.+ >::(_|~).+\(.*\)@APTPKG_5.0$" 0.8.0