From d6bbfc5ada5cd68773428504220691c578e927c3 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 17 Jul 2018 22:23:21 -0400 Subject: [PATCH 01/86] elput: Add include flie for elogind support --- src/lib/elput/elput_private.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/elput/elput_private.h b/src/lib/elput/elput_private.h index 692dd4a83e..16fe305c5b 100644 --- a/src/lib/elput/elput_private.h +++ b/src/lib/elput/elput_private.h @@ -28,6 +28,10 @@ # include # endif +# ifdef HAVE_ELOGIND +# include +# endif + #ifndef ELPUT_NODEFS # ifdef ELPUT_DEFAULT_LOG_COLOR # undef ELPUT_DEFAULT_LOG_COLOR From 04b2fedee98691b280c53c873c000bf00d8f8909 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 17 Jul 2018 22:23:42 -0400 Subject: [PATCH 02/86] elput: Fix ifdef check to work for elogind also --- src/lib/elput/elput_manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elput/elput_manager.c b/src/lib/elput/elput_manager.c index 93f39ea261..987e73759b 100644 --- a/src/lib/elput/elput_manager.c +++ b/src/lib/elput/elput_manager.c @@ -2,7 +2,7 @@ static Elput_Interface *_ifaces[] = { -#ifdef HAVE_SYSTEMD +#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND) &_logind_interface, #endif NULL, From 90831021bcab2ad2c09855459dd2b23279723ca6 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 17 Jul 2018 22:24:32 -0400 Subject: [PATCH 03/86] elput: Fix ifdef check to support elogind also --- src/lib/elput/elput_logind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elput/elput_logind.c b/src/lib/elput/elput_logind.c index 82ce11ff16..40e483ebe5 100644 --- a/src/lib/elput/elput_logind.c +++ b/src/lib/elput/elput_logind.c @@ -1,6 +1,6 @@ #include "elput_private.h" -#ifdef HAVE_SYSTEMD +#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND) static void _logind_session_active_cb_free(void *data EINA_UNUSED, void *event) From d842aed3132eb298b5ecf76d41d1517bce309801 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 17 Jul 2018 22:24:49 -0400 Subject: [PATCH 04/86] efl: Add support to elput for using elogind instead of systemd @feature --- configure.ac | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/configure.ac b/configure.ac index 65f695c35d..17455a35ca 100644 --- a/configure.ac +++ b/configure.ac @@ -3934,8 +3934,22 @@ EFL_INTERNAL_DEPEND_PKG([ELPUT], [eina]) EFL_DEPEND_PKG([ELPUT], [LIBINPUT], [libinput >= 1.7.0 xkbcommon >= 0.3.0 libudev]) +AC_ARG_ENABLE([elogind], + [AS_HELP_STRING([--enable-elogind],[enable elogind support.@<:@default=disabled@:>@])], + [ + if test "x${enableval}" = "xyes" ; then + want_elogind="yes" + else + want_elogind="no" + fi + ], [ + want_elogind="yes" + ]) + EFL_OPTIONAL_DEPEND_PKG([ELPUT], [${want_systemd}], [SYSTEMD], [libsystemd]) +EFL_OPTIONAL_DEPEND_PKG([ELPUT], [${want_elogind}], [ELOGIND], [libelogind]) EFL_ADD_FEATURE([ELPUT], [systemd-logind], [${want_systemd}]) +EFL_ADD_FEATURE([ELPUT], [elogind], [${want_elogind}]) EFL_ADD_LIBS([ELPUT], [-lm]) From 422960b0e6206132e2e42d95eba4abafb827fd69 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Thu, 29 Nov 2018 07:11:57 -0500 Subject: [PATCH 05/86] elput: Add elogind as meson option --- meson_options.txt | 6 ++++++ src/lib/elput/meson.build | 3 +++ 2 files changed, 9 insertions(+) diff --git a/meson_options.txt b/meson_options.txt index 296b3b88d8..30eed934a4 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -333,3 +333,9 @@ option('native-arch-optimization', value: true, description: 'Flag for enabling architecture native optimizations' ) + +option('elogind', + type : 'boolean', + value : false, + description : 'use elogind support' +) diff --git a/src/lib/elput/meson.build b/src/lib/elput/meson.build index c812ad7759..2aa3590d2b 100644 --- a/src/lib/elput/meson.build +++ b/src/lib/elput/meson.build @@ -22,6 +22,9 @@ elput_deps += dependency('libudev') if get_option('systemd') elput_deps += systemd endif +if get_option('elogind') + elput_deps += dependency('libelogind') +endif elput_lib = library('elput', elput_src, pub_eo_file_target, From 416c71332d5c15b921a93801e0ad46e071d7a967 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Sun, 4 Nov 2018 18:56:54 +0100 Subject: [PATCH 06/86] eolian_aux: add initial eolian_aux APIs eolian_aux is a set of auxiliary APIs for eolian that build on top of the existing eolian APIs but do not belong in the main library. --- src/Makefile_Eolian.am | 6 +- src/lib/eolian/Eolian_Aux.h | 180 +++++++++++++++++++ src/lib/eolian/eolian_aux.c | 294 ++++++++++++++++++++++++++++++++ src/lib/eolian/meson.build | 10 +- src/tests/eolian/data_aux/a.eo | 12 ++ src/tests/eolian/data_aux/b.eo | 2 + src/tests/eolian/data_aux/c.eo | 9 + src/tests/eolian/eolian_aux.c | 146 ++++++++++++++++ src/tests/eolian/eolian_suite.c | 1 + src/tests/eolian/eolian_suite.h | 1 + src/tests/eolian/meson.build | 1 + 11 files changed, 658 insertions(+), 4 deletions(-) create mode 100644 src/lib/eolian/Eolian_Aux.h create mode 100644 src/lib/eolian/eolian_aux.c create mode 100644 src/tests/eolian/data_aux/a.eo create mode 100644 src/tests/eolian/data_aux/b.eo create mode 100644 src/tests/eolian/data_aux/c.eo create mode 100644 src/tests/eolian/eolian_aux.c diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am index f2c6667822..aa2f2344e8 100644 --- a/src/Makefile_Eolian.am +++ b/src/Makefile_Eolian.am @@ -4,7 +4,7 @@ lib_LTLIBRARIES += lib/eolian/libeolian.la installed_eolianmainheadersdir = $(includedir)/eolian-@VMAJ@ -dist_installed_eolianmainheaders_DATA = lib/eolian/Eolian.h +dist_installed_eolianmainheaders_DATA = lib/eolian/Eolian.h lib/eolian/Eolian_Aux.h lib_eolian_libeolian_la_SOURCES = \ lib/eolian/eo_lexer.c \ @@ -36,7 +36,8 @@ lib_eolian_libeolian_la_SOURCES = \ lib/eolian/database_var.c \ lib/eolian/database_var_api.c \ lib/eolian/database_validate.c \ - lib/eolian/database_check.c + lib/eolian/database_check.c \ + lib/eolian/eolian_aux.c lib_eolian_libeolian_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @EOLIAN_CFLAGS@ \ -DPACKAGE_DATA_DIR=\"$(datadir)/eolian\" @@ -109,6 +110,7 @@ tests/eolian/eolian_suite tests_eolian_eolian_suite_SOURCES = \ tests/eolian/eolian_parsing.c \ +tests/eolian/eolian_aux.c \ tests/eolian/eolian_static.c \ tests/eolian/eolian_generation.c \ tests/eolian/eolian_generated_future.c \ diff --git a/src/lib/eolian/Eolian_Aux.h b/src/lib/eolian/Eolian_Aux.h new file mode 100644 index 0000000000..4313d49d6d --- /dev/null +++ b/src/lib/eolian/Eolian_Aux.h @@ -0,0 +1,180 @@ +#ifndef EOLIAN_AUX_H +#define EOLIAN_AUX_H + +#include + +#ifdef EAPI +# undef EAPI +#endif + +#ifdef _WIN32 +# ifdef EFL_BUILD +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI +# endif +# else +# define EAPI __declspec(dllimport) +# endif +#else +# ifdef __GNUC__ +# if __GNUC__ >= 4 +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +# else +# define EAPI +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @page eolian_aux_main Eolian Auxiliary Library (BETA) + * + * @date 2018 (created) + * + * @section toc Table of Contents + * + * @li @ref eolian_aux_main_intro + * + * @section eolian_main_intro Introduction + * + * This is the Eolian auxiliary library, providing API to support generators + * and other utilities which do not fit into the primary Eolian library. All + * these APIs are built on top of the core Eolian APIs. + * + * Recommended reading: + * + * @li @ref Eolian + * + * @addtogroup Eolian + * @{ + */ + +#ifdef EFL_BETA_API_SUPPORT + +/** + * @brief Build reverse children hierarchy of an Eolian state. + * + * The point of this is basically to figure out reverse inheritance. The + * keys of the returned hash will be class pointers and the values will + * be lists. If classes A and B both inherit from C, they will be in C's + * list after lookup. + * + * You are responsible for freeing this hash using standard eina_hash_free(). + * + * @param[in] state the Eolian state. + * @return a hash containing the hierarchy. + * + * @ingroup Eolian + */ +EAPI Eina_Hash *eolian_aux_state_class_children_find(const Eolian_State *state); + +/** + * @brief Get all APIs that are usable on the class. + * + * The @p funcs parameter will contain the functions, while @p events will + * contain events. The initial items in the lists will be the funcs and + * events defined by the class itself, followed by those defined in the + * classes it inherits from. + * + * Funcs will contain implement pointers, events will contain event pointers. + * + * The @p ownfuncs param defines how many of the list's items are the classes' + * own API. Same happens with @p ownevs for events. + * + * You are responsible for freeing the returned lists but not their contents. + * If you want to skip either of the lists, pass NULL. + * + * @param[in] klass the class. + * @param[out] funcs the functions list reference, NULL if not used. + * @param[out] events the event list reference, NULL if not used. + * @param[out] ownfuncs the number of own functions, NULL if not used. + * @param[out] ownevs the number of own events, NULL if not used. + * @return the total number of items written into either list. + * + * @ingroup Eolian + */ +EAPI size_t eolian_aux_class_callables_get(const Eolian_Class *klass, Eina_List **funcs, Eina_List **events, size_t *ownfuncs, size_t *ownevs); + +/** + * @brief Get all implementations of a function in a state. + * + * Given a function and a childen hierarchy from + * eolian_aux_state_class_children_find(), this will func + * all implementations of that function in the system. This + * is useful for various utilities. You need to free the list + * but not the contents. + * + * @param[in] func the function. + * @param[in] class_children the children hierarchy. + * @return a list of implementations. + * + * @ingroup Eolian + */ +EAPI Eina_List *eolian_aux_function_all_implements_get(const Eolian_Function *func, Eina_Hash *class_children); + +/** + * @brief Get previous implementation in the inheritance hierarchy. + * + * This performs a depth-first search in the hierarchy, starting with the + * specific given implementation. Once it is found, this parent implementation + * is returned. + * + * @param[in] impl the implementation. + * @return the parent implementation. + * + * @ingroup Eolian + */ +EAPI const Eolian_Implement *eolian_aux_implement_parent_get(const Eolian_Implement *impl); + +/** + * @brief Get documentation for an implementaiton. + * + * This first checks if the implementation has documentation for the given + * type. If so, it is returned; if not, parent implementations as specified + * in eolian_aux_implement_parent_get() are searched and the first one to + * have the documentation is used. + * + * @param[in] impl the implementation. + * @param[in] ftype the function type (method, property, getter, setter). + * @return the documentation or NULL. + * + * @ingroup Eolian + */ +EAPI const Eolian_Documentation *eolian_aux_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type ftype); + +/** + * @brief Get documentation fallback for an implementation. + * + * This is used when the implement does not have a "common" documentation + * block. If the given implement is a getter and not a setter, this returns + * the getter's documentation. If it's a setter but not a getter, it returns + * the setter documentation. Otherwise, it returns NULL. + * + * @param[in] impl the implementation. + * @return the documentation or NULL. + * + * @ingroup Eolian + */ +EAPI const Eolian_Documentation *eolian_aux_implement_documentation_fallback_get(const Eolian_Implement *impl); + +#endif + +/** + * @} + */ + +#ifdef __cplusplus +} // extern "C" { +#endif + +#undef EAPI +#define EAPI + +#endif diff --git a/src/lib/eolian/eolian_aux.c b/src/lib/eolian/eolian_aux.c new file mode 100644 index 0000000000..a66c02c58e --- /dev/null +++ b/src/lib/eolian/eolian_aux.c @@ -0,0 +1,294 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "Eolian_Aux.h" + +static void +_hashlist_free(void *ptr) +{ + eina_list_free((Eina_List *)ptr); +} + +EAPI Eina_Hash * +eolian_aux_state_class_children_find(const Eolian_State *state) +{ + if (!state) + return NULL; + + Eina_Hash *h = eina_hash_pointer_new(_hashlist_free); + Eina_Iterator *itr = eolian_state_classes_get(state); + if (!itr) + return h; + + const Eolian_Class *cl; + EINA_ITERATOR_FOREACH(itr, cl) + { + const Eolian_Class *icl = eolian_class_parent_get(cl); + if (icl) + eina_hash_set(h, &icl, eina_list_append(eina_hash_find(h, &icl), cl)); + Eina_Iterator *iitr = eolian_class_extensions_get(cl); + EINA_ITERATOR_FOREACH(iitr, icl) + { + eina_hash_set(h, &icl, + eina_list_append(eina_hash_find(h, &icl), cl)); + } + eina_iterator_free(iitr); + } + eina_iterator_free(itr); + + return h; +} + +static size_t +_callables_find_body(const Eolian_Class *pcl, + Eina_List **funcs, Eina_List **events, + Eina_Hash *written) +{ + Eina_Iterator *iitr; + const Eolian_Implement *imp; + const Eolian_Event *ev; + size_t total = 0; + + if (!funcs) + goto justevs; + + iitr = eolian_class_implements_get(pcl); + EINA_ITERATOR_FOREACH(iitr, imp) + { + const Eolian_Function *ifn = + eolian_implement_function_get(imp, NULL); + if (eina_hash_find(written, &ifn)) + continue; + *funcs = eina_list_append(*funcs, imp); + ++total; + } + eina_iterator_free(iitr); + + if (!events) + return total; +justevs: + iitr = eolian_class_events_get(pcl); + EINA_ITERATOR_FOREACH(iitr, ev) + { + /* events do not override */ + *events = eina_list_append(*events, ev); + ++total; + } + eina_iterator_free(iitr); + return total; +} + +static size_t +_callables_find(const Eolian_Class *cl, Eina_List **funcs, + Eina_List **events, Eina_Hash *written) +{ + size_t total = 0; + if (!funcs && !events) + return total; + + const Eolian_Class *pcl = eolian_class_parent_get(cl); + if (pcl) + total += _callables_find_body(pcl, funcs, events, written); + + Eina_Iterator *itr = eolian_class_extensions_get(cl); + EINA_ITERATOR_FOREACH(itr, pcl) + total += _callables_find_body(pcl, funcs, events, written); + + return total; +} + +EAPI size_t +eolian_aux_class_callables_get(const Eolian_Class *klass, + Eina_List **funcs, Eina_List **events, + size_t *ownfuncs, size_t *ownevs) +{ + size_t of = 0, oe = 0, total = 0; + if (!klass || (!funcs && !events)) + { + if (ownfuncs) *ownfuncs = of; + if (ownevs) *ownevs = oe; + return total; + } + + Eina_Hash *written = eina_hash_pointer_new(NULL); + if (funcs) + { + const Eolian_Implement *imp; + Eina_Iterator *itr = eolian_class_implements_get(klass); + EINA_ITERATOR_FOREACH(itr, imp) + { + const Eolian_Function *ifn = + eolian_implement_function_get(imp, NULL); + eina_hash_set(written, &ifn, ifn); + *funcs = eina_list_append(*funcs, imp); + ++of; + } + eina_iterator_free(itr); + } + if (events) + { + const Eolian_Event *ev; + Eina_Iterator *itr = eolian_class_events_get(klass); + EINA_ITERATOR_FOREACH(itr, ev) + { + /* no need to mark in written, events do not override */ + *events = eina_list_append(*events, ev); + ++oe; + } + } + if (ownfuncs) *ownfuncs = of; + if (ownevs) *ownevs = oe; + total = of + oe; + total += _callables_find(klass, funcs, events, written); + eina_hash_free(written); + return total; +} + +static void +_all_impls_find(Eina_List **l, const Eolian_Class *cl, + const Eolian_Function *func, Eina_Hash *got, + Eina_Hash *children) +{ + if (eina_hash_find(got, &cl)) + return; + eina_hash_add(got, &cl, cl); + Eina_Iterator *itr = eolian_class_implements_get(cl); + const Eolian_Implement *imp; + EINA_ITERATOR_FOREACH(itr, imp) + { + const Eolian_Function *ofn = eolian_implement_function_get(imp, NULL); + if (ofn == func) + { + *l = eina_list_append(*l, imp); + break; + } + } + eina_iterator_free(itr); + Eina_List *tl; + const Eolian_Class *icl; + EINA_LIST_FOREACH(eina_hash_find(children, &cl), tl, icl) + _all_impls_find(l, icl, func, got, children); +} + +EAPI Eina_List * +eolian_aux_function_all_implements_get(const Eolian_Function *func, + Eina_Hash *class_children) +{ + if (!class_children) + return NULL; + + const Eolian_Class *cl = eolian_implement_class_get( + eolian_function_implement_get(func)); + + Eina_List *ret = NULL; + Eina_Hash *got = eina_hash_pointer_new(NULL); + _all_impls_find(&ret, cl, func, got, class_children); + + eina_hash_free(got); + return ret; +} + +static const Eolian_Implement * _parent_impl_find( + const char *fulln, const Eolian_Class *cl); + +static const Eolian_Implement * +_parent_impl_find_body(const Eolian_Class *icl, const char *fulln) +{ + Eina_Iterator *iitr = eolian_class_implements_get(icl); + const Eolian_Implement *iimpl; + EINA_ITERATOR_FOREACH(iitr, iimpl) + { + if (eolian_implement_name_get(iimpl) == fulln) + { + eina_iterator_free(iitr); + return iimpl; + } + } + eina_iterator_free(iitr); + return _parent_impl_find(fulln, icl); + } + +static const Eolian_Implement * +_parent_impl_find(const char *fulln, const Eolian_Class *cl) +{ + const Eolian_Implement *iret = NULL; + const Eolian_Class *icl = eolian_class_parent_get(cl); + if (icl) + iret = _parent_impl_find_body(icl, fulln); + if (iret) + return iret; + Eina_Iterator *itr = eolian_class_extensions_get(cl); + EINA_ITERATOR_FOREACH(itr, icl) + { + iret = _parent_impl_find_body(icl, fulln); + if (iret) + { + eina_iterator_free(itr); + return iret; + } + } + eina_iterator_free(itr); + return NULL; +} + +EAPI const Eolian_Implement * +eolian_aux_implement_parent_get(const Eolian_Implement *impl) +{ + return _parent_impl_find(eolian_implement_name_get(impl), + eolian_implement_implementing_class_get(impl)); +} + +static const Eolian_Documentation * +_parent_documentation_find(const Eolian_Implement *impl, + Eolian_Function_Type ftype) +{ + const Eolian_Implement *pimpl = eolian_aux_implement_parent_get(impl); + if (!pimpl) + return NULL; + + const Eolian_Documentation *pdoc = + eolian_implement_documentation_get(pimpl, ftype); + if (!pdoc) + return _parent_documentation_find(pimpl, ftype); + + return pdoc; +} + +EAPI const Eolian_Documentation * +eolian_aux_implement_documentation_get(const Eolian_Implement *impl, + Eolian_Function_Type ftype) +{ + const Eolian_Documentation *ret = + eolian_implement_documentation_get(impl, ftype); + + if (ret) + return ret; + + const Eolian_Class *icl = eolian_implement_implementing_class_get(impl); + if (eolian_implement_class_get(impl) == icl) + return NULL; + + const Eolian_Implement *oimp = eolian_function_implement_get( + eolian_implement_function_get(impl, NULL)); + if ((ftype == EOLIAN_PROP_GET) && !eolian_implement_is_prop_get(oimp)) + return NULL; + if ((ftype == EOLIAN_PROP_SET) && !eolian_implement_is_prop_set(oimp)) + return NULL; + + return _parent_documentation_find(impl, ftype); +} + +EAPI const Eolian_Documentation * +eolian_aux_implement_documentation_fallback_get(const Eolian_Implement *impl) +{ + Eina_Bool ig = eolian_implement_is_prop_get(impl), + is = eolian_implement_is_prop_set(impl); + + if (ig && !is) + return eolian_implement_documentation_get(impl, EOLIAN_PROP_GET); + else if (is && !ig) + return eolian_implement_documentation_get(impl, EOLIAN_PROP_SET); + + return NULL; +} diff --git a/src/lib/eolian/meson.build b/src/lib/eolian/meson.build index 2be0197212..083d5cdaa5 100644 --- a/src/lib/eolian/meson.build +++ b/src/lib/eolian/meson.build @@ -31,7 +31,8 @@ eolian_src = [ 'database_expr_api.c', 'database_var.c', 'database_var_api.c', -'database_validate.c' +'database_validate.c', +'eolian_aux.c' ] eolian_lib = library('eolian', eolian_src, @@ -50,6 +51,11 @@ eolian = declare_dependency( eolian_include_dir = join_paths(dir_data, 'eolian', 'include') -install_headers('Eolian.h', +eolian_header_src = [ +'Eolian.h', +'Eolian_Aux.h' +] + +install_headers(eolian_header_src, install_dir : dir_package_include ) diff --git a/src/tests/eolian/data_aux/a.eo b/src/tests/eolian/data_aux/a.eo new file mode 100644 index 0000000000..f610fcb998 --- /dev/null +++ b/src/tests/eolian/data_aux/a.eo @@ -0,0 +1,12 @@ +class A(C) { + methods { + baz {} + } + events { + test2: void; + } + implements { + C.foo; + C.bar; + } +} diff --git a/src/tests/eolian/data_aux/b.eo b/src/tests/eolian/data_aux/b.eo new file mode 100644 index 0000000000..3b00c23308 --- /dev/null +++ b/src/tests/eolian/data_aux/b.eo @@ -0,0 +1,2 @@ +class B(C) { +} diff --git a/src/tests/eolian/data_aux/c.eo b/src/tests/eolian/data_aux/c.eo new file mode 100644 index 0000000000..999c5cda38 --- /dev/null +++ b/src/tests/eolian/data_aux/c.eo @@ -0,0 +1,9 @@ +class C { + methods { + foo {} + bar {} + } + events { + test: void; + } +} diff --git a/src/tests/eolian/eolian_aux.c b/src/tests/eolian/eolian_aux.c new file mode 100644 index 0000000000..b7f263f483 --- /dev/null +++ b/src/tests/eolian/eolian_aux.c @@ -0,0 +1,146 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#include "eolian_suite.h" + +EFL_START_TEST(eolian_aux_children) +{ + Eolian_State *eos = eolian_state_new(); + + fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/b.eo")); + + Eina_Hash *chash = eolian_aux_state_class_children_find(eos); + fail_if(!chash); + + const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "A"); + fail_if(!acl); + + const Eolian_Class *bcl = eolian_state_class_by_name_get(eos, "B"); + fail_if(!bcl); + + const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "C"); + fail_if(!ccl); + + Eina_List *cl = eina_hash_find(chash, &ccl); + fail_if(!cl); + + fail_if(eina_list_count(cl) != 2); + if (eina_list_nth(cl, 0) == bcl) + fail_if(eina_list_nth(cl, 1) != acl); + else + { + fail_if(eina_list_nth(cl, 0) != acl); + fail_if(eina_list_nth(cl, 1) != bcl); + } + + eina_hash_free(chash); + eolian_state_free(eos); +} +EFL_END_TEST + +EFL_START_TEST(eolian_aux_implements) +{ + Eolian_State *eos = eolian_state_new(); + + fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/b.eo")); + + Eina_Hash *chash = eolian_aux_state_class_children_find(eos); + fail_if(!chash); + + const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "C"); + fail_if(!ccl); + + const Eolian_Function *fn = eolian_class_function_by_name_get(ccl, "foo", EOLIAN_METHOD); + fail_if(!fn); + + Eina_List *imps = eolian_aux_function_all_implements_get(fn, chash); + fail_if(!imps); + fail_if(eina_list_count(imps) != 2); + + eina_list_free(imps); + eina_hash_free(chash); + eolian_state_free(eos); +} +EFL_END_TEST + +EFL_START_TEST(eolian_aux_callables) +{ + Eolian_State *eos = eolian_state_new(); + + fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); + + const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "A"); + fail_if(!acl); + + Eina_List *funcs = NULL; + Eina_List *evs = NULL; + size_t ofuncs = 0; + size_t oevs = 0; + + size_t clbls = eolian_aux_class_callables_get(acl, &funcs, &evs, &ofuncs, &oevs); + fail_if(clbls != 5); + fail_if(ofuncs != 3); + fail_if(oevs != 1); + fail_if(eina_list_count(funcs) != 3); + fail_if(eina_list_count(evs) != 2); + + eina_list_free(funcs); + eina_list_free(evs); + eolian_state_free(eos); +} +EFL_END_TEST + +EFL_START_TEST(eolian_aux_implparent) +{ + Eolian_State *eos = eolian_state_new(); + + fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); + + const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "A"); + fail_if(!acl); + + const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "C"); + fail_if(!ccl); + + const Eolian_Function *fn = eolian_class_function_by_name_get(ccl, "foo", EOLIAN_METHOD); + fail_if(!fn); + + const Eolian_Implement *impl = NULL; + Eina_Iterator *itr = eolian_class_implements_get(acl); + EINA_ITERATOR_FOREACH(itr, impl) + { + if (eolian_implement_function_get(impl, NULL) == fn) + break; + } + eina_iterator_free(itr); + + fail_if(!impl); + fail_if(eolian_implement_function_get(impl, NULL) != fn); + + fail_if(eolian_implement_class_get(impl) != ccl); + fail_if(eolian_implement_implementing_class_get(impl) != acl); + + const Eolian_Implement *pimpl = eolian_aux_implement_parent_get(impl); + fail_if(eolian_implement_class_get(pimpl) != ccl); + fail_if(eolian_implement_implementing_class_get(pimpl) != ccl); + + eolian_state_free(eos); +} +EFL_END_TEST + +void eolian_aux_test(TCase *tc) +{ + tcase_add_test(tc, eolian_aux_children); + tcase_add_test(tc, eolian_aux_implements); + tcase_add_test(tc, eolian_aux_callables); + tcase_add_test(tc, eolian_aux_implparent); +} diff --git a/src/tests/eolian/eolian_suite.c b/src/tests/eolian/eolian_suite.c index 3b6de0a68d..3229be33ce 100644 --- a/src/tests/eolian/eolian_suite.c +++ b/src/tests/eolian/eolian_suite.c @@ -14,6 +14,7 @@ static const Efl_Test_Case etc[] = { { "Eolian Parsing", eolian_parsing_test}, { "Eolian Static Analysis", eolian_static_test}, { "Eolian Generation", eolian_generation_test}, + { "Eolian Aux", eolian_aux_test}, { NULL, NULL } }; diff --git a/src/tests/eolian/eolian_suite.h b/src/tests/eolian/eolian_suite.h index d40b1df924..3b3279ebd5 100644 --- a/src/tests/eolian/eolian_suite.h +++ b/src/tests/eolian/eolian_suite.h @@ -4,6 +4,7 @@ #include #include "../efl_check.h" void eolian_parsing_test(TCase *tc); +void eolian_aux_test(TCase *tc); void eolian_static_test(TCase *tc); void eolian_generation_test(TCase *tc); diff --git a/src/tests/eolian/meson.build b/src/tests/eolian/meson.build index 4c6102a78d..a453974cc0 100644 --- a/src/tests/eolian/meson.build +++ b/src/tests/eolian/meson.build @@ -4,6 +4,7 @@ priv_eo_files = [ eolian_test_src = [ 'eolian_parsing.c', +'eolian_aux.c', 'eolian_generation.c', 'eolian_generated_future.c', 'eolian_suite.c', From 3813b158795fe79e1680f23729bb5a385569fa51 Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Thu, 29 Nov 2018 14:09:09 -0500 Subject: [PATCH 07/86] elementary: Support using no frame object Summary: Creation of the frame object can lead to significant delays in window creation time on limited-power devices (watches, mobile, tv, etc). This patch allows setting an environment variable and config value in order to completely skip frame object creation. This shaves about 50ms from startup on an i7 8600k, so should be more substantial a saves on limited-power devices. Reviewers: kimcinoo, ManMower Reviewed By: ManMower Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7305 --- src/lib/elementary/efl_ui_win.c | 33 +++++++++++++++++++++++++++------ src/lib/elementary/elm_config.c | 11 +++++++++++ src/lib/elementary/elm_priv.h | 6 ++++-- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 712238e04b..535316119e 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -4623,7 +4623,8 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool if (!efl_finalized_get(sd->obj)) return; if (EINA_LIKELY(sd->type == ELM_WIN_FAKE)) return; - CRI("Window has no frame object!"); + if (!_elm_config->win_no_border) + CRI("Window has no frame object!"); return; } @@ -4640,6 +4641,8 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool sd->csd.need_menu = EINA_FALSE; sd->csd.need_indicator = EINA_FALSE; } + else if (_elm_config->win_no_border) + sd->csd.need_borderless = EINA_TRUE; else { sd->csd.need_shadow = sd->csd.need && (!sd->maximized); @@ -5606,7 +5609,9 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Efl_U case EFL_UI_WIN_NAVIFRAME_BASIC: element = "naviframe"; break; default: break; } - _elm_win_frame_add(sd, element, style); + + if (!_elm_config->win_no_border) + _elm_win_frame_add(sd, element, style); if (sd->indimode != EFL_UI_WIN_INDICATOR_OFF) _indicator_add(sd); @@ -7330,13 +7335,29 @@ _elm_win_bg_set(Efl_Ui_Win_Data *sd, Eo *bg) return EINA_FALSE; if (elm_widget_is_legacy(sd->obj)) { - if (!edje_object_part_swallow(sd->frame_obj, "elm.swallow.background", bg)) - return EINA_FALSE; + if (!_elm_config->win_no_border) + { + if (!edje_object_part_swallow(sd->frame_obj, "elm.swallow.background", bg)) + return EINA_FALSE; + } + else + { + if (!edje_object_part_swallow(sd->legacy.edje, "elm.swallow.background", bg)) + return EINA_FALSE; + } } else { - if (!edje_object_part_swallow(sd->frame_obj, "efl.background", bg)) - return EINA_FALSE; + if (!_elm_config->win_no_border) + { + if (!edje_object_part_swallow(sd->frame_obj, "efl.background", bg)) + return EINA_FALSE; + } + else + { + if (!edje_object_part_swallow(sd->legacy.edje, "efl.background", bg)) + return EINA_FALSE; + } } efl_gfx_entity_visible_set(bg, 1); efl_gfx_size_hint_align_set(bg, -1, -1); diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c index 13e80fd5da..6102ec6dcb 100644 --- a/src/lib/elementary/elm_config.c +++ b/src/lib/elementary/elm_config.c @@ -535,6 +535,7 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, offline, T_UCHAR); ELM_CONFIG_VAL(D, T, powersave, T_INT); ELM_CONFIG_VAL(D, T, drag_anim_duration, T_DOUBLE); + ELM_CONFIG_VAL(D, T, win_no_border, T_UCHAR); #undef T #undef D #undef T_INT @@ -1868,6 +1869,7 @@ _config_load(Eina_Bool on_flush) _elm_config->popup_scrollable = EINA_FALSE; _elm_config->entry_select_allow = EINA_TRUE; _elm_config->drag_anim_duration = 0.0; + _elm_config->win_no_border = EINA_FALSE; _env_get(); } @@ -2077,6 +2079,8 @@ _elm_config_reload_do(Eina_Bool on_flush) KEEP_VAL(entry_select_allow); KEEP_VAL(drag_anim_duration); + KEEP_VAL(win_no_border); + _elm_config->priv = prev_config->priv; _config_free(prev_config); } @@ -2516,6 +2520,10 @@ _config_update(void) _elm_key_bindings_update(_elm_config, tcfg); IFCFGEND + IFCFG(0x0010) + _elm_config->win_no_border = EINA_FALSE; + IFCFGEND + /** * Fix user config for current ELM_CONFIG_EPOCH here. **/ @@ -2892,6 +2900,9 @@ _env_get(void) s = getenv("EFL_UI_DND_DRAG_ANIM_DURATION"); if (s) _elm_config->drag_anim_duration = _elm_atof(s); + + s = getenv("ELM_WIN_NO_BORDER"); + if (s) _elm_config->win_no_border = EINA_TRUE; } static void diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h index 0c34917b88..6b181e8ffb 100644 --- a/src/lib/elementary/elm_priv.h +++ b/src/lib/elementary/elm_priv.h @@ -166,8 +166,8 @@ struct _Efl_Ui_Theme_Data * the users config doesn't need to be wiped - simply new values need * to be put in */ -# define ELM_CONFIG_FILE_GENERATION 0x0012 -# define ELM_CONFIG_VERSION_EPOCH_OFFSET 16 +# define ELM_CONFIG_FILE_GENERATION 0x0013 +# define ELM_CONFIG_VERSION_EPOCH_OFFSET 17 # define ELM_CONFIG_VERSION ((ELM_CONFIG_EPOCH << ELM_CONFIG_VERSION_EPOCH_OFFSET) | \ ELM_CONFIG_FILE_GENERATION) /* NB: profile configuration files (.src) must have their @@ -353,6 +353,7 @@ struct _Elm_Config_Flags Eina_Bool icon_theme : 1; Eina_Bool entry_select_allow : 1; // unused Eina_Bool drag_anim_duration : 1; + Eina_Bool win_no_border : 1; }; struct _Elm_Config @@ -498,6 +499,7 @@ struct _Elm_Config Eina_Bool offline; int powersave; double drag_anim_duration; + unsigned char win_no_border; /* Not part of the EET file */ Eina_Bool is_mirrored : 1; From d90bb5d28cef646daf3eb3dbd5524755b272e8f2 Mon Sep 17 00:00:00 2001 From: Lauro Moura Date: Thu, 29 Nov 2018 21:04:37 -0200 Subject: [PATCH 08/86] csharp: Change to new class API. Summary: As discussed in T7204: - Eo Interfaces/mixins -> C# Interfaces with concrete class implementations - Eo Regular/Abstracts -> Proper C# classes - Added some new generators and helper methods. - Refactored the class generator, splitting into helper methods Eo handles now are stored only in the "root" class in any given inheritance tree (generally, Efl.Object), and accessible to each child. Methods also are defined in a single place instead of repeatedly generated in everyfile, reducing the size of the generated .dll from 30MB to around 4.5MB. Mixins are generated as C# interfaces but any regular class it inherits from is lost, as we can't have interfaces inheriting from regular classes. This will be dealt with in a later commit. Summary of API Changes: - Merged Inherit/Concrete classes. (These suffixes disappear from regular classes). - Interface still have implementations with 'Concrete' suffix for when they are returned from methods. - Removed 'I' from interface names. - Removed interfaces for regular/abstract Eo classes. - Concrete classes for interfaces/mixins hold the event argument struct. - Removed '_' from classes, enums, structs, etc, as indicated in C# naming conventions. - Namespaces are now Camel.Cased. - Renamed IWrapper's raw_handle/raw_klass to NativeHandle/NativeClass Also renamed the test classes as after the namespace change, the test namespace Test can conflict with the helper Test namespace. (And use more meaningful names than Test.Testing...) Also Fixes T7336 by removing a deprecated example and adding efl_loop_timer_example to build system. Fixes T7451 by hiding the class_get DllImports and renaming the IWrapper fields. The native handlers are used in the manual binding. Still need to work: - As there are still some events names clashing (e.g. Efl.Ui.Bg with "resize" from Efl.Gfx.Entity and Efl.Gfx.Image), Events are currently declared on the interface and implemented "namespaced" in the classes, requiring the cast to the interface to access the event. - The Mixin Conundrum. Mixin inheritance will be dealt in a future commit. Depends on D7260 Reviewers: segfaultxavi, vitor.sousa, felipealmeida, Jaehyun_Cho Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T7451, T7336 Differential Revision: https://phab.enlightenment.org/D7262 --- src/Makefile_Efl_Mono.am | 30 +- .../eolian/mono/async_function_definition.hh | 8 +- src/bin/eolian_mono/eolian/mono/blacklist.hh | 2 + .../eolian/mono/enum_definition.hh | 5 +- src/bin/eolian_mono/eolian/mono/events.hh | 193 ++- .../eolian/mono/function_definition.hh | 28 +- .../eolian/mono/function_helpers.hh | 38 +- .../eolian/mono/function_pointer.hh | 17 +- .../eolian/mono/function_registration.hh | 2 +- src/bin/eolian_mono/eolian/mono/helpers.hh | 157 +++ src/bin/eolian_mono/eolian/mono/klass.hh | 534 +++++--- .../eolian/mono/marshall_annotation.hh | 76 +- .../eolian_mono/eolian/mono/marshall_type.hh | 2 +- .../eolian/mono/marshall_type_impl.hh | 14 +- .../eolian_mono/eolian/mono/name_helpers.hh | 185 ++- src/bin/eolian_mono/eolian/mono/parameter.hh | 32 +- .../eolian/mono/part_definition.hh | 7 +- .../eolian/mono/struct_definition.hh | 28 +- src/bin/eolian_mono/eolian/mono/type_impl.hh | 31 +- src/bin/eolian_mono/eolian/mono/using_decl.hh | 25 +- src/bin/eolian_mono/eolian/mono/utils.hh | 7 + src/bin/eolian_mono/eolian_mono.cc | 5 +- .../mono/ecore_evas_mono/ecore_evas.cs | 4 +- src/bindings/mono/efl_mono/efl_all.cs | 22 +- src/bindings/mono/eina_mono/eina_accessor.cs | 6 +- src/bindings/mono/eina_mono/eina_array.cs | 14 +- src/bindings/mono/eina_mono/eina_binbuf.cs | 14 +- src/bindings/mono/eina_mono/eina_common.cs | 10 +- src/bindings/mono/eina_mono/eina_config.cs | 8 +- .../mono/eina_mono/eina_container_common.cs | 36 +- src/bindings/mono/eina_mono/eina_error.cs | 8 +- src/bindings/mono/eina_mono/eina_hash.cs | 20 +- src/bindings/mono/eina_mono/eina_inarray.cs | 18 +- src/bindings/mono/eina_mono/eina_inlist.cs | 16 +- src/bindings/mono/eina_mono/eina_iterator.cs | 6 +- src/bindings/mono/eina_mono/eina_list.cs | 20 +- src/bindings/mono/eina_mono/eina_log.cs | 2 +- src/bindings/mono/eina_mono/eina_promises.cs | 42 +- src/bindings/mono/eina_mono/eina_slice.cs | 10 +- src/bindings/mono/eina_mono/eina_strbuf.cs | 4 +- .../mono/eina_mono/eina_stringshare.cs | 2 +- src/bindings/mono/eina_mono/eina_value.cs | 94 +- .../mono/eldbus_mono/eldbus_common.cs | 16 +- .../mono/eldbus_mono/eldbus_config.cs | 2 +- .../mono/eldbus_mono/eldbus_connection.cs | 18 +- .../mono/eldbus_mono/eldbus_message.cs | 26 +- .../mono/eldbus_mono/eldbus_object.cs | 16 +- src/bindings/mono/eldbus_mono/eldbus_proxy.cs | 8 +- src/bindings/mono/eo_mono/iwrapper.cs | 140 ++- src/bindings/mono/eo_mono/workaround.cs | 344 +----- src/examples/ecore.mk | 19 + .../ecore/efl_loop_callback_add_event.cs | 43 - ...mple.cs => efl_mono_loop_timer_example.cs} | 31 +- src/examples/efl_mono/EoInherit01.cs | 10 +- src/examples/efl_mono/FunctionPointer01.cs | 6 +- src/examples/eina/EinaArray01.cs | 4 +- src/examples/eina/EinaBinbuf01.cs | 4 +- src/examples/eina/EinaError01.cs | 34 +- src/examples/eina/EinaHash01.cs | 4 +- src/examples/elementary/efl_ui_slider_mono.cs | 34 +- .../elementary/efl_ui_unit_converter.cs | 56 +- src/examples/evas/evas_mono_box.cs | 28 +- src/examples/evas/evas_mono_image.cs | 30 +- src/examples/evas/evas_mono_image2.cs | 18 +- src/examples/evas/evas_mono_rectangle.cs | 20 +- src/examples/evas/evas_mono_table.cs | 30 +- src/examples/evas/evas_mono_text.cs | 35 +- src/lib/eolian_cxx/grammar/klass_def.hpp | 16 + src/tests/efl_mono/BasicDirection.cs | 4 +- src/tests/efl_mono/Eina.cs | 1086 ++++++++--------- src/tests/efl_mono/Eo.cs | 131 +- src/tests/efl_mono/EoPromises.cs | 76 +- src/tests/efl_mono/Errors.cs | 52 +- src/tests/efl_mono/Evas.cs | 12 +- src/tests/efl_mono/Events.cs | 99 +- .../efl_mono/FunctionPointerMarshalling.cs | 8 +- src/tests/efl_mono/FunctionPointers.cs | 16 +- src/tests/efl_mono/Main.cs | 2 +- src/tests/efl_mono/Parts.cs | 18 +- src/tests/efl_mono/Promises.cs | 104 +- src/tests/efl_mono/Strbuf.cs | 14 +- src/tests/efl_mono/Strings.cs | 44 +- src/tests/efl_mono/Structs.cs | 134 +- src/tests/efl_mono/Value.cs | 202 +-- src/tests/efl_mono/ValueEolian.cs | 54 +- src/tests/efl_mono/dummy_another_iface.eo | 10 + .../{test_child.eo => dummy_child.eo} | 2 +- ...umberwrapper.eo => dummy_numberwrapper.eo} | 2 +- src/tests/efl_mono/dummy_test_iface.eo | 13 + .../{test_testing.eo => dummy_test_object.eo} | 253 ++-- src/tests/efl_mono/libefl_mono_native_test.c | 875 ++++++------- src/tests/efl_mono/meson.build | 2 +- 92 files changed, 3193 insertions(+), 2794 deletions(-) delete mode 100644 src/examples/ecore/efl_loop_callback_add_event.cs rename src/examples/ecore/{efl_loop_timer_example.cs => efl_mono_loop_timer_example.cs} (51%) create mode 100644 src/tests/efl_mono/dummy_another_iface.eo rename src/tests/efl_mono/{test_child.eo => dummy_child.eo} (66%) rename src/tests/efl_mono/{test_numberwrapper.eo => dummy_numberwrapper.eo} (76%) create mode 100644 src/tests/efl_mono/dummy_test_iface.eo rename src/tests/efl_mono/{test_testing.eo => dummy_test_object.eo} (81%) diff --git a/src/Makefile_Efl_Mono.am b/src/Makefile_Efl_Mono.am index 78ebc073ec..792a8dc6e8 100644 --- a/src/Makefile_Efl_Mono.am +++ b/src/Makefile_Efl_Mono.am @@ -49,9 +49,11 @@ lib_efl_mono_libefl_mono_dll_sources = \ $(efl_ecore_evas_mono_files) efl_mono_test_files = \ - tests/efl_mono/test_testing.eo \ - tests/efl_mono/test_child.eo \ - tests/efl_mono/test_numberwrapper.eo \ + tests/efl_mono/dummy_test_object.eo \ + tests/efl_mono/dummy_test_iface.eo \ + tests/efl_mono/dummy_another_iface.eo \ + tests/efl_mono/dummy_child.eo \ + tests/efl_mono/dummy_numberwrapper.eo \ tests/efl_mono/mono_test_driver.sh EXTRA_DIST2 += \ @@ -384,12 +386,24 @@ tests_efl_mono_libefl_mono_native_test_la_LDFLAGS = -rpath $(abs_top_builddir)/t tests_efl_mono_libefl_mono_native_test_la_DEPENDENCIES = @USE_EINA_INTERNAL_LIBS@ @USE_EO_INTERNAL_LIBS@ @USE_ECORE_INTERNAL_LIBS@ @USE_ELDBUS_INTERNAL_LIBS@ tests_efl_mono_libefl_mono_native_test_la_LIBTOOLFLAGS = --tag=disable-static -tests/efl_mono/libefl_mono_native_test.c: tests/efl_mono/test_testing.eo.h tests/efl_mono/test_testing.eo.c tests/efl_mono/test_child.eo.h tests/efl_mono/test_child.eo.c tests/efl_mono/test_numberwrapper.eo.h tests/efl_mono/test_numberwrapper.eo.c +tests/efl_mono/libefl_mono_native_test.c: \ + tests/efl_mono/dummy_test_object.eo.h \ + tests/efl_mono/dummy_test_object.eo.c \ + tests/efl_mono/dummy_test_iface.eo.h \ + tests/efl_mono/dummy_test_iface.eo.c \ + tests/efl_mono/dummy_another_iface.eo.h \ + tests/efl_mono/dummy_another_iface.eo.c \ + tests/efl_mono/dummy_child.eo.h \ + tests/efl_mono/dummy_child.eo.c \ + tests/efl_mono/dummy_numberwrapper.eo.h \ + tests/efl_mono/dummy_numberwrapper.eo.c # Intermediate C Sharp test DLL -efl_mono_test_eolian_mono_files = tests/efl_mono/test_testing.eo.cs \ -tests/efl_mono/test_child.eo.cs \ -tests/efl_mono/test_numberwrapper.eo.cs +efl_mono_test_eolian_mono_files = tests/efl_mono/dummy_test_object.eo.cs \ +tests/efl_mono/dummy_test_iface.eo.cs \ +tests/efl_mono/dummy_another_iface.eo.cs \ +tests/efl_mono/dummy_child.eo.cs \ +tests/efl_mono/dummy_numberwrapper.eo.cs tests/efl_mono/libefl_mono_test.dll: $(efl_mono_test_eolian_mono_files) tests/efl_mono/$(am__dirstamp) lib/efl_mono/libefl_mono.dll tests/efl_mono/libefl_mono_native_test.la tests/efl_mono/libefl_mono_test.dll.config @rm -f tests/efl_mono/libefl_mono_test.dll @@ -461,7 +475,7 @@ tests/efl_mono/%.eo.cs: tests/efl_mono/%.eo $(_EOLIAN_MONO_DEP) $(MKDIR_P) $(dir $@); \ $(EOLIAN_MONO) $(EOLIAN_FLAGS) $(EOLIAN_MONO_FLAGS) --dllimport "@DLIB_PREFIX_MONO@efl_mono_native_test@DLIB_SUFFIX_MONO@" -o $@ $(ALL_EO_REFS) $< -CLEANFILES += tests/efl_mono/libefl_mono_test.dll tests/efl_mono/test_testing.eo.cs tests/efl_mono/test_child.eo.cs tests/efl_mono/test_numberwrapper.eo.cs tests/efl_mono/test_testing.eo.c tests/efl_mono/test_child.eo.c tests/efl_mono/test_numberwrapper.eo.c tests/efl_mono/test_testing.eo.h tests/efl_mono/test_child.eo.h tests/efl_mono/test_numberwrapper.eo.h tests/efl_mono/efl_mono.config +CLEANFILES += tests/efl_mono/libefl_mono_test.dll tests/efl_mono/dummy_test_object.eo.cs tests/efl_mono/dummy_child.eo.cs tests/efl_mono/dummy_numberwrapper.eo.cs tests/efl_mono/dummy_test_object.eo.c tests/efl_mono/dummy_child.eo.c tests/efl_mono/dummy_numberwrapper.eo.c tests/efl_mono/dummy_test_object.eo.h tests/efl_mono/dummy_child.eo.h tests/efl_mono/dummy_numberwrapper.eo.h tests/efl_mono/efl_mono.config endif diff --git a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh index 3030c74e1e..1dc705ad3a 100644 --- a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh @@ -54,7 +54,7 @@ struct async_function_declaration_generator return true; if (!as_generator( - scope_tab << "System.Threading.Tasks.Task " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ",") << + scope_tab << "System.Threading.Tasks.Task " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ",") << " System.Threading.CancellationToken token=default(System.Threading.CancellationToken));\n" ).generate(sink, f.parameters, context)) return false; @@ -89,10 +89,10 @@ struct async_function_definition_generator std::transform(f.parameters.begin(), f.parameters.end(), std::back_inserter(param_forwarding), parameter_forwarding); if(!as_generator( - scope_tab << "public System.Threading.Tasks.Task " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ",") << " System.Threading.CancellationToken token)\n" + scope_tab << "public System.Threading.Tasks.Task " << name_helpers::managed_async_method_name(f) << "(" << *(parameter << ",") << " System.Threading.CancellationToken token=default(System.Threading.CancellationToken))\n" << scope_tab << "{\n" - << scope_tab << scope_tab << "eina.Future future = " << name_helpers::managed_method_name(f) << "(" << (string % ",") << ");\n" - << scope_tab << scope_tab << "return efl.eo.Globals.WrapAsync(future, token);\n" + << scope_tab << scope_tab << "Eina.Future future = " << name_helpers::managed_method_name(f) << "(" << (string % ",") << ");\n" + << scope_tab << scope_tab << "return Efl.Eo.Globals.WrapAsync(future, token);\n" << scope_tab << "}\n" ).generate(sink, std::make_tuple(f.parameters, param_forwarding), context)) return false; diff --git a/src/bin/eolian_mono/eolian/mono/blacklist.hh b/src/bin/eolian_mono/eolian/mono/blacklist.hh index a436bcc203..99ec12e91d 100644 --- a/src/bin/eolian_mono/eolian/mono/blacklist.hh +++ b/src/bin/eolian_mono/eolian/mono/blacklist.hh @@ -62,6 +62,8 @@ inline bool is_struct_blacklisted(std::string const& full_name) || full_name == "Eina.Slice" || full_name == "Eina.Rw_Slice" || full_name == "Eina.Promise" + || full_name == "Eina.Value" + || full_name == "Eina.Value_Type" || full_name == "Eina.Future"; } diff --git a/src/bin/eolian_mono/eolian/mono/enum_definition.hh b/src/bin/eolian_mono/eolian/mono/enum_definition.hh index 9261f5b2e6..78af78af2c 100644 --- a/src/bin/eolian_mono/eolian/mono/enum_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/enum_definition.hh @@ -27,16 +27,15 @@ struct enum_definition_generator ( "public enum " << string << "\n{\n" ) - .generate(sink, name_helpers::enum_managed_name(enum_), context)) + .generate(sink, name_helpers::typedecl_managed_name(enum_), context)) return false; // iterate enum fiels for(auto first = std::begin(enum_.fields) , last = std::end(enum_.fields); first != last; ++first) { - auto name = (*first).name; + auto name = name_helpers::enum_field_managed_name((*first).name); auto literal = (*first).value.literal; - name[0] = std::toupper(name[0]); // Hack to allow 'static' as a field name if (!as_generator ( documentation << string << " = " << string << ",\n" diff --git a/src/bin/eolian_mono/eolian/mono/events.hh b/src/bin/eolian_mono/eolian/mono/events.hh index a5fe8ec788..426763626b 100644 --- a/src/bin/eolian_mono/eolian/mono/events.hh +++ b/src/bin/eolian_mono/eolian/mono/events.hh @@ -41,8 +41,8 @@ struct unpack_event_args_visitor {"bool", [&arg] { return arg + " != IntPtr.Zero"; }} , {"int", [&arg] { return arg + ".ToInt32()"; }} , {"uint", [&arg] { return "(uint)" + arg + ".ToInt32()";}} - , {"string", [&arg] { return "eina.StringConversion.NativeUtf8ToManagedString(" + arg + ")"; }} - , {"Eina.Error", [&arg] { return "(eina.Error)Marshal.PtrToStructure(" + arg + ", typeof(eina.Error))"; }} + , {"string", [&arg] { return "Eina.StringConversion.NativeUtf8ToManagedString(" + arg + ")"; }} + , {"Eina.Error", [&arg] { return "(Eina.Error)Marshal.PtrToStructure(" + arg + ", typeof(Eina.Error))"; }} }; std::string full_type_name = name_helpers::type_full_eolian_name(regular); @@ -71,6 +71,9 @@ struct unpack_event_args_visitor } }; +/* + * Generates a struct wrapping the argument of a given event. + */ struct event_argument_wrapper_generator { template @@ -97,6 +100,11 @@ struct event_argument_wrapper_generator } } const event_argument_wrapper {}; +/* + * Generates an event declaration as a C# Interface member. + * In regular/abstract classes they are declared directly in their + * implementation in event_definition_generator. + */ struct event_declaration_generator { template @@ -104,11 +112,9 @@ struct event_declaration_generator { std::string wrapper_args_type; std::string evt_name = name_helpers::managed_event_name(evt.name); - std::string evt_args_name = name_helpers::managed_event_args_name(evt); - efl::eina::optional etype = evt.type; - if (etype.is_engaged()) - wrapper_args_type = "<" + evt_args_name + ">"; + if (evt.type.is_engaged()) + wrapper_args_type = "<" + name_helpers::managed_event_args_name(evt) + ">"; if (!as_generator( documentation(1) @@ -122,34 +128,39 @@ struct event_declaration_generator struct event_registration_generator { - attributes::klass_def const* klass; + attributes::klass_def const& klass; + attributes::klass_def const& leaf_klass; + bool is_inherited_event; + template bool generate(OutputIterator sink, attributes::event_def const& evt, Context const& context) const { std::string wrapper_event_name; - if (klass) - wrapper_event_name = name_helpers::translate_inherited_event_name(evt, *klass); + if (is_inherited_event && !helpers::is_unique_event(evt, leaf_klass)) + wrapper_event_name = name_helpers::translate_inherited_event_name(evt, klass); else wrapper_event_name = name_helpers::managed_event_name(evt.name); return as_generator(scope_tab << scope_tab << "evt_" << wrapper_event_name << "_delegate = " - << "new efl.Event_Cb(on_" << wrapper_event_name << "_NativeCallback);\n" + << "new Efl.EventCb(on_" << wrapper_event_name << "_NativeCallback);\n" ).generate(sink, attributes::unused, context); } }; struct event_registration_parameterized { - event_registration_generator operator()(attributes::klass_def const* klass=NULL) const + event_registration_generator operator()(attributes::klass_def const& klass, attributes::klass_def const& leaf_klass) const { - return {klass}; + bool is_inherited_event = klass != leaf_klass; + return {klass, leaf_klass, is_inherited_event}; } } const event_registration; struct event_definition_generator { attributes::klass_def const& klass; + attributes::klass_def const& leaf_klass; bool is_inherited_event; template @@ -157,8 +168,12 @@ struct event_definition_generator { std::string managed_evt_name = name_helpers::managed_event_name(evt.name); + bool is_unique = helpers::is_unique_event(evt, leaf_klass); + bool use_explicit_impl = is_inherited_event && !is_unique; + + // The name of the public event that goes in the public API. std::string wrapper_evt_name; - if (is_inherited_event) + if (use_explicit_impl) wrapper_evt_name = name_helpers::translate_inherited_event_name(evt, klass); else wrapper_evt_name = managed_evt_name; @@ -167,14 +182,11 @@ struct event_definition_generator if (is_inherited_event) klass_name = name_helpers::klass_full_interface_name(klass); else - klass_name = name_helpers::klass_interface_name(klass); + klass_name = name_helpers::klass_concrete_name(klass); - - std::string upper_c_name = utils::to_uppercase(evt.c_name); std::string wrapper_args_type = "EventArgs"; std::string wrapper_args_template = ""; std::string event_args = "EventArgs args = EventArgs.Empty;\n"; - std::string visibility = is_inherit_context(context) ? "protected" : "private"; efl::eina::optional etype = evt.type; @@ -196,68 +208,125 @@ struct event_definition_generator event_args = arg_initializer; } - // Wrapper event declaration + if(!as_generator("private static object " << wrapper_evt_name << "Key = new object();\n") + .generate(sink, attributes::unused, context)) + return false; + if(!as_generator(documentation(1)).generate(sink, evt, context)) return false; - if(!as_generator( - scope_tab << visibility << " event EventHandler" << wrapper_args_template << " " << wrapper_evt_name << ";\n" - << scope_tab << "///Method to raise event "<< wrapper_evt_name << ".\n" - << scope_tab << visibility << " void On_" << wrapper_evt_name << "(" << wrapper_args_type << " e)\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "EventHandler" << wrapper_args_template << " evt;\n" - << scope_tab << scope_tab << "lock (eventLock) {\n" - << scope_tab << scope_tab << scope_tab << "evt = " << wrapper_evt_name << ";\n" - << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << "if (evt != null) { evt(this, e); }\n" - << scope_tab << "}\n" - << scope_tab << "private void on_" << wrapper_evt_name << "_NativeCallback(System.IntPtr data, ref efl.Event_StructInternal evt)\n" + // Visible event declaration. Either a regular class member or an explicit interface implementation. + if (klass.type == attributes::class_type::interface_ || klass.type == attributes::class_type::mixin) + { + // Public event implementation. + if (!as_generator( + scope_tab << (!use_explicit_impl ? "public " : " ") << "event EventHandler" << wrapper_args_template << " " << (use_explicit_impl ? (klass_name + ".") : "") << managed_evt_name << "\n" + ).generate(sink, attributes::unused, context)) + return false; + } + else // For inheritable classes event handling. + { + // We may have inherited an event with the same name as this concrete event, thus + // the concrete event would "hide" the interface one, requiring the new keyword. + std::string visibility = "public "; + if (!is_unique) + visibility += "new "; + + if (!as_generator( + scope_tab << visibility << "event EventHandler" << wrapper_args_template << " " << wrapper_evt_name << "\n" + ).generate(sink, attributes::unused, context)) + return false; + } + + if (!generate_event_add_remove(sink, evt, wrapper_evt_name, context)) + return false; + + if (!generate_event_trigger(sink, wrapper_evt_name, wrapper_args_type, wrapper_args_template, context)) + return false; + + // Store the delegate for this event in this instance. This is initialized in register_event_proxies() + // We can't initialize them directly here as they depend on the member methods being valid (i.e. + // the constructor being called). + if (!as_generator(scope_tab << "Efl.EventCb evt_" << wrapper_evt_name << "_delegate;\n").generate(sink, attributes::unused, context)) + return false; + + // Callback to be given to C's callback_priority_add + if (!as_generator( + scope_tab << "private void on_" << wrapper_evt_name << "_NativeCallback(System.IntPtr data, ref Efl.Event_StructInternal evt)\n" << scope_tab << "{\n" << scope_tab << scope_tab << event_args << scope_tab << scope_tab << "try {\n" << scope_tab << scope_tab << scope_tab << "On_" << wrapper_evt_name << "(args);\n" << scope_tab << scope_tab << "} catch (Exception e) {\n" - << scope_tab << scope_tab << scope_tab << "eina.Log.Error(e.ToString());\n" - << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" + << scope_tab << scope_tab << scope_tab << "Eina.Log.Error(e.ToString());\n" + << scope_tab << scope_tab << scope_tab << "Eina.Error.Set(Eina.Error.EFL_ERROR);\n" << scope_tab << scope_tab << "}\n" - << scope_tab << "}\n" - << scope_tab << "efl.Event_Cb evt_" << wrapper_evt_name << "_delegate;\n" - << scope_tab << "event EventHandler" << wrapper_args_template << " " << klass_name << "." << managed_evt_name << "{\n") - .generate(sink, NULL, context)) - return false; - - if (!as_generator( - scope_tab << scope_tab << "add {\n" - << scope_tab << scope_tab << scope_tab << "lock (eventLock) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "if (add_cpp_event_handler(key, this.evt_" << wrapper_evt_name << "_delegate))\n" - << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << wrapper_evt_name << " += value;\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" - << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Error adding proxy for event {key}\");\n" - << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block - << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << "remove {\n" - << scope_tab << scope_tab << scope_tab << "lock (eventLock) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "if (remove_cpp_event_handler(key, this.evt_" << wrapper_evt_name << "_delegate))\n" - << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << wrapper_evt_name << " -= value;\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" - << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Error removing proxy for event {key}\");\n" - << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block - << scope_tab << scope_tab << "}\n" - << scope_tab << "}\n") - .generate(sink, NULL, context)) - return false; + << scope_tab << "}\n\n" + ).generate(sink, attributes::unused, context)) + return false; return true; } + + template + bool generate_event_trigger(OutputIterator sink + , std::string const& event_name + , std::string const& event_args_type + , std::string const& event_template_args + , Context context) const + { + auto delegate_type = "EventHandler" + event_template_args; + if (!as_generator( + scope_tab << "///Method to raise event "<< event_name << ".\n" + << scope_tab << "public void On_" << event_name << "(" << event_args_type << " e)\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << delegate_type << " evt;\n" + << scope_tab << scope_tab << "lock (eventLock) {\n" + << scope_tab << scope_tab << "evt = (" << delegate_type << ")eventHandlers[" << event_name << "Key];\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << "evt?.Invoke(this, e);\n" + << scope_tab << "}\n" + ).generate(sink, nullptr, context)) + return false; + + return true; + } + + template + bool generate_event_add_remove(OutputIterator sink, attributes::event_def const &evt, const std::string& event_name, Context context) const + { + std::string upper_c_name = utils::to_uppercase(evt.c_name); + return as_generator( + scope_tab << "{\n" + << scope_tab << scope_tab << "add {\n" + << scope_tab << scope_tab << scope_tab << "lock (eventLock) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "if (add_cpp_event_handler(key, this.evt_" << event_name << "_delegate)) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eventHandlers.AddHandler(" << event_name << "Key , value);\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "} else\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Error adding proxy for event {key}\");\n" + << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block + << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << "remove {\n" + << scope_tab << scope_tab << scope_tab << "lock (eventLock) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "string key = \"_" << upper_c_name << "\";\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "if (remove_cpp_event_handler(key, this.evt_" << event_name << "_delegate)) { \n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eventHandlers.RemoveHandler(" << event_name << "Key , value);\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "} else\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Error removing proxy for event {key}\");\n" + << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block + << scope_tab << scope_tab << "}\n" + << scope_tab << "}\n" + ).generate(sink, attributes::unused, context); + } }; struct event_definition_parameterized { - event_definition_generator operator()(attributes::klass_def const& klass, bool is_inherited_event=false) const + event_definition_generator operator()(attributes::klass_def const& klass, attributes::klass_def const& leaf_klass) const { - return {klass, is_inherited_event}; + bool is_inherited_event = klass != leaf_klass; + return {klass, leaf_klass, is_inherited_event}; } } const event_definition; diff --git a/src/bin/eolian_mono/eolian/mono/function_definition.hh b/src/bin/eolian_mono/eolian/mono/function_definition.hh index 7e44b2938b..93765065b8 100644 --- a/src/bin/eolian_mono/eolian/mono/function_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/function_definition.hh @@ -83,22 +83,22 @@ struct native_function_definition_generator << ")\n" << scope_tab << "{\n" /****/ - << scope_tab << scope_tab << "eina.Log.Debug(\"function " << string << " was called\");\n" + << scope_tab << scope_tab << "Eina.Log.Debug(\"function " << string << " was called\");\n" /****/ - << scope_tab << scope_tab << "efl.eo.IWrapper wrapper = efl.eo.Globals.data_get(pd);\n" + << scope_tab << scope_tab << "Efl.Eo.IWrapper wrapper = Efl.Eo.Globals.data_get(pd);\n" << scope_tab << scope_tab << "if(wrapper != null) {\n" << scope_tab << scope_tab << scope_tab << eolian_mono::native_function_definition_preamble() << scope_tab << scope_tab << scope_tab << "try {\n" << scope_tab << scope_tab << scope_tab << scope_tab << (return_type != " void" ? "_ret_var = " : "") << "((" << klass_inherit_name << ")wrapper)." << string << "(" << (native_argument_invocation % ", ") << ");\n" << scope_tab << scope_tab << scope_tab << "} catch (Exception e) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Warning($\"Callback error: {e.ToString()}\");\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Warning($\"Callback error: {e.ToString()}\");\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Error.Set(Eina.Error.EFL_ERROR);\n" << scope_tab << scope_tab << scope_tab << "}\n" << eolian_mono::native_function_definition_epilogue(*klass) << scope_tab << scope_tab << "} else {\n" << scope_tab << scope_tab << scope_tab << (return_type != " void" ? "return " : "") << string - << "(efl.eo.Globals.efl_super(obj, " << klass_inherit_name << ".klass)" << *(", " << argument) << ");\n" + << "(Efl.Eo.Globals.efl_super(obj, " << klass_inherit_name << ".klass)" << *(", " << argument) << ");\n" << scope_tab << scope_tab << "}\n" << scope_tab << "}\n" ) @@ -137,7 +137,7 @@ struct function_definition_generator bool generate(OutputIterator sink, attributes::function_def const& f, Context const& context) const { EINA_CXX_DOM_LOG_DBG(eolian_mono::domain) << "function_definition_generator: " << f.c_name << std::endl; - if(do_super && f.is_static) // Static methods goes only on Concrete classes. + if(!do_super && f.is_static) // Static methods goes only on Concrete classes. return true; if(blacklist::is_function_blacklisted(f.c_name)) return true; @@ -145,7 +145,7 @@ struct function_definition_generator if(!as_generator ("\n\n" << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag(context).actual_library_name(f.filename) << ")]\n" << scope_tab << eolian_mono::marshall_annotation(true) - << " private static extern " + << (do_super ? " protected " : " private ") << "static extern " << eolian_mono::marshall_type(true) << " " << string << "(System.IntPtr obj" @@ -165,13 +165,19 @@ struct function_definition_generator (documentation(1)).generate(sink, f, context)) return false; + std::string self = "this.NativeHandle"; + + // inherited is set in the constructor, true if this instance is from a pure C# class (not generated). + if (do_super && !f.is_static) + self = "(inherited ? Efl.Eo.Globals.efl_super(" + self + ", this.NativeClass) : " + self + ")"; + else + self = name_helpers::klass_get_full_name(f.klass) + "()"; + if(!as_generator - (scope_tab << (do_super ? "virtual " : "") << "public " << (f.is_static ? "static " : "") << return_type << " " << string << "(" << (parameter % ", ") + (scope_tab << ((do_super && !f.is_static) ? "virtual " : "") << "public " << (f.is_static ? "static " : "") << return_type << " " << string << "(" << (parameter % ", ") << ") {\n " << eolian_mono::function_definition_preamble() << string << "(" - << (do_super ? "efl.eo.Globals.efl_super(" : "") - << (f.is_static ? name_helpers::klass_get_full_name(f.klass) + "()": "this.raw_handle") - << (do_super ? ", this.raw_klass)" : "") + << self << *(", " << argument_invocation ) << ");\n" << eolian_mono::function_definition_epilogue() << " }\n") diff --git a/src/bin/eolian_mono/eolian/mono/function_helpers.hh b/src/bin/eolian_mono/eolian/mono/function_helpers.hh index acfe850032..06bf5d44ec 100644 --- a/src/bin/eolian_mono/eolian/mono/function_helpers.hh +++ b/src/bin/eolian_mono/eolian/mono/function_helpers.hh @@ -34,14 +34,10 @@ struct native_function_definition_preamble_generator return false; if (!as_generator( - scope_tab << scope_tab << "//Placeholder in variables\n" - << *(scope_tab << scope_tab << native_convert_in_variable << "\n") - << scope_tab << scope_tab << "//Placeholder out variables\n" - << *(scope_tab << scope_tab << native_convert_out_variable << "\n") - << scope_tab << scope_tab << "//Function pointer wrappers\n" - << *(scope_tab << scope_tab << native_convert_function_pointer << "\n") - << scope_tab << scope_tab << "//Return variable and function call\n" - << scope_tab << scope_tab << scope_tab << native_convert_return_variable << "\n" + *(scope_tab << scope_tab << native_convert_in_variable) + << *(scope_tab << scope_tab << native_convert_out_variable) + << *(scope_tab << scope_tab << native_convert_function_pointer) + << scope_tab << scope_tab << scope_tab << native_convert_return_variable ).generate(sink, std::make_tuple(f.parameters, f.parameters, f.parameters, f.return_type), context)) return false; @@ -61,13 +57,9 @@ struct function_definition_preamble_generator return false; if (!as_generator( - scope_tab << scope_tab << "//Placeholder in variables\n" - << *(scope_tab << scope_tab << convert_in_variable << "\n") - << scope_tab << scope_tab << "//Placeholder out variables\n" - << *(scope_tab << scope_tab << convert_out_variable << "\n") - << scope_tab << scope_tab << "//Function pointers handling\n" - << *(scope_tab << scope_tab << convert_function_pointer << "\n") - << scope_tab << scope_tab << "//Return variable and function call\n" + *(scope_tab << scope_tab << convert_in_variable) + << *(scope_tab << scope_tab << convert_out_variable) + << *(scope_tab << scope_tab << convert_function_pointer) << scope_tab << scope_tab << convert_return_variable ).generate(sink, std::make_tuple(f.parameters, f.parameters, f.parameters, f.return_type), context)) return false; @@ -90,11 +82,8 @@ struct native_function_definition_epilogue_generator return false; if (!as_generator( - scope_tab << scope_tab << "//Assigning out variables\n" - << *(scope_tab << scope_tab << native_convert_out_assign(*klass) << "\n") - << scope_tab << scope_tab << "//Placeholder in ptr variables that need to be updated\n" - << *(scope_tab << scope_tab << native_convert_in_ptr_assign << "\n") - << scope_tab << scope_tab << "//Converting return variable\n" + *(scope_tab << scope_tab << native_convert_out_assign(*klass)) + << *(scope_tab << scope_tab << native_convert_in_ptr_assign) << scope_tab << scope_tab << native_convert_return(*klass) ).generate(sink, std::make_tuple(f.parameters, f.parameters, f.return_type), context)) return false; @@ -110,12 +99,9 @@ struct function_definition_epilogue_generator bool generate(OutputIterator sink, attributes::function_def const& f, Context const& context) const { if (!as_generator( - scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" - << scope_tab << scope_tab << "//Assigning out variables\n" - << *(scope_tab << scope_tab << convert_out_assign << "\n") - << scope_tab << scope_tab << "//Placeholder in ptr variables that need to be updated\n" - << *(scope_tab << scope_tab << convert_in_ptr_assign << "\n") - << scope_tab << scope_tab << "//Converting return variable\n" + scope_tab << scope_tab << "Eina.Error.RaiseIfOccurred();\n" + << *(scope_tab << scope_tab << convert_out_assign) + << *(scope_tab << scope_tab << convert_in_ptr_assign) << scope_tab << scope_tab << convert_return ).generate(sink, std::make_tuple(f.parameters, f.parameters, f.return_type), context)) return false; diff --git a/src/bin/eolian_mono/eolian/mono/function_pointer.hh b/src/bin/eolian_mono/eolian/mono/function_pointer.hh index f373a13121..95c0e0fa1e 100644 --- a/src/bin/eolian_mono/eolian/mono/function_pointer.hh +++ b/src/bin/eolian_mono/eolian/mono/function_pointer.hh @@ -38,28 +38,29 @@ struct function_pointer { if (!name_helpers::open_namespaces(sink, f.namespaces, funcptr_ctx)) return false; + std::string f_name = name_helpers::typedecl_managed_name(f); + // C# visible delegate if (!as_generator(documentation << "public delegate " << type << " " << string << "(" << (parameter % ", ") << ");\n") - .generate(sink, std::make_tuple(f, f.return_type, name_helpers::escape_keyword(f.name), f.parameters), funcptr_ctx)) + .generate(sink, std::make_tuple(f, f.return_type, f_name, f.parameters), funcptr_ctx)) return false; // "Internal" delegate, 1-to-1 with the Unamaged function type if (!as_generator(marshall_native_annotation(true) - << "internal delegate " << marshall_type(true) << " " << string // public? + << "public delegate " << marshall_type(true) << " " << string // public? << "Internal(IntPtr data" << *grammar::attribute_reorder<-1, -1>((", " << marshall_native_annotation << " " << marshall_parameter)) << ");\n") - .generate(sink, std::make_tuple(f.return_type, f.return_type, name_helpers::escape_keyword(f.name), f.parameters), funcptr_ctx)) + .generate(sink, std::make_tuple(f.return_type, f.return_type, f_name, f.parameters), funcptr_ctx)) return false; - std::string f_name = name_helpers::escape_keyword(f.name); // Wrapper type, with callback matching the Unamanaged one if (!as_generator("internal class " << f_name << "Wrapper\n" << "{\n\n" << scope_tab << "private " << f_name << "Internal _cb;\n" << scope_tab << "private IntPtr _cb_data;\n" - << scope_tab << "private Eina_Free_Cb _cb_free_cb;\n\n" + << scope_tab << "private EinaFreeCb _cb_free_cb;\n\n" - << scope_tab << "internal " << f_name << "Wrapper (" << f_name << "Internal _cb, IntPtr _cb_data, Eina_Free_Cb _cb_free_cb)\n" + << scope_tab << "internal " << f_name << "Wrapper (" << f_name << "Internal _cb, IntPtr _cb_data, EinaFreeCb _cb_free_cb)\n" << scope_tab << "{\n" << scope_tab << scope_tab << "this._cb = _cb;\n" << scope_tab << scope_tab << "this._cb_data = _cb_data;\n" @@ -88,8 +89,8 @@ struct function_pointer { << scope_tab << scope_tab << "try {\n" << scope_tab << scope_tab << scope_tab << (return_type != " void" ? "_ret_var = " : "") << "cb(" << (native_argument_invocation % ", ") << ");\n" << scope_tab << scope_tab << "} catch (Exception e) {\n" - << scope_tab << scope_tab << scope_tab << "eina.Log.Warning($\"Callback error: {e.ToString()}\");\n" - << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" + << scope_tab << scope_tab << scope_tab << "Eina.Log.Warning($\"Callback error: {e.ToString()}\");\n" + << scope_tab << scope_tab << scope_tab << "Eina.Error.Set(Eina.Error.EFL_ERROR);\n" << scope_tab << scope_tab << "}\n" << native_function_definition_epilogue(nullptr) << scope_tab << "}\n" diff --git a/src/bin/eolian_mono/eolian/mono/function_registration.hh b/src/bin/eolian_mono/eolian/mono/function_registration.hh index 22fc42599b..e8a41047f9 100644 --- a/src/bin/eolian_mono/eolian/mono/function_registration.hh +++ b/src/bin/eolian_mono/eolian/mono/function_registration.hh @@ -40,7 +40,7 @@ struct function_registration_generator #ifdef _WIN32 (scope_tab << scope_tab << "descs[" << index << "].api_func = Marshal.StringToHGlobalAnsi(\"" << string << "\");\n" #else - (scope_tab << scope_tab << "descs[" << index << "].api_func = efl.eo.Globals.dlsym(efl.eo.Globals.RTLD_DEFAULT, \"" << string << "\");\n" + (scope_tab << scope_tab << "descs[" << index << "].api_func = Efl.Eo.Globals.dlsym(Efl.Eo.Globals.RTLD_DEFAULT, \"" << string << "\");\n" #endif << scope_tab << scope_tab << "descs[" << index << "].func = Marshal.GetFunctionPointerForDelegate(" << name_helpers::klass_native_inherit_name(*klass) << "." << string << "_static_delegate);\n" ) diff --git a/src/bin/eolian_mono/eolian/mono/helpers.hh b/src/bin/eolian_mono/eolian/mono/helpers.hh index 40a99915ab..ed72345009 100644 --- a/src/bin/eolian_mono/eolian/mono/helpers.hh +++ b/src/bin/eolian_mono/eolian/mono/helpers.hh @@ -65,6 +65,163 @@ inline bool need_pointer_conversion(attributes::regular_type_def const* regular) return false; } +// While klass_def has immediate_inherits, we need a way to get all interfaces inherited by an interface +// either directly or through another interface. +std::set interface_inherits(attributes::klass_def const& cls) +{ + std::set inherits; + + std::function inherit_algo = + [&] (attributes::klass_name const& klass) + { + // TODO we could somehow cache klass_def instantiations + attributes::klass_def c(get_klass(klass, cls.unit), cls.unit); + for(auto&& inherit : c.immediate_inherits) + { + switch(inherit.type) + { + case attributes::class_type::mixin: + case attributes::class_type::interface_: + inherits.insert(inherit); + inherit_algo(inherit); + break; + case attributes::class_type::regular: + case attributes::class_type::abstract_: + inherit_algo(inherit); + default: + break; + } + } + }; + + inherit_algo(get_klass_name(cls)); + + + return inherits; +} + +// Returns the set of interfaces implemented by this type that haven't been implemented +// by a regular parent class. +std::set non_implemented_interfaces(attributes::klass_def const& cls) +{ + std::set implemented_interfaces; + std::set interfaces; + + std::function inherit_algo = + [&] (attributes::klass_name const& klass, bool is_implemented) + { + // TODO we could somehow cache klass_def instantiations + attributes::klass_def c(get_klass(klass, cls.unit), cls.unit); + for(auto&& inherit : c.immediate_inherits) + { + switch(inherit.type) + { + case attributes::class_type::mixin: + case attributes::class_type::interface_: + interfaces.insert(inherit); + if (is_implemented) + implemented_interfaces.insert(inherit); + inherit_algo(inherit, is_implemented); + break; + case attributes::class_type::abstract_: + case attributes::class_type::regular: + inherit_algo(inherit, true); + default: + break; + } + } + }; + + inherit_algo(get_klass_name(cls), false); + + for (auto&& inherit : implemented_interfaces) + interfaces.erase(inherit); + + + return interfaces; +} + + +/* + * Determines whether this class has any regular ancestor or not + */ +bool has_regular_ancestor(attributes::klass_def const& cls) +{ + auto inherits = cls.inherits; + std::function is_regular = + [&] (attributes::klass_name const& klass) + { + return klass.type == attributes::class_type::regular || klass.type == attributes::class_type::abstract_; + }; + + return std::any_of(inherits.begin(), inherits.end(), is_regular); +} + +/* + * Gets all methods that this class should implement (i.e. that come from an unimplemented interface/mixin and the class itself) + */ +std::vector get_all_implementable_methods(attributes::klass_def const& cls) +{ + std::vector ret; + + std::copy(cls.functions.begin(), cls.functions.end(), std::back_inserter(ret)); + + // Non implemented interfaces + std::set implemented_interfaces; + std::set interfaces; + std::function inherit_algo = + [&] (attributes::klass_name const &klass, bool is_implemented) + { + attributes::klass_def c(get_klass(klass, cls.unit), cls.unit); + for (auto&& inherit: c.immediate_inherits) + { + switch(inherit.type) + { + case attributes::class_type::mixin: + case attributes::class_type::interface_: + interfaces.insert(inherit); + if (is_implemented) + implemented_interfaces.insert(inherit); + inherit_algo(inherit, is_implemented); + break; + case attributes::class_type::abstract_: + case attributes::class_type::regular: + inherit_algo(inherit, true); + default: + break; + } + } + }; + + inherit_algo(attributes::get_klass_name(cls), false); + + for (auto&& inherit : implemented_interfaces) + interfaces.erase(inherit); + + for (auto&& inherit : interfaces) + { + attributes::klass_def klass(get_klass(inherit, cls.unit), cls.unit); + std::copy(klass.functions.cbegin(), klass.functions.cend(), std::back_inserter(ret)); + } + + return ret; +} + +/* + * Checks whether the given is unique going up the inheritance tree from leaf_klass + */ +inline bool is_unique_event(attributes::event_def const& evt + , attributes::klass_def const& leaf_klass) +{ + auto events = leaf_klass.get_all_events(); + int i = 1; + return !std::any_of(events.cbegin(), events.cend(), + [&evt, &i](const attributes::event_def &other) { + return evt.name == other.name && i++ == 2; + }); +} + + } // namespace helpers } // namespace eolian_mono diff --git a/src/bin/eolian_mono/eolian/mono/klass.hh b/src/bin/eolian_mono/eolian/mono/klass.hh index 7a4051131b..077a0fad07 100644 --- a/src/bin/eolian_mono/eolian/mono/klass.hh +++ b/src/bin/eolian_mono/eolian/mono/klass.hh @@ -4,6 +4,7 @@ #include "grammar/integral.hpp" #include "grammar/generator.hpp" #include "grammar/klass_def.hpp" +#include "grammar/attribute_conditional.hpp" #include "blacklist.hh" #include "grammar/indentation.hpp" @@ -35,11 +36,11 @@ static bool generate_static_cast_method(OutputIterator sink, grammar::attributes { return as_generator( scope_tab << "///Casts obj into an instance of this type.\n" - << scope_tab << "public static " << name_helpers::klass_interface_name(cls) << " static_cast(efl.IObject obj)\n" + << scope_tab << "public " << (helpers::has_regular_ancestor(cls) ? "new " : "") <<"static " << name_helpers::klass_concrete_name(cls) << " static_cast(Efl.Object obj)\n" << scope_tab << "{\n" << scope_tab << scope_tab << "if (obj == null)\n" << scope_tab << scope_tab << scope_tab << "throw new System.ArgumentNullException(\"obj\");\n" - << scope_tab << scope_tab << "return new " << name_helpers::klass_concrete_name(cls) << "(obj.raw_handle);\n" + << scope_tab << scope_tab << "return new " << name_helpers::klass_concrete_name(cls) << "(obj.NativeHandle);\n" << scope_tab << "}\n" ).generate(sink, nullptr, context); } @@ -51,29 +52,29 @@ static bool generate_equals_method(OutputIterator sink, Context const &context) scope_tab << "///Verifies if the given object is equal to this one.\n" << scope_tab << "public override bool Equals(object obj)\n" << scope_tab << "{\n" - << scope_tab << scope_tab << "var other = obj as efl.IObject;\n" + << scope_tab << scope_tab << "var other = obj as Efl.Object;\n" << scope_tab << scope_tab << "if (other == null)\n" << scope_tab << scope_tab << scope_tab << "return false;\n" - << scope_tab << scope_tab << "return this.raw_handle == other.raw_handle;\n" + << scope_tab << scope_tab << "return this.NativeHandle == other.NativeHandle;\n" << scope_tab << "}\n" << scope_tab << "///Gets the hash code for this object based on the native pointer it points to.\n" << scope_tab << "public override int GetHashCode()\n" << scope_tab << "{\n" - << scope_tab << scope_tab << "return this.raw_handle.ToInt32();\n" + << scope_tab << scope_tab << "return this.NativeHandle.ToInt32();\n" << scope_tab << "}\n" << scope_tab << "///Turns the native pointer into a string representation.\n" << scope_tab << "public override String ToString()\n" << scope_tab << "{\n" - << scope_tab << scope_tab << "return $\"{this.GetType().Name}@[{this.raw_handle.ToInt32():x}]\";\n" + << scope_tab << scope_tab << "return $\"{this.GetType().Name}@[{this.NativeHandle.ToInt32():x}]\";\n" << scope_tab << "}\n" ).generate(sink, nullptr, context); } /* Get the actual number of functions of a class, checking for blacklisted ones */ static std::size_t -get_inheritable_function_count(grammar::attributes::klass_def const& cls) +get_implementable_function_count(grammar::attributes::klass_def const& cls) { - auto methods = cls.get_all_methods(); + auto methods = helpers::get_all_implementable_methods(cls); return std::count_if(methods.cbegin(), methods.cend(), [](grammar::attributes::function_def const& func) { return !blacklist::is_function_blacklisted(func.c_name) && !func.is_static; @@ -97,6 +98,9 @@ struct klass switch(cls.type) { case attributes::class_type::regular: + class_type = "class"; + suffix = "CLASS"; + break; case attributes::class_type::abstract_: class_type = "class"; suffix = "CLASS"; @@ -117,6 +121,7 @@ struct klass auto methods = cls.get_all_methods(); // Interface class + if(class_type == "interface") { auto iface_cxt = context_add_tag(class_context{class_context::interface}, context); @@ -132,11 +137,12 @@ struct klass for(auto first = std::begin(cls.immediate_inherits) , last = std::end(cls.immediate_inherits); first != last; ++first) { - if(!as_generator("\n" << scope_tab << string << " ,").generate(sink, name_helpers::klass_full_interface_name(*first), iface_cxt)) - return false; + if(first->type != attributes::class_type::regular && first->type != attributes::class_type::abstract_) + if(!as_generator("\n" << scope_tab << string << " ,").generate(sink, name_helpers::klass_full_interface_name(*first), iface_cxt)) + return false; } - if(!as_generator("\n" << scope_tab << "efl.eo.IWrapper, IDisposable").generate(sink, attributes::unused, iface_cxt)) + if(!as_generator("\n" << scope_tab << "Efl.Eo.IWrapper, IDisposable").generate(sink, attributes::unused, iface_cxt)) return false; if(!as_generator("\n{\n").generate(sink, attributes::unused, iface_cxt)) @@ -154,85 +160,74 @@ struct klass for (auto &&p : cls.parts) if (!as_generator( documentation(1) - << name_helpers::klass_full_interface_name(p.klass) << " " << utils::capitalize(p.name) << "{ get;}\n" + << name_helpers::klass_full_concrete_or_interface_name(p.klass) << " " << utils::capitalize(p.name) << "{ get;}\n" ).generate(sink, p, iface_cxt)) return false; // End of interface declaration if(!as_generator("}\n").generate(sink, attributes::unused, iface_cxt)) return false; + } - // Concrete class - // if(class_type == "class") + // Events arguments go in the top namespace to avoid the Concrete suffix clutter in interface events. + // Regular/abstract class events go here too for consistency. + if(!as_generator(*(event_argument_wrapper)).generate(sink, cls.events, context)) + return false; + + bool root = !helpers::has_regular_ancestor(cls); + std::set inherit_interfaces = helpers::non_implemented_interfaces(cls); + std::vector inherit_classes; + std::copy_if(cls.immediate_inherits.begin(), cls.immediate_inherits.end() + , std::back_inserter(inherit_classes) + , [] (attributes::klass_name const& klass) + { + switch (klass.type) + { + case attributes::class_type::regular: + case attributes::class_type::abstract_: + return true; + default: + return false; + }; + }); + + // Concrete class for interfaces, mixins, etc. + if(class_type != "class") { auto concrete_cxt = context_add_tag(class_context{class_context::concrete}, context); auto concrete_name = name_helpers::klass_concrete_name(cls); auto interface_name = name_helpers::klass_interface_name(cls); + if(!as_generator ( documentation - << "sealed public class " << concrete_name << " : " << interface_name << "\n{\n" - << scope_tab << "System.IntPtr handle;\n" - << scope_tab << "///Pointer to the native instance.\n" - << scope_tab << "public System.IntPtr raw_handle {\n" - << scope_tab << scope_tab << "get { return handle; }\n" - << scope_tab << "}\n" - << scope_tab << "///Pointer to the native class description.\n" - << scope_tab << "public System.IntPtr raw_klass {\n" - << scope_tab << scope_tab << "get { return efl.eo.Globals.efl_class_get(handle); }\n" - << scope_tab << "}\n" - << scope_tab << "///Delegate for function to be called from inside the native constructor.\n" - << scope_tab << "public delegate void ConstructingMethod(" << interface_name << " obj);\n" - << scope_tab << "///Returns the pointer the underlying Eo class object. Used internally on class methods.\n" - << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag(concrete_cxt).actual_library_name(cls.filename) - << ")] public static extern System.IntPtr\n" + << "sealed public class " << concrete_name << " : " << "\n" + << (klass_full_concrete_or_interface_name % ",") << "\n" + << (inherit_classes.size() > 0 ? ", " : "" ) << interface_name << "\n" + << scope_tab << *(", " << name_helpers::klass_full_concrete_or_interface_name) << "\n" + << "{\n" + ).generate(sink, std::make_tuple(cls, inherit_classes, inherit_interfaces), concrete_cxt)) + return false; + + if (!generate_fields(sink, cls, concrete_cxt)) + return false; + + if (!as_generator + ( + scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag(concrete_cxt).actual_library_name(cls.filename) + << ")] internal static extern System.IntPtr\n" << scope_tab << scope_tab << name_helpers::klass_get_name(cls) << "();\n" - << (class_type == "class" ? "" : "/*") - << scope_tab << "///Creates a new instance.\n" - << scope_tab << "///Parent instance.\n" - << scope_tab << "///Delegate to call constructing methods that should be run inside the constructor.\n" - << scope_tab << "public " << concrete_name << "(efl.IObject parent = null, ConstructingMethod init_cb=null)\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "System.IntPtr klass = " << name_helpers::klass_get_name(cls) << "();\n" - << scope_tab << scope_tab << "System.IntPtr parent_ptr = System.IntPtr.Zero;\n" - << scope_tab << scope_tab << "if(parent != null)\n" - << scope_tab << scope_tab << scope_tab << "parent_ptr = parent.raw_handle;\n" - << scope_tab << scope_tab << "handle = efl.eo.Globals._efl_add_internal_start(\"file\", 0, klass, parent_ptr, 1, 0);\n" - << scope_tab << scope_tab << "register_event_proxies();\n" - << scope_tab << scope_tab << "if (init_cb != null) {\n" - << scope_tab << scope_tab << scope_tab << "init_cb(this);\n" - << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << "handle = efl.eo.Globals._efl_add_end(handle, 1, 0);\n" // replace handle with the actual final handle - << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" - << scope_tab << "}\n" - << (class_type == "class" ? "" : "*/") << scope_tab << "///Constructs an instance from a native pointer.\n" << scope_tab << "public " << concrete_name << "(System.IntPtr raw)\n" << scope_tab << "{\n" << scope_tab << scope_tab << "handle = raw;\n" << scope_tab << scope_tab << "register_event_proxies();\n" << scope_tab << "}\n" - << scope_tab << "///Destructor.\n" - << scope_tab << "~" << concrete_name << "()\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "Dispose(false);\n" - << scope_tab << "}\n" - << scope_tab << "///Releases the underlying native instance.\n" - << scope_tab << "internal void Dispose(bool disposing)\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" - << scope_tab << scope_tab << scope_tab << "efl.eo.Globals.efl_unref(handle);\n" - << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" - << scope_tab << scope_tab << "}\n" - << scope_tab << "}\n" - << scope_tab << "///Releases the underlying native instance.\n" - << scope_tab << "public void Dispose()\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "Dispose(true);\n" - << scope_tab << scope_tab << "GC.SuppressFinalize(this);\n" - << scope_tab << "}\n" ) - .generate(sink, cls, concrete_cxt)) + .generate(sink, attributes::unused, concrete_cxt)) + return false; + + if (!generate_dispose_methods(sink, cls, concrete_cxt)) return false; if (!generate_static_cast_method(sink, cls, concrete_cxt)) @@ -249,100 +244,53 @@ struct klass // Parts if(!as_generator(*(part_definition)) - .generate(sink, cls.get_all_parts(), concrete_cxt)) return false; + .generate(sink, cls.parts, concrete_cxt)) return false; // Concrete function definitions + auto implemented_methods = helpers::get_all_implementable_methods(cls); if(!as_generator(*(function_definition)) - .generate(sink, methods, concrete_cxt)) return false; + .generate(sink, implemented_methods, concrete_cxt)) return false; // Async wrappers - if(!as_generator(*(async_function_definition)).generate(sink, methods, concrete_cxt)) - return false; - - if(!as_generator(*(event_argument_wrapper)).generate(sink, cls.events, context)) + if(!as_generator(*(async_function_definition)).generate(sink, implemented_methods, concrete_cxt)) return false; if(!as_generator("}\n").generate(sink, attributes::unused, concrete_cxt)) return false; + } - // Inherit class + // Inheritable class if(class_type == "class") { auto inherit_cxt = context_add_tag(class_context{class_context::inherit}, context); - bool cls_has_string_return = has_string_return(cls); - bool cls_has_stringshare_return = has_stringshare_return(cls); - auto interface_name = name_helpers::klass_interface_name(cls); - auto inherit_name = name_helpers::klass_inherit_name(cls); - auto native_inherit_name = name_helpers::klass_native_inherit_name(cls); - - - if(!as_generator + // Class header + if(!as_generator ( documentation - << "public " << class_type << " " << inherit_name << " : " << interface_name << "\n{\n" - << scope_tab << "System.IntPtr handle;\n" - << scope_tab << "internal static System.IntPtr klass = System.IntPtr.Zero;\n" - << scope_tab << "private static readonly object klassAllocLock = new object();\n" - << scope_tab << (cls_has_string_return ? ("internal Dictionary cached_strings = new Dictionary();") : "") << "\n" - << scope_tab << (cls_has_stringshare_return ? ("internal Dictionary cached_stringshares = new Dictionary();") : "") << "\n" - << scope_tab << "///Pointer to the native instance.\n" - << scope_tab << "public System.IntPtr raw_handle {\n" - << scope_tab << scope_tab << "get { return handle; }\n" - << scope_tab << "}\n" - << scope_tab << "///Pointer to the native class description.\n" - << scope_tab << "public System.IntPtr raw_klass {\n" - << scope_tab << scope_tab << "get { return klass; }\n" - << scope_tab << "}\n" - << scope_tab << "///Delegate for function to be called from inside the native constructor.\n" - << scope_tab << "public delegate void ConstructingMethod(" << interface_name << " obj);\n" - << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag(inherit_cxt).actual_library_name(cls.filename) - << ")] private static extern System.IntPtr\n" - << scope_tab << scope_tab << name_helpers::klass_get_name(cls) << "();\n" - << scope_tab << "///Creates a new instance.\n" - << scope_tab << "///Parent instance.\n" - << scope_tab << "///Delegate to call constructing methods that should be run inside the constructor.\n" - << scope_tab << "public " << inherit_name << "(efl.IObject parent = null, ConstructingMethod init_cb=null)\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "if (klass == System.IntPtr.Zero) {\n" - << scope_tab << scope_tab << scope_tab << "lock (klassAllocLock) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "if (klass == System.IntPtr.Zero) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "klass = efl.eo.Globals.register_class(new efl.eo.Globals.class_initializer(" << native_inherit_name << ".class_initializer), \"" << cls.eolian_name << "\", " << name_helpers::klass_get_name(cls) << "());\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << "handle = efl.eo.Globals.instantiate_start(klass, parent);\n" - << scope_tab << scope_tab << "register_event_proxies();\n" - << scope_tab << scope_tab << "if (init_cb != null) {\n" - << scope_tab << scope_tab << scope_tab << "init_cb(this);\n" - << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << "efl.eo.Globals.data_set(this);\n" - << scope_tab << scope_tab << "handle = efl.eo.Globals.instantiate_end(handle);\n" - << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" - << scope_tab << "}\n" - << scope_tab << "///Destructor.\n" - << scope_tab << "~" << inherit_name << "()\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "Dispose(false);\n" - << scope_tab << "}\n" - << scope_tab << "///Releases the underlying native instance.\n" - << scope_tab << "protected virtual void Dispose(bool disposing)\n" - << scope_tab << "{\n" - << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" - << scope_tab << scope_tab << scope_tab << "efl.eo.Globals.efl_unref(handle);\n" - << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" - << scope_tab << scope_tab << "}\n" - << scope_tab << "}\n" - << scope_tab << "///Releases the underlying native instance.\n" - << scope_tab << "public void Dispose()\n" - << scope_tab << "{\n" - << scope_tab << (cls_has_string_return ? "efl.eo.Globals.free_dict_values(cached_strings);" : "") << "\n" - << scope_tab << (cls_has_stringshare_return ? "efl.eo.Globals.free_stringshare_values(cached_stringshares);" : "") << "\n" - << scope_tab << scope_tab << "Dispose(true);\n" - << scope_tab << scope_tab << "GC.SuppressFinalize(this);\n" - << scope_tab << "}\n" - ) - .generate(sink, cls, inherit_cxt)) + << "public " << class_type << " " << name_helpers::klass_concrete_name(cls) << " : " + << (klass_full_concrete_or_interface_name % ",") // classes + << (inherit_classes.empty() ? "" : ",") + << " Efl.Eo.IWrapper" << (root ? ", IDisposable" : "") + << (inherit_interfaces.empty() ? "" : ",") + << (klass_full_concrete_or_interface_name % ",") // interfaces + << "\n{\n" + ) + .generate(sink, std::make_tuple(cls, inherit_classes, inherit_interfaces), inherit_cxt)) + return false; + + + // Class body + if(!generate_fields(sink, cls, inherit_cxt)) + return false; + + if (!generate_constructors(sink, cls, inherit_cxt)) + return false; + + if (!generate_dispose_methods(sink, cls, inherit_cxt)) + return false; + + if (!generate_static_cast_method(sink, cls, inherit_cxt)) return false; if (!generate_equals_method(sink, inherit_cxt)) @@ -356,20 +304,21 @@ struct klass // Parts if(!as_generator(*(part_definition)) - .generate(sink, cls.get_all_parts(), inherit_cxt)) return false; + .generate(sink, cls.parts, inherit_cxt)) return false; // Inherit function definitions + auto implemented_methods = helpers::get_all_implementable_methods(cls); if(!as_generator(*(function_definition(true))) - .generate(sink, methods, inherit_cxt)) return false; + .generate(sink, implemented_methods, inherit_cxt)) return false; // Async wrappers - if(!as_generator(*(async_function_definition(true))).generate(sink, methods, inherit_cxt)) + if(!as_generator(*(async_function_definition(true))).generate(sink, implemented_methods, inherit_cxt)) return false; if(!as_generator("}\n").generate(sink, attributes::unused, inherit_cxt)) return false; } - std::size_t function_count = get_inheritable_function_count(cls); + std::size_t function_count = get_implementable_function_count(cls); int function_registration_index = 0; auto index_generator = [&function_registration_index] @@ -394,7 +343,7 @@ struct klass // Native wrapper registration if(!as_generator(*(function_registration(index_generator, cls))) - .generate(sink, methods, inative_cxt)) return false; + .generate(sink, helpers::get_all_implementable_methods(cls), inative_cxt)) return false; if(!as_generator ( scope_tab << scope_tab << "IntPtr descs_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(descs[0])*" << function_count << ");\n" @@ -409,7 +358,7 @@ struct klass << scope_tab << scope_tab << "ops.count = (UIntPtr)" << function_count << ";\n" << scope_tab << scope_tab << "IntPtr ops_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ops));\n" << scope_tab << scope_tab << "Marshal.StructureToPtr(ops, ops_ptr, false);\n" - << scope_tab << scope_tab << "efl.eo.Globals.efl_class_functions_set(klass, ops_ptr, IntPtr.Zero);\n" + << scope_tab << scope_tab << "Efl.Eo.Globals.efl_class_functions_set(klass, ops_ptr, IntPtr.Zero);\n" ).generate(sink, attributes::unused, inative_cxt)) return false; @@ -419,7 +368,7 @@ struct klass // // Native method definitions if(!as_generator(*(native_function_definition(cls))) - .generate(sink, methods, inative_cxt)) return false; + .generate(sink, helpers::get_all_implementable_methods(cls), inative_cxt)) return false; if(!as_generator("}\n").generate(sink, attributes::unused, inative_cxt)) return false; } @@ -430,12 +379,223 @@ struct klass return true; } + template + bool generate_fields(OutputIterator sink, attributes::klass_def const& cls, Context const& context) const + { + std::string visibility = is_inherit_context(context) ? "protected " : "private "; + bool root = !helpers::has_regular_ancestor(cls); + bool is_inherit = is_inherit_context(context); + + std::string class_getter = "return Efl.Eo.Globals.efl_class_get(handle);"; + + // The klass field is static but there is no problem if multiple C# classes inherit from this generated one + // as it is just a simple wrapper, forwarding the Eo calls either to the user API (where C#'s virtual method + // resolution kicks in) or to the base implementation (efl_super). + if (is_inherit) + { + if(!as_generator( + scope_tab << "public " << (root ? "" : "new ") << "static System.IntPtr klass = System.IntPtr.Zero;\n" + ).generate(sink, attributes::unused, context)) + return false; + class_getter = "return klass;"; + } + + std::string raw_klass_modifier; + if (!root) + raw_klass_modifier = "override "; + else if (is_inherit) + raw_klass_modifier = "virtual "; + + if(!as_generator( + scope_tab << "///Pointer to the native class description.\n" + << scope_tab << "public " << raw_klass_modifier << "System.IntPtr NativeClass {\n" + << scope_tab << scope_tab << "get {\n" + << scope_tab << scope_tab << scope_tab << class_getter << "\n" //return klass; }\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << "}\n" + ).generate(sink, attributes::unused, context)) + return false; + + // The remaining fields aren't needed in children classes. + if (!root) + return true; + + if (cls.get_all_events().size() > 0) + if (!as_generator(scope_tab << (is_inherit ? "protected " : "private ") << "EventHandlerList eventHandlers = new EventHandlerList();\n").generate(sink, attributes::unused, context)) + return false; + + if (is_inherit) + { + if (!as_generator( + scope_tab << "private static readonly object klassAllocLock = new object();\n" + << scope_tab << "protected bool inherited;\n" + ).generate(sink, attributes::unused, context)) + return false; + } + + return as_generator( + scope_tab << visibility << " System.IntPtr handle;\n" + << scope_tab << "public Dictionary cached_strings = new Dictionary();" << "\n" + << scope_tab << "public Dictionary cached_stringshares = new Dictionary();" << "\n" + << scope_tab << "///Pointer to the native instance.\n" + << scope_tab << "public System.IntPtr NativeHandle {\n" + << scope_tab << scope_tab << "get { return handle; }\n" + << scope_tab << "}\n" + ).generate(sink, attributes::unused, context); + } + + template + bool generate_constructors(OutputIterator sink, attributes::klass_def const& cls, Context const& context) const + { + bool root = !helpers::has_regular_ancestor(cls); + auto inherit_name = name_helpers::klass_concrete_name(cls); + auto native_inherit_name = name_helpers::klass_native_inherit_name(cls); + + if(!as_generator( + scope_tab << "///Delegate for function to be called from inside the native constructor.\n" + << scope_tab << "public" << (root ? "" : " new") << " delegate void ConstructingMethod(" << inherit_name << " obj);\n" + << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag(context).actual_library_name(cls.filename) + << ")] internal static extern System.IntPtr\n" + << scope_tab << scope_tab << name_helpers::klass_get_name(cls) << "();\n" + ).generate(sink, attributes::unused, context)) + return false; + + + if (!root) + { + return as_generator( + scope_tab << "///Creates a new instance.\n" + << scope_tab << "///Parent instance.\n" + << scope_tab << "///Delegate to call constructing methods that should be run inside the constructor.\n" + << scope_tab << "public " << inherit_name << "(Efl.Object parent = null, ConstructingMethod init_cb=null) : base(" << native_inherit_name << ".class_initializer, \"" << inherit_name << "\", " << name_helpers::klass_get_name(cls) << "(), typeof(" << inherit_name << "), parent, ref klass)\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "if (init_cb != null) {\n" + << scope_tab << scope_tab << scope_tab << "init_cb(this);\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << "FinishInstantiation();\n" + << scope_tab << "}\n" + + << scope_tab << "///Internal constructor to forward the wrapper initialization to the root class.\n" + << scope_tab << "protected " << inherit_name << "(Efl.Eo.Globals.class_initializer class_initializer, String klass_name, IntPtr base_klass, Type managed_type, Efl.Object parent, ref IntPtr target_klass) : base(class_initializer, klass_name, base_klass, managed_type, parent, ref target_klass) {}\n" + + << scope_tab << "///Constructs an instance from a native pointer.\n" + << scope_tab << "public " << inherit_name << "(System.IntPtr raw)" << (root ? "" : " : base(raw)") << "\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << (root ? "handle = raw;\n" : "") + << scope_tab << scope_tab << "register_event_proxies();\n" + << scope_tab << "}\n" + ).generate(sink, attributes::unused, context); + } + + // Detailed constructors go only in root classes. + return as_generator( + scope_tab << "///Creates a new instance.\n" + << scope_tab << "///Parent instance.\n" + << scope_tab << "///Delegate to call constructing methods that should be run inside the constructor.\n" + << scope_tab << "public " << inherit_name << "(Efl.Object parent = null, ConstructingMethod init_cb=null) : this(" << native_inherit_name << ".class_initializer, \"" << inherit_name << "\", " << name_helpers::klass_get_name(cls) << "(), typeof(" << inherit_name << "), parent, ref klass)\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "if (init_cb != null) {\n" + << scope_tab << scope_tab << scope_tab << "init_cb(this);\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << "FinishInstantiation();\n" + << scope_tab << "}\n" + + << scope_tab << "protected " << inherit_name << "(Efl.Eo.Globals.class_initializer class_initializer, String klass_name, IntPtr base_klass, Type managed_type, Efl.Object parent, ref IntPtr target_klass)\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "inherited = this.GetType() != managed_type;\n" + << scope_tab << scope_tab << "IntPtr actual_klass = base_klass;\n" + << scope_tab << scope_tab << "if (inherited) {\n" + << scope_tab << scope_tab << scope_tab << "if (target_klass == System.IntPtr.Zero) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "lock (klassAllocLock) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "if (target_klass == System.IntPtr.Zero) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "target_klass = Efl.Eo.Globals.register_class(class_initializer, klass_name, base_klass);\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "if (target_klass == System.IntPtr.Zero) {\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "throw new System.InvalidOperationException(\"Failed to initialize class '" << inherit_name << "'\");\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << scope_tab << "actual_klass = target_klass;\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << "handle = Efl.Eo.Globals.instantiate_start(actual_klass, parent);\n" + << scope_tab << scope_tab << "register_event_proxies();\n" + << scope_tab << "}\n" + + << scope_tab << "protected void FinishInstantiation()\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "if (inherited) {\n" + << scope_tab << scope_tab << scope_tab << "Efl.Eo.Globals.data_set(this);\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << scope_tab << "handle = Efl.Eo.Globals.instantiate_end(handle);\n" + << scope_tab << scope_tab << "Eina.Error.RaiseIfOccurred();\n" + << scope_tab << "}\n" + + << scope_tab << "///Constructs an instance from a native pointer.\n" + << scope_tab << "public " << inherit_name << "(System.IntPtr raw)\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "handle = raw;\n" + << scope_tab << scope_tab << "register_event_proxies();\n" + << scope_tab << "}\n" + ).generate(sink, attributes::unused, context); + } + + + template + bool generate_dispose_methods(OutputIterator sink, attributes::klass_def const& cls, Context const& context) const + { + std::string name = join_namespaces(cls.namespaces, '.') + cls.eolian_name; + if (helpers::has_regular_ancestor(cls)) + return true; + + std::string visibility = is_inherit_context(context) ? "protected virtual " : ""; + + auto inherit_name = name_helpers::klass_concrete_name(cls); + + return as_generator( + + scope_tab << "///Destructor.\n" + << scope_tab << "~" << inherit_name << "()\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "Dispose(false);\n" + << scope_tab << "}\n" + + << scope_tab << "///Releases the underlying native instance.\n" + << scope_tab << visibility << "void Dispose(bool disposing)\n" + << scope_tab << "{\n" + << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" + << scope_tab << scope_tab << scope_tab << "Efl.Eo.Globals.efl_unref(handle);\n" + << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" + << scope_tab << scope_tab << "}\n" + << scope_tab << "}\n" + + << scope_tab << "///Releases the underlying native instance.\n" + << scope_tab << "public void Dispose()\n" + << scope_tab << "{\n" + << scope_tab << "Efl.Eo.Globals.free_dict_values(cached_strings);" << "\n" + << scope_tab << "Efl.Eo.Globals.free_stringshare_values(cached_stringshares);" << "\n" + << scope_tab << scope_tab << "Dispose(true);\n" + << scope_tab << scope_tab << "GC.SuppressFinalize(this);\n" + << scope_tab << "}\n" + ).generate(sink, attributes::unused, context); + } + template bool generate_events_registration(OutputIterator sink, attributes::klass_def const& cls, Context const& context) const { + bool root = !helpers::has_regular_ancestor(cls); + std::string virtual_modifier = " "; + + if (!root) + virtual_modifier = "override "; + else + { + if (is_inherit_context(context)) + virtual_modifier = "virtual "; + } + // Event proxy registration if (!as_generator( - scope_tab << "private void register_event_proxies()\n" + scope_tab << (is_inherit_context(context) || !root ? "protected " : "") << virtual_modifier << "void register_event_proxies()\n" << scope_tab << "{\n" ) .generate(sink, NULL, context)) @@ -443,15 +603,23 @@ struct klass // Generate event registrations here + if (!root) + if (!as_generator(scope_tab << scope_tab << "base.register_event_proxies();\n").generate(sink, NULL, context)) + return false; + // Assigning the delegates - if (!as_generator(*(event_registration())).generate(sink, cls.events, context)) + if (!as_generator(*(event_registration(cls, cls))).generate(sink, cls.events, context)) return false; - for (auto&& c : cls.inherits) + for (auto&& c : helpers::non_implemented_interfaces(cls)) { + // Only non-regular types (which declare events through interfaces) need to register them. + if (c.type == attributes::class_type::regular) + continue; + attributes::klass_def klass(get_klass(c, cls.unit), cls.unit); - if (!as_generator(*(event_registration(&klass))).generate(sink, klass.events, context)) + if (!as_generator(*(event_registration(klass, cls))).generate(sink, klass.events, context)) return false; } @@ -470,53 +638,59 @@ struct klass if (!has_events(cls)) return true; - std::string visibility = is_inherit_context(context) ? "protected" : "private"; + std::string visibility = is_inherit_context(context) ? "protected " : "private "; - if (!as_generator(scope_tab << "private readonly object eventLock = new object();\n" - << scope_tab << "private Dictionary event_cb_count = new Dictionary();\n") - .generate(sink, NULL, context)) - return false; + if (!helpers::has_regular_ancestor(cls)) + { + if (!as_generator(scope_tab << visibility << "readonly object eventLock = new object();\n" + << scope_tab << visibility << "Dictionary event_cb_count = new Dictionary();\n") + .generate(sink, NULL, context)) + return false; // Callback registration functions if (!as_generator( - scope_tab << "private bool add_cpp_event_handler(string key, efl.Event_Cb evt_delegate) {\n" + scope_tab << visibility << "bool add_cpp_event_handler(string key, Efl.EventCb evt_delegate) {\n" << scope_tab << scope_tab << "int event_count = 0;\n" << scope_tab << scope_tab << "if (!event_cb_count.TryGetValue(key, out event_count))\n" << scope_tab << scope_tab << scope_tab << "event_cb_count[key] = event_count;\n" << scope_tab << scope_tab << "if (event_count == 0) {\n" - << scope_tab << scope_tab << scope_tab << "IntPtr desc = efl.Event_Description.GetNative(key);\n" + + << scope_tab << scope_tab << scope_tab << "IntPtr desc = Efl.EventDescription.GetNative(key);\n" << scope_tab << scope_tab << scope_tab << "if (desc == IntPtr.Zero) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Failed to get native event {key}\");\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Failed to get native event {key}\");\n" << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" << scope_tab << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << scope_tab << "bool result = efl.eo.Globals.efl_event_callback_priority_add(handle, desc, 0, evt_delegate, System.IntPtr.Zero);\n" + + << scope_tab << scope_tab << scope_tab << " bool result = Efl.Eo.Globals.efl_event_callback_priority_add(handle, desc, 0, evt_delegate, System.IntPtr.Zero);\n" << scope_tab << scope_tab << scope_tab << "if (!result) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Failed to add event proxy for event {key}\");\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Failed to add event proxy for event {key}\");\n" << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" << scope_tab << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" + << scope_tab << scope_tab << scope_tab << "Eina.Error.RaiseIfOccurred();\n" << scope_tab << scope_tab << "} \n" << scope_tab << scope_tab << "event_cb_count[key]++;\n" << scope_tab << scope_tab << "return true;\n" << scope_tab << "}\n" - << scope_tab << "private bool remove_cpp_event_handler(string key, efl.Event_Cb evt_delegate) {\n" + << scope_tab << visibility << "bool remove_cpp_event_handler(string key, Efl.EventCb evt_delegate) {\n" << scope_tab << scope_tab << "int event_count = 0;\n" << scope_tab << scope_tab << "if (!event_cb_count.TryGetValue(key, out event_count))\n" << scope_tab << scope_tab << scope_tab << "event_cb_count[key] = event_count;\n" << scope_tab << scope_tab << "if (event_count == 1) {\n" - << scope_tab << scope_tab << scope_tab << "IntPtr desc = efl.Event_Description.GetNative(key);\n" + + << scope_tab << scope_tab << scope_tab << "IntPtr desc = Efl.EventDescription.GetNative(key);\n" << scope_tab << scope_tab << scope_tab << "if (desc == IntPtr.Zero) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Failed to get native event {key}\");\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Failed to get native event {key}\");\n" << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" << scope_tab << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << scope_tab << "bool result = efl.eo.Globals.efl_event_callback_del(handle, desc, evt_delegate, System.IntPtr.Zero);\n" + + << scope_tab << scope_tab << scope_tab << "bool result = Efl.Eo.Globals.efl_event_callback_del(handle, desc, evt_delegate, System.IntPtr.Zero);\n" << scope_tab << scope_tab << scope_tab << "if (!result) {\n" - << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Failed to remove event proxy for event {key}\");\n" + << scope_tab << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Failed to remove event proxy for event {key}\");\n" << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" << scope_tab << scope_tab << scope_tab << "}\n" - << scope_tab << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" + << scope_tab << scope_tab << scope_tab << "Eina.Error.RaiseIfOccurred();\n" << scope_tab << scope_tab << "} else if (event_count == 0) {\n" - << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Trying to remove proxy for event {key} when there is nothing registered.\");\n" + << scope_tab << scope_tab << scope_tab << "Eina.Log.Error($\"Trying to remove proxy for event {key} when there is nothing registered.\");\n" << scope_tab << scope_tab << scope_tab << "return false;\n" << scope_tab << scope_tab << "} \n" << scope_tab << scope_tab << "event_cb_count[key]--;\n" @@ -525,16 +699,20 @@ struct klass ) .generate(sink, NULL, context)) return false; + } // Self events - if (!as_generator(*(event_definition(cls))).generate(sink, cls.events, context)) + if (!as_generator(*(event_definition(cls, cls))).generate(sink, cls.events, context)) return false; // Inherited events - for (auto&& c : cls.inherits) + + // For now, as mixins can inherit from regular classes, we can't filter out inherited events. + auto inherits = helpers::non_implemented_interfaces(cls); + for (auto&& c : inherits) { attributes::klass_def klass(get_klass(c, cls.unit), cls.unit); - if (!as_generator(*(event_definition(klass, true))).generate(sink, klass.events, context)) + if (!as_generator(*(event_definition(klass, cls))).generate(sink, klass.events, context)) return false; } return true; diff --git a/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh b/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh index a2426569ab..6ddb990da8 100644 --- a/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh +++ b/src/bin/eolian_mono/eolian/mono/marshall_annotation.hh @@ -53,34 +53,34 @@ struct marshall_annotation_visitor_generate // signed primitives {"bool", nullptr, [&] { return " [MarshalAs(UnmanagedType.U1)]"; }}, {"string", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))]"; }}, {"string", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))]"; }}, {"mstring", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))]"; }}, {"mstring", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))]"; }}, {"stringshare", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringsharePassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringsharePassOwnershipMarshaler))]"; }}, {"stringshare", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringshareKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringshareKeepOwnershipMarshaler))]"; }}, {"any_value_ptr", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(eina.ValueMarshalerOwn))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Eina.ValueMarshalerOwn))]"; }}, {"any_value_ptr", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(eina.ValueMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Eina.ValueMarshaler))]"; }}, {"strbuf", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufPassOwnershipMarshaler))]"; }}, {"strbuf", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufKeepOwnershipMarshaler))]"; }}, }; match const return_match_table[] = @@ -88,34 +88,34 @@ struct marshall_annotation_visitor_generate // signed primitives {"bool", nullptr, [&] { return " [return: MarshalAs(UnmanagedType.U1)]"; }}, {"string", true, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringPassOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))]"; }}, {"string", false, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringKeepOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))]"; }}, {"mstring", true, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringPassOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))]"; }}, {"mstring", false, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringKeepOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))]"; }}, {"stringshare", true, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringsharePassOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringsharePassOwnershipMarshaler))]"; }}, {"stringshare", false, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringshareKeepOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringshareKeepOwnershipMarshaler))]"; }}, {"any_value_ptr", true, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(eina.ValueMarshalerOwn))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Eina.ValueMarshalerOwn))]"; }}, {"any_value_ptr", false, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(eina.ValueMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Eina.ValueMarshaler))]"; }}, {"strbuf", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufPassOwnershipMarshaler))]"; }}, {"strbuf", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufKeepOwnershipMarshaler))]"; }}, }; @@ -142,11 +142,11 @@ struct marshall_annotation_visitor_generate } bool operator()(attributes::klass_name const& klass_name) const { - const char no_return_prefix[] = "[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(efl.eo.MarshalTest<"; - const char return_prefix[] = "[return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(efl.eo.MarshalTest<"; + const char no_return_prefix[] = "[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Efl.Eo.MarshalTest<"; + const char return_prefix[] = "[return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Efl.Eo.MarshalTest<"; return as_generator ((is_return ? return_prefix : no_return_prefix) - << string << ", efl.eo." << (klass_name.base_qualifier & qualifier_info::is_own ? "OwnTag" : "NonOwnTag") << ">))]" + << string << ", Efl.Eo." << (klass_name.base_qualifier & qualifier_info::is_own ? "OwnTag" : "NonOwnTag") << ">))]" ).generate(sink, name_helpers::klass_full_concrete_name(klass_name), *context); } bool operator()(attributes::complex_type_def const& c) const @@ -154,7 +154,7 @@ struct marshall_annotation_visitor_generate if (c.outer.base_type == "future") { std::string prefix = is_return ? "return: " : ""; - return as_generator("[" << prefix << "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(eina.FutureMarshaler))]").generate(sink, nullptr, *context); + return as_generator("[" << prefix << "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Eina.FutureMarshaler))]").generate(sink, nullptr, *context); } return true; } @@ -187,26 +187,26 @@ struct marshall_native_annotation_visitor_generate // signed primitives {"bool", nullptr, [&] { return " [MarshalAs(UnmanagedType.U1)]"; }}, {"string", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))]"; }}, {"string", false, [&] { if (is_out) return ""; - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringKeepOwnershipMarshaler))]"; }}, {"stringshare", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringsharePassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringsharePassOwnershipMarshaler))]"; }}, {"stringshare", false, [&] { if (is_out) return ""; - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringshareKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringshareKeepOwnershipMarshaler))]"; }}, {"strbuf", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufPassOwnershipMarshaler))]"; }}, {"strbuf", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufKeepOwnershipMarshaler))]"; }}, }; match const return_match_table[] = @@ -214,18 +214,18 @@ struct marshall_native_annotation_visitor_generate // signed primitives {"bool", nullptr, [&] { return " [return: MarshalAs(UnmanagedType.U1)]"; }}, {"string", true, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringPassOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringPassOwnershipMarshaler))]"; }}, {"string", false, [&] { return ""; }}, {"stringshare", true, [&] { - return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StringsharePassOwnershipMarshaler))]"; + return " [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StringsharePassOwnershipMarshaler))]"; }}, {"stringshare", false, [&] { return ""; }}, {"strbuf", true, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufPassOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufPassOwnershipMarshaler))]"; }}, {"strbuf", false, [&] { - return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(efl.eo.StrbufKeepOwnershipMarshaler))]"; + return " [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Efl.Eo.StrbufKeepOwnershipMarshaler))]"; }}, }; @@ -252,11 +252,11 @@ struct marshall_native_annotation_visitor_generate } bool operator()(attributes::klass_name const& klass_name) const { - const char no_return_prefix[] = "[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(efl.eo.MarshalTest<"; - const char return_prefix[] = "[return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(efl.eo.MarshalTest<"; + const char no_return_prefix[] = "[MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Efl.Eo.MarshalTest<"; + const char return_prefix[] = "[return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Efl.Eo.MarshalTest<"; return as_generator ((is_return ? return_prefix : no_return_prefix) - << string << ", efl.eo." << (klass_name.base_qualifier & qualifier_info::is_own ? "OwnTag" : "NonOwnTag") << ">))]" + << string << ", Efl.Eo." << (klass_name.base_qualifier & qualifier_info::is_own ? "OwnTag" : "NonOwnTag") << ">))]" ).generate(sink, name_helpers::klass_full_concrete_name(klass_name), *context); } bool operator()(attributes::complex_type_def const& c) const @@ -264,7 +264,7 @@ struct marshall_native_annotation_visitor_generate if (c.outer.base_type == "future") { std::string prefix = is_return ? "return: " : ""; - return as_generator("[" << prefix << "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(eina.FutureMarshaler))]").generate(sink, nullptr, *context); + return as_generator("[" << prefix << "MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(Eina.FutureMarshaler))]").generate(sink, nullptr, *context); } return true; } diff --git a/src/bin/eolian_mono/eolian/mono/marshall_type.hh b/src/bin/eolian_mono/eolian/mono/marshall_type.hh index 79ce8b6380..add954ade2 100644 --- a/src/bin/eolian_mono/eolian/mono/marshall_type.hh +++ b/src/bin/eolian_mono/eolian/mono/marshall_type.hh @@ -22,7 +22,7 @@ struct marshall_native_annotation_visitor_generate; * * For example, Eina.Value can be marshaled either as an eina.Value instance through * CustomMarshallers if we have a ptr(Eina.Value) or through the intermediate - * eina.Value_Native blittable struct if it is passed by value. + * eina.ValueNative blittable struct if it is passed by value. * * For details, check marshall_type_impl.h with the actual conversion rules. */ diff --git a/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh b/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh index 95970dedd6..e14369ad7b 100644 --- a/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh +++ b/src/bin/eolian_mono/eolian/mono/marshall_type_impl.hh @@ -94,7 +94,7 @@ struct marshall_type_visitor_generate { regular_type_def r = regular; r.base_qualifier.qualifier ^= qualifier_info::is_ref; - return replace_base_type(r, " eina.Strbuf"); + return replace_base_type(r, " Eina.Strbuf"); }} , {"Binbuf", true, [&] { @@ -115,9 +115,9 @@ struct marshall_type_visitor_generate regular_type_def r = regular; r.namespaces.clear(); if (is_ptr) - r.base_type = " eina.Value"; + r.base_type = " Eina.Value"; else - r.base_type = " eina.Value_Native"; + r.base_type = " Eina.ValueNative"; return r; }} , {"any_value", false, [&] @@ -125,23 +125,23 @@ struct marshall_type_visitor_generate regular_type_def r = regular; r.namespaces.clear(); if (is_ptr) - r.base_type = " eina.Value"; + r.base_type = " Eina.Value"; else - r.base_type = " eina.Value_Native"; + r.base_type = " Eina.ValueNative"; return r; }} , {"any_value_ptr", true, [&] { regular_type_def r = regular; r.namespaces.clear(); - r.base_type = " eina.Value"; + r.base_type = " Eina.Value"; return r; }} , {"any_value_ptr", false, [&] { regular_type_def r = regular; r.namespaces.clear(); - r.base_type = " eina.Value"; + r.base_type = " Eina.Value"; return r; }} , {"void", nullptr, [&] diff --git a/src/bin/eolian_mono/eolian/mono/name_helpers.hh b/src/bin/eolian_mono/eolian/mono/name_helpers.hh index b1a03056ef..05bf783384 100644 --- a/src/bin/eolian_mono/eolian/mono/name_helpers.hh +++ b/src/bin/eolian_mono/eolian/mono/name_helpers.hh @@ -36,6 +36,10 @@ inline bool is_iequal(std::string const& lhs, std::string const& rhs) { return strcasecmp(lhs.c_str(), rhs.c_str()) == 0; } +inline bool is_equal(std::string const& lhs, std::string const& rhs) +{ + return lhs == rhs; +} } inline std::string identity(std::string const& str) @@ -45,21 +49,21 @@ inline std::string identity(std::string const& str) inline std::string escape_keyword(std::string const& name) { - using detail::is_iequal; - if(is_iequal(name, "delete") - || is_iequal(name, "do") - || is_iequal(name, "lock") - || is_iequal(name, "event") - || is_iequal(name, "in") - || is_iequal(name, "object") - || is_iequal(name, "interface") - || is_iequal(name, "string") - || is_iequal(name, "internal") - || is_iequal(name, "fixed") - || is_iequal(name, "base")) + using detail::is_equal; + if(is_equal(name, "delete") + || is_equal(name, "do") + || is_equal(name, "lock") + || is_equal(name, "event") + || is_equal(name, "in") + || is_equal(name, "object") + || is_equal(name, "interface") + || is_equal(name, "string") + || is_equal(name, "internal") + || is_equal(name, "fixed") + || is_equal(name, "base")) return "kw_" + name; - if (is_iequal(name, "Finalize")) + if (is_equal(name, "Finalize")) return name + "Add"; // Eo's Finalize is actually the end of efl_add. return name; } @@ -169,7 +173,7 @@ void reorder_verb(std::vector &names) inline std::string managed_namespace(std::string const& ns) { - return utils::to_lowercase(escape_keyword(ns)); + return escape_keyword(utils::remove_all(ns, '_')); } inline std::string managed_method_name(attributes::function_def const& f) @@ -208,7 +212,7 @@ inline std::string type_full_eolian_name(attributes::regular_type_def const& typ inline std::string type_full_managed_name(attributes::regular_type_def const& type) { - return join_namespaces(type.namespaces, '.', managed_namespace) + type.base_type; + return join_namespaces(type.namespaces, '.', managed_namespace) + utils::remove_all(type.base_type, '_'); } inline std::string struct_full_eolian_name(attributes::struct_def const& struct_) @@ -216,9 +220,22 @@ inline std::string struct_full_eolian_name(attributes::struct_def const& struct_ return join_namespaces(struct_.namespaces, '.') + struct_.cxx_name; } -inline std::string enum_managed_name(attributes::enum_def const& enum_) +template +inline std::string typedecl_managed_name(T const& item) { - return enum_.cxx_name; + return utils::remove_all(item.cxx_name, '_'); +} + +inline std::string typedecl_managed_name(attributes::function_def const& func) +{ + return utils::remove_all(func.name, '_'); +} + + +inline std::string enum_field_managed_name(std::string name) +{ + std::vector names = utils::split(name, '_'); + return utils::to_pascal_case(names); } inline std::string to_field_name(std::string const& in) @@ -226,41 +243,106 @@ inline std::string to_field_name(std::string const& in) return utils::capitalize(in); } -// Class name translation (interface/concrete/inherit/etc) -template -inline std::string klass_interface_name(T const& klass) +inline std::string managed_part_name(attributes::part_def const& part) { - return "I" + klass.eolian_name; + std::vector names = utils::split(part.name, '_'); + return utils::to_pascal_case(names); } -template -inline std::string klass_full_interface_name(T const& klass) +// Class name translation (interface/concrete/inherit/etc) +struct klass_interface_name_generator { - return join_namespaces(klass.namespaces, '.', managed_namespace) + klass_interface_name(klass); -} + + template + std::string operator()(T const& klass) const + { + return utils::remove_all(klass.eolian_name, '_'); + } + + template + bool generate(OutputIterator sink, Attr const& attribute, Context const& context) const + { + return as_generator((*this).operator()(attribute)).generate(sink, attributes::unused, context); + } +} klass_interface_name; + +struct klass_full_interface_name_generator +{ + template + std::string operator()(T const& klass) const + { + return join_namespaces(klass.namespaces, '.', managed_namespace) + klass_interface_name(klass); + } + + template + bool generate(OutputIterator sink, Attr const& attribute, Context const& context) const + { + return as_generator((*this).operator()(attribute)).generate(sink, attributes::unused, context); + } +} klass_full_interface_name; template inline std::string klass_concrete_name(T const& klass) { - return klass.eolian_name; + std::string name = utils::remove_all(klass.eolian_name, '_'); + if (klass.type == attributes::class_type::regular || klass.type == attributes::class_type::abstract_) + return name; + return name + "Concrete"; } -template -inline std::string klass_full_concrete_name(T const& klass) +struct klass_full_concrete_name_generator { - return join_namespaces(klass.namespaces, '.', managed_namespace) + klass_concrete_name(klass); -} + template + std::string operator()(T const& klass) const + { + return join_namespaces(klass.namespaces, '.', managed_namespace) + klass_concrete_name(klass); + } + + template + bool generate(OutputIterator sink, Attr const& attribute, Context const& context) const + { + return as_generator((*this).operator()(attribute)).generate(sink, attributes::unused, context); + } +} klass_full_concrete_name; + +struct klass_full_concrete_or_interface_name_generator +{ + template + std::string operator()(T const& klass) const + { + switch(klass.type) + { + case attributes::class_type::abstract_: + case attributes::class_type::regular: + return klass_full_concrete_name(klass); + } + return klass_full_interface_name(klass); + + } + + template + bool generate(OutputIterator, attributes::unused_type, Context const&) const + { + return true; + } + + template + bool generate(OutputIterator sink, Attr const& attribute, Context const& context) const + { + return as_generator((*this).operator()(attribute)).generate(sink, attributes::unused, context); + } +} klass_full_concrete_or_interface_name; template inline std::string klass_inherit_name(T const& klass) { - return klass.eolian_name + "Inherit"; + return klass_concrete_name(klass); } template inline std::string klass_native_inherit_name(T const& klass) { - return klass.eolian_name + "NativeInherit"; + return klass_concrete_name(klass) + "NativeInherit"; } template @@ -282,17 +364,20 @@ inline std::string managed_event_name(std::string const& name) inline std::string managed_event_args_short_name(attributes::event_def const& evt) { - return name_helpers::managed_event_name(evt.name) + "_Args"; + std::string ret; + ret = klass_interface_name(evt.klass); + return ret + name_helpers::managed_event_name(evt.name) + "_Args"; } inline std::string managed_event_args_name(attributes::event_def evt) { - return klass_full_concrete_name(evt.klass) + "." + managed_event_args_short_name(evt); + return join_namespaces(evt.klass.namespaces, '.', managed_namespace) + + managed_event_args_short_name(evt); } inline std::string translate_inherited_event_name(const attributes::event_def &evt, const attributes::klass_def &klass) { - return join_namespaces(klass.namespaces, '_') + klass.cxx_name + "_" + managed_event_name(evt.name); + return join_namespaces(klass.namespaces, '_') + klass_interface_name(klass) + "_" + managed_event_name(evt.name); } // Open/close namespaces @@ -318,4 +403,34 @@ bool close_namespaces(OutputIterator sink, std::vector const& names } // namespace eolian_mono + +namespace efl { namespace eolian { namespace grammar { + +template <> +struct is_eager_generator : std::true_type {}; +template <> +struct is_generator : std::true_type {}; + +template <> +struct is_eager_generator : std::true_type {}; +template <> +struct is_generator : std::true_type {}; + +template <> +struct is_eager_generator : std::true_type {}; +template <> +struct is_generator : std::true_type {}; + +template <> +struct is_eager_generator : std::true_type {}; +template <> +struct is_generator : std::true_type {}; + +namespace type_traits { +template <> +struct attributes_needed : std::integral_constant {}; +} + +} } } + #endif diff --git a/src/bin/eolian_mono/eolian/mono/parameter.hh b/src/bin/eolian_mono/eolian/mono/parameter.hh index 55ea6f4115..70d22fb97e 100644 --- a/src/bin/eolian_mono/eolian/mono/parameter.hh +++ b/src/bin/eolian_mono/eolian/mono/parameter.hh @@ -458,7 +458,7 @@ struct marshall_parameter_generator ).generate(sink, std::make_tuple(param, param_name), context); return as_generator( - "IntPtr " << param_name << "_data, " << type << "Internal " << param_name << ", Eina_Free_Cb " + "IntPtr " << param_name << "_data, " << type << "Internal " << param_name << ", EinaFreeCb " << param_name << "_free_cb" ).generate(sink, param, context); } @@ -527,7 +527,7 @@ struct argument_invocation_generator else if (param.type.original_type.visit(is_fp_visitor{})) { std::string param_name = escape_keyword(param.param_name); - return as_generator("GCHandle.ToIntPtr(" << param_name << "_handle), " << type << "Wrapper.Cb, efl.eo.Globals.free_gchandle") + return as_generator("GCHandle.ToIntPtr(" << param_name << "_handle), " << type << "Wrapper.Cb, Efl.Eo.Globals.free_gchandle") .generate(sink, param.type, context); } else @@ -553,7 +553,7 @@ struct native_convert_in_variable_generator if (param.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(param, regular)) { return as_generator( - "var " << string << " = eina.PrimitiveConversion.PointerToManaged<" << type << ">(" << escape_keyword(param.param_name) << ");\n" + "var " << string << " = Eina.PrimitiveConversion.PointerToManaged<" << type << ">(" << escape_keyword(param.param_name) << ");\n" ).generate(sink, std::make_tuple(in_variable_name(param.param_name), param.type), context); } else if (helpers::need_struct_conversion(regular)) @@ -565,7 +565,7 @@ struct native_convert_in_variable_generator else if (param.type.c_type == "Eina_Binbuf *" || param.type.c_type == "const Eina_Binbuf *") { return as_generator( - "var " << string << " = new eina.Binbuf(" << escape_keyword(param.param_name) << ", " << (param.type.has_own ? "true" : "false") << ");\n" + "var " << string << " = new Eina.Binbuf(" << escape_keyword(param.param_name) << ", " << (param.type.has_own ? "true" : "false") << ");\n" ).generate(sink, in_variable_name(param.param_name), context); } else if (param.type.c_type == "Eina_Hash *" || param.type.c_type == "const Eina_Hash *") @@ -622,7 +622,7 @@ struct convert_in_variable_generator if (param.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(param, regular)) { return as_generator( - "var " << string << " = eina.PrimitiveConversion.ManagedToPointerAlloc(" << escape_keyword(param.param_name) << ");\n" + "var " << string << " = Eina.PrimitiveConversion.ManagedToPointerAlloc(" << escape_keyword(param.param_name) << ");\n" ).generate(sink, in_variable_name(param.param_name), context); } else if (helpers::need_struct_conversion(regular)) @@ -813,7 +813,7 @@ struct native_convert_out_variable_generator ) { return as_generator( - "eina.Binbuf " << string << " = default(eina.Binbuf);\n" + "Eina.Binbuf " << string << " = default(Eina.Binbuf);\n" ).generate(sink, out_variable_name(param.param_name), context); } else if (param_is_acceptable(param, "Eina_Array *", WANT_OWN, WANT_OUT) @@ -886,7 +886,7 @@ struct convert_out_assign_generator if (param.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion_in_return(param.type, param.direction)) { bool ret = as_generator( - string << " = eina.PrimitiveConversion.PointerToManaged<" << type << ">(" << out_variable_name(param.param_name) << ");\n" + string << " = Eina.PrimitiveConversion.PointerToManaged<" << type << ">(" << out_variable_name(param.param_name) << ");\n" ).generate(sink, std::make_tuple(escape_keyword(param.param_name), param.type), context); if (param.type.has_own) @@ -908,7 +908,7 @@ struct convert_out_assign_generator ) { return as_generator( - string << " = new eina.Binbuf(" << string << ", " << (param.type.has_own ? "true" : "false") << ");\n" + string << " = new Eina.Binbuf(" << string << ", " << (param.type.has_own ? "true" : "false") << ");\n" ).generate(sink, std::make_tuple(escape_keyword(param.param_name), out_variable_name(param.param_name)), context); } else if (param_is_acceptable(param, "Eina_Hash *", WANT_OWN, WANT_OUT) @@ -1032,7 +1032,7 @@ struct convert_return_generator if (ret_type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion_in_return(ret_type, attributes::parameter_direction::unknown)) { return as_generator( - "var __ret_tmp = eina.PrimitiveConversion.PointerToManaged<" << type << ">(_ret_var);\n" + "var __ret_tmp = Eina.PrimitiveConversion.PointerToManaged<" << type << ">(_ret_var);\n" << scope_tab << scope_tab << (ret_type.has_own ? ("Marshal.FreeHGlobal(_ret_var);\n"): "\n") << scope_tab << scope_tab << "return __ret_tmp;\n" ).generate(sink, ret_type, context); @@ -1045,7 +1045,7 @@ struct convert_return_generator } else if (ret_type.c_type == "Eina_Binbuf *" || ret_type.c_type == "const Eina_Binbuf *") { - if (!as_generator("var _binbuf_ret = new eina.Binbuf(_ret_var, " << std::string{ret_type.has_own ? "true" : "false"} << ");\n" + if (!as_generator("var _binbuf_ret = new Eina.Binbuf(_ret_var, " << std::string{ret_type.has_own ? "true" : "false"} << ");\n" << scope_tab << scope_tab << "return _binbuf_ret;\n") .generate(sink, attributes::unused, context)) return false; @@ -1104,7 +1104,7 @@ struct native_convert_out_assign_generator if (param.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion_in_return(param.type, param.direction)) { return as_generator( - string << " = eina.PrimitiveConversion.ManagedToPointerAlloc(" << string << ");\n" + string << " = Eina.PrimitiveConversion.ManagedToPointerAlloc(" << string << ");\n" ).generate(sink, std::make_tuple(escape_keyword(param.param_name), out_variable_name(param.param_name)), context); } else if (helpers::need_struct_conversion(regular)) @@ -1121,7 +1121,7 @@ struct native_convert_out_assign_generator return false; } return as_generator( - string << "= efl.eo.Globals.cached_stringshare_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_stringshares, " << string << ");\n" + string << "= Efl.Eo.Globals.cached_stringshare_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_stringshares, " << string << ");\n" ).generate(sink, std::make_tuple(escape_keyword(param.param_name), out_variable_name(param.param_name)), context); } else if (param_is_acceptable(param, "const char *", !WANT_OWN, WANT_OUT)) @@ -1132,7 +1132,7 @@ struct native_convert_out_assign_generator return false; } return as_generator( - string << "= efl.eo.Globals.cached_string_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_strings, " << string << ");\n" + string << "= Efl.Eo.Globals.cached_string_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_strings, " << string << ");\n" ).generate(sink, std::make_tuple(escape_keyword(param.param_name), out_variable_name(param.param_name)), context); } else if (param_is_acceptable(param, "Eina_Binbuf *", WANT_OWN, WANT_OUT) @@ -1251,7 +1251,7 @@ struct native_convert_return_generator if (ret_type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion_in_return(ret_type, attributes::parameter_direction::unknown) ) { return as_generator( - "return eina.PrimitiveConversion.ManagedToPointerAlloc(_ret_var);\n" + "return Eina.PrimitiveConversion.ManagedToPointerAlloc(_ret_var);\n" ).generate(sink, attributes::unused, context); } else if (helpers::need_struct_conversion(regular)) @@ -1270,7 +1270,7 @@ struct native_convert_return_generator return false; } return as_generator( - "return efl.eo.Globals.cached_string_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_strings, _ret_var);\n" + "return Efl.Eo.Globals.cached_string_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_strings, _ret_var);\n" ).generate(sink, attributes::unused, context); } else @@ -1288,7 +1288,7 @@ struct native_convert_return_generator return false; } return as_generator( - "return efl.eo.Globals.cached_stringshare_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_stringshares, _ret_var);\n" + "return Efl.Eo.Globals.cached_stringshare_to_intptr(((" << name_helpers::klass_inherit_name(*klass) << ")wrapper).cached_stringshares, _ret_var);\n" ).generate(sink, attributes::unused, context); } else diff --git a/src/bin/eolian_mono/eolian/mono/part_definition.hh b/src/bin/eolian_mono/eolian/mono/part_definition.hh index 94fc3cb63c..bd12ee2a40 100644 --- a/src/bin/eolian_mono/eolian/mono/part_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/part_definition.hh @@ -18,14 +18,13 @@ struct part_definition_generator template bool generate(OutputIterator sink, attributes::part_def const& part, Context const& context) const { - auto part_interface_name = name_helpers::klass_full_interface_name(part.klass); - auto part_klass_name = name_helpers::klass_full_concrete_name(part.klass); + auto part_klass_name = name_helpers::klass_full_concrete_or_interface_name(part.klass); return as_generator(scope_tab << documentation - << scope_tab << "public " << part_interface_name << " " << utils::capitalize(part.name) << "\n" + << scope_tab << "public " << part_klass_name << " " << name_helpers::managed_part_name(part) << "\n" << scope_tab << "{\n" << scope_tab << scope_tab << "get\n" << scope_tab << scope_tab << "{\n" - << scope_tab << scope_tab << scope_tab << "efl.IObject obj = efl_part_get(raw_handle, \"" << part.name << "\");\n" + << scope_tab << scope_tab << scope_tab << "Efl.Object obj = efl_part_get(NativeHandle, \"" << part.name << "\");\n" << scope_tab << scope_tab << scope_tab << "return " << part_klass_name << ".static_cast(obj);\n" << scope_tab << scope_tab << "}\n" << scope_tab << "}\n" diff --git a/src/bin/eolian_mono/eolian/mono/struct_definition.hh b/src/bin/eolian_mono/eolian/mono/struct_definition.hh index 58007a2cdd..99347ed1dc 100644 --- a/src/bin/eolian_mono/eolian/mono/struct_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/struct_definition.hh @@ -18,12 +18,12 @@ namespace eolian_mono { inline std::string binding_struct_name(attributes::struct_def const& struct_) { - return struct_.cxx_name; + return name_helpers::typedecl_managed_name(struct_); } inline std::string binding_struct_internal_name(attributes::struct_def const& struct_) { - return struct_.cxx_name + "_StructInternal"; + return binding_struct_name(struct_) + "_StructInternal"; } struct struct_definition_generator @@ -175,7 +175,7 @@ struct to_internal_field_convert_generator if (klass) { if (!as_generator( - scope_tab << scope_tab << "_internal_struct." << string << " = _external_struct." << string << ".raw_handle;\n") + scope_tab << scope_tab << "_internal_struct." << string << " = _external_struct." << string << ".NativeHandle;\n") .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } @@ -196,7 +196,7 @@ struct to_internal_field_convert_generator else if (field.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(regular)) { if (!as_generator( - scope_tab << scope_tab << "_internal_struct." << string << " = eina.PrimitiveConversion.ManagedToPointerAlloc(_external_struct." << string << ");\n") + scope_tab << scope_tab << "_internal_struct." << string << " = Eina.PrimitiveConversion.ManagedToPointerAlloc(_external_struct." << string << ");\n") .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } @@ -210,14 +210,14 @@ struct to_internal_field_convert_generator else if (regular && (regular->base_type == "string" || regular->base_type == "mstring")) { if (!as_generator( - scope_tab << scope_tab << "_internal_struct." << string << " = eina.MemoryNative.StrDup(_external_struct." << string << ");\n") + scope_tab << scope_tab << "_internal_struct." << string << " = Eina.MemoryNative.StrDup(_external_struct." << string << ");\n") .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } else if (regular && regular->base_type == "stringshare") { if (!as_generator( - scope_tab << scope_tab << "_internal_struct." << string << " = eina.Stringshare.eina_stringshare_add(_external_struct." << string << ");\n") + scope_tab << scope_tab << "_internal_struct." << string << " = Eina.Stringshare.eina_stringshare_add(_external_struct." << string << ");\n") .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } @@ -273,9 +273,9 @@ struct to_external_field_convert_generator if (!as_generator( "\n" << scope_tab << scope_tab << "_external_struct." << string - << " = (" << interface_name << ") System.Activator.CreateInstance(typeof(" + << " = (" << concrete_name << ") System.Activator.CreateInstance(typeof(" << concrete_name << "), new System.Object[] {_internal_struct." << string << "});\n" - << scope_tab << scope_tab << "efl.eo.Globals.efl_ref(_internal_struct." << string << ");\n\n") + << scope_tab << scope_tab << "Efl.Eo.Globals.efl_ref(_internal_struct." << string << ");\n\n") .generate(sink, std::make_tuple(field_name, field_name, field_name), context)) return false; } @@ -308,7 +308,7 @@ struct to_external_field_convert_generator else if (field.type.is_ptr && helpers::need_pointer_conversion(regular) && !helpers::need_struct_conversion(regular)) { if (!as_generator( - scope_tab << scope_tab << "_external_struct." << string << " = eina.PrimitiveConversion.PointerToManaged<" << type << ">(_internal_struct." << string << ");\n") + scope_tab << scope_tab << "_external_struct." << string << " = Eina.PrimitiveConversion.PointerToManaged<" << type << ">(_internal_struct." << string << ");\n") .generate(sink, std::make_tuple(field_name, field.type, field_name), context)) return false; } @@ -322,7 +322,7 @@ struct to_external_field_convert_generator else if (regular && (regular->base_type == "string" || regular->base_type == "mstring" || regular->base_type == "stringshare")) { if (!as_generator( - scope_tab << scope_tab << "_external_struct." << string << " = eina.StringConversion.NativeUtf8ToManagedString(_internal_struct." << string << ");\n") + scope_tab << scope_tab << "_external_struct." << string << " = Eina.StringConversion.NativeUtf8ToManagedString(_internal_struct." << string << ");\n") .generate(sink, std::make_tuple(field_name, field_name), context)) return false; } @@ -339,14 +339,14 @@ struct to_external_field_convert_generator else if (field.type.c_type == "Eina_Value" || field.type.c_type == "const Eina_Value") { if (!as_generator( - scope_tab << scope_tab << "_external_struct." << string << " = new eina.Value(_internal_struct." << string << ");\n" + scope_tab << scope_tab << "_external_struct." << string << " = new Eina.Value(_internal_struct." << string << ");\n" ).generate(sink, std::make_tuple(field_name, field_name), context)) return false; } else if (field.type.c_type == "Eina_Value *" || field.type.c_type == "const Eina_Value *") { if (!as_generator( - scope_tab << scope_tab << "_external_struct." << string << " = new eina.Value(_internal_struct." << string << ", eina.Ownership.Unmanaged);\n" + scope_tab << scope_tab << "_external_struct." << string << " = new Eina.Value(_internal_struct." << string << ", Eina.Ownership.Unmanaged);\n" ).generate(sink, std::make_tuple(field_name, field_name), context)) return false; } @@ -369,8 +369,8 @@ struct struct_binding_conversion_functions_generator // Open conversion class if (!as_generator ( - "/// Conversion class for struct " << struct_.cxx_name << "\n" - "public static class " << struct_.cxx_name << "_StructConversion\n{\n" + "/// Conversion class for struct " << name_helpers::typedecl_managed_name(struct_) << "\n" + "public static class " << name_helpers::typedecl_managed_name(struct_) << "_StructConversion\n{\n" ) .generate(sink, nullptr, context)) return false; diff --git a/src/bin/eolian_mono/eolian/mono/type_impl.hh b/src/bin/eolian_mono/eolian/mono/type_impl.hh index 09c4bc198d..3e4ae8d124 100644 --- a/src/bin/eolian_mono/eolian/mono/type_impl.hh +++ b/src/bin/eolian_mono/eolian/mono/type_impl.hh @@ -117,7 +117,7 @@ struct visitor_generate }} , {"Eina.Error", nullptr, [&] // Eina.Error { - return regular_type_def{" eina.Error", regular.base_qualifier, {}}; + return regular_type_def{" Eina.Error", regular.base_qualifier, {}}; }} // TODO , {"string", nullptr, [&] { @@ -139,16 +139,16 @@ struct visitor_generate }} , {"strbuf", nullptr, [&] { - return regular_type_def{" eina.Strbuf", regular.base_qualifier, {}}; + return regular_type_def{" Eina.Strbuf", regular.base_qualifier, {}}; }} , {"any_value", true, [&] - { return regular_type_def{" eina.Value", regular.base_qualifier, {}}; + { return regular_type_def{" Eina.Value", regular.base_qualifier, {}}; }} , {"any_value", false, [&] - { return regular_type_def{" eina.Value", regular.base_qualifier, {}}; + { return regular_type_def{" Eina.Value", regular.base_qualifier, {}}; }} , {"any_value_ptr", nullptr, [&] - { return regular_type_def{" eina.Value", regular.base_qualifier, {}}; + { return regular_type_def{" Eina.Value", regular.base_qualifier, {}}; }} // FIXME add proper support for any_value_ptr }; std::string full_type_name = name_helpers::type_full_eolian_name(regular); @@ -237,7 +237,10 @@ struct visitor_generate } bool operator()(attributes::klass_name klass) const { - return as_generator(string).generate(sink, name_helpers::klass_full_interface_name(klass), *context); + if(klass.type == attributes::class_type::regular || klass.type == attributes::class_type::abstract_) + return as_generator(string).generate(sink, name_helpers::klass_full_concrete_name(klass), *context); + else + return as_generator(string).generate(sink, name_helpers::klass_full_interface_name(klass), *context); } bool operator()(attributes::complex_type_def const& complex) const { @@ -255,51 +258,51 @@ struct visitor_generate {"list", nullptr, nullptr, [&] { complex_type_def c = complex; - c.outer.base_type = "eina.List"; + c.outer.base_type = "Eina.List"; return c; }} , {"inlist", nullptr, nullptr, [&] { complex_type_def c = complex; - c.outer.base_type = "eina.Inlist"; + c.outer.base_type = "Eina.Inlist"; return c; }} , {"array", nullptr, nullptr, [&] { complex_type_def c = complex; - c.outer.base_type = "eina.Array"; + c.outer.base_type = "Eina.Array"; return c; }} , {"inarray", nullptr, nullptr, [&] { complex_type_def c = complex; - c.outer.base_type = "eina.Inarray"; + c.outer.base_type = "Eina.Inarray"; return c; }} , {"hash", nullptr, nullptr , [&] { complex_type_def c = complex; - c.outer.base_type = "eina.Hash"; + c.outer.base_type = "Eina.Hash"; return c; }} , {"future", nullptr, nullptr, [&] { - (*this)(regular_type_def{" eina.Future", complex.outer.base_qualifier, {}}); + (*this)(regular_type_def{" Eina.Future", complex.outer.base_qualifier, {}}); return attributes::type_def::variant_type(); } } , {"iterator", nullptr, nullptr, [&] { complex_type_def c = complex; - c.outer.base_type = "eina.Iterator"; + c.outer.base_type = "Eina.Iterator"; return c; } } , {"accessor", nullptr, nullptr, [&] { complex_type_def c = complex; - c.outer.base_type = "eina.Accessor"; + c.outer.base_type = "Eina.Accessor"; return c; } } diff --git a/src/bin/eolian_mono/eolian/mono/using_decl.hh b/src/bin/eolian_mono/eolian/mono/using_decl.hh index fdea162f59..3d8b703392 100644 --- a/src/bin/eolian_mono/eolian/mono/using_decl.hh +++ b/src/bin/eolian_mono/eolian/mono/using_decl.hh @@ -11,18 +11,19 @@ namespace eolian_mono { namespace grammar = efl::eolian::grammar; -using efl::eolian::grammar::as_generator; -using efl::eolian::grammar::string; -using efl::eolian::grammar::html_escaped_string; -using efl::eolian::grammar::operator<<; -using efl::eolian::grammar::operator%; -using efl::eolian::grammar::operator*; -using efl::eolian::grammar::scope_tab; -using efl::eolian::grammar::lower_case; -using efl::eolian::grammar::upper_case; -using efl::eolian::grammar::lit; -using efl::eolian::grammar::qualifier_info; -using efl::eolian::grammar::context_find_tag; +using grammar::as_generator; +using grammar::string; +using grammar::html_escaped_string; +using grammar::operator<<; +using grammar::operator%; +using grammar::operator*; +using grammar::scope_tab; +using grammar::lower_case; +using grammar::upper_case; +using grammar::lit; +using grammar::qualifier_info; +using grammar::context_find_tag; +using grammar::attribute_conditional; } diff --git a/src/bin/eolian_mono/eolian/mono/utils.hh b/src/bin/eolian_mono/eolian/mono/utils.hh index 0e1c2efc29..0912db8a71 100644 --- a/src/bin/eolian_mono/eolian/mono/utils.hh +++ b/src/bin/eolian_mono/eolian/mono/utils.hh @@ -2,6 +2,7 @@ #define EOLIAN_MONO_UTILS_HPP #include +#include #include #include #include @@ -63,6 +64,12 @@ namespace eolian_mono { namespace utils { return ret; } + + inline std::string remove_all(std::string name, char target) + { + name.erase(std::remove(name.begin(), name.end(), target), name.end()); + return name; + } } } #endif diff --git a/src/bin/eolian_mono/eolian_mono.cc b/src/bin/eolian_mono/eolian_mono.cc index e142725f7d..328b983052 100644 --- a/src/bin/eolian_mono/eolian_mono.cc +++ b/src/bin/eolian_mono/eolian_mono.cc @@ -128,7 +128,10 @@ run(options_type const& opts) if (!as_generator("#pragma warning disable CS1591\n").generate(iterator, efl::eolian::grammar::attributes::unused, efl::eolian::grammar::context_null())) throw std::runtime_error("Failed to generate pragma to disable missing docs"); - if (!as_generator("using System;\nusing System.Runtime.InteropServices;\nusing System.Collections.Generic;\n") + if (!as_generator("using System;\n" + "using System.Runtime.InteropServices;\n" + "using System.Collections.Generic;\n" + "using System.ComponentModel;\n") .generate(iterator, efl::eolian::grammar::attributes::unused, efl::eolian::grammar::context_null())) { throw std::runtime_error("Failed to generate file preamble"); diff --git a/src/bindings/mono/ecore_evas_mono/ecore_evas.cs b/src/bindings/mono/ecore_evas_mono/ecore_evas.cs index c7a27dde29..fbbea7d9e1 100644 --- a/src/bindings/mono/ecore_evas_mono/ecore_evas.cs +++ b/src/bindings/mono/ecore_evas_mono/ecore_evas.cs @@ -29,9 +29,9 @@ public class EcoreEvas ecore_evas_show(handle); } - public efl.canvas.IObject canvas + public Efl.Canvas.Object canvas { - get { return new efl.canvas.Object(ecore_evas_get(handle)); } + get { return new Efl.Canvas.Object(ecore_evas_get(handle)); } } } diff --git a/src/bindings/mono/efl_mono/efl_all.cs b/src/bindings/mono/efl_mono/efl_all.cs index 0206ea1063..a8436bd8e5 100644 --- a/src/bindings/mono/efl_mono/efl_all.cs +++ b/src/bindings/mono/efl_mono/efl_all.cs @@ -4,9 +4,9 @@ using System; using System.Runtime.InteropServices; using System.Threading; -using static efl.UnsafeNativeMethods; +using static Efl.UnsafeNativeMethods; -namespace efl { +namespace Efl { static class UnsafeNativeMethods { [DllImport(efl.Libs.Ecore)] public static extern void ecore_init(); @@ -28,15 +28,15 @@ public enum Components { public static class All { private static bool InitializedUi = false; - public static void Init(efl.Components components=Components.Basic) { - eina.Config.Init(); - efl.eo.Config.Init(); + public static void Init(Efl.Components components=Components.Basic) { + Eina.Config.Init(); + Efl.Eo.Config.Init(); ecore_init(); evas_init(); eldbus.Config.Init(); if (components == Components.Ui) { - efl.ui.Config.Init(); + Efl.Ui.Config.Init(); InitializedUi = true; } } @@ -48,17 +48,17 @@ public static class All { System.GC.WaitForPendingFinalizers(); if (InitializedUi) - efl.ui.Config.Shutdown(); + Efl.Ui.Config.Shutdown(); eldbus.Config.Shutdown(); evas_shutdown(); ecore_shutdown(); - efl.eo.Config.Shutdown(); - eina.Config.Shutdown(); + Efl.Eo.Config.Shutdown(); + Eina.Config.Shutdown(); } } // Placeholder. Will move to elm_config.cs later -namespace ui { +namespace Ui { public static class Config { public static void Init() { @@ -70,7 +70,7 @@ public static class Config { #endif elm_init(0, IntPtr.Zero); - elm_policy_set((int)elm.Policy.Quit, (int)elm.Policy_Quit.Last_window_hidden); + elm_policy_set((int)Elm.Policy.Quit, (int)Elm.PolicyQuit.LastWindowHidden); } public static void Shutdown() { elm_shutdown(); diff --git a/src/bindings/mono/eina_mono/eina_accessor.cs b/src/bindings/mono/eina_mono/eina_accessor.cs index b3af7cccde..c3c09c4966 100644 --- a/src/bindings/mono/eina_mono/eina_accessor.cs +++ b/src/bindings/mono/eina_mono/eina_accessor.cs @@ -3,11 +3,11 @@ using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; -using static eina.TraitFunctions; +using static Eina.TraitFunctions; -using static eina.AccessorNativeFunctions; +using static Eina.AccessorNativeFunctions; -namespace eina { +namespace Eina { internal class AccessorNativeFunctions { diff --git a/src/bindings/mono/eina_mono/eina_array.cs b/src/bindings/mono/eina_mono/eina_array.cs index 86e69fc407..f4dd49d69e 100644 --- a/src/bindings/mono/eina_mono/eina_array.cs +++ b/src/bindings/mono/eina_mono/eina_array.cs @@ -4,10 +4,10 @@ using System; using System.Runtime.InteropServices; using System.Collections.Generic; -using static eina.TraitFunctions; -using static eina.ArrayNativeFunctions; +using static Eina.TraitFunctions; +using static Eina.ArrayNativeFunctions; -namespace eina { +namespace Eina { public static class ArrayNativeFunctions { @@ -272,9 +272,9 @@ public class Array : IEnumerable, IDisposable } - public eina.Iterator GetIterator() + public Eina.Iterator GetIterator() { - return new eina.Iterator(eina_array_iterator_new(Handle), true, false); + return new Eina.Iterator(eina_array_iterator_new(Handle), true, false); } public IEnumerator GetEnumerator() @@ -292,9 +292,9 @@ public class Array : IEnumerable, IDisposable } /// Gets an Accessor for this Array. - public eina.Accessor GetAccessor() + public Eina.Accessor GetAccessor() { - return new eina.Accessor(eina_array_accessor_new(Handle), Ownership.Managed); + return new Eina.Accessor(eina_array_accessor_new(Handle), Ownership.Managed); } } diff --git a/src/bindings/mono/eina_mono/eina_binbuf.cs b/src/bindings/mono/eina_mono/eina_binbuf.cs index ecfbfc3705..20a4c2d0ce 100644 --- a/src/bindings/mono/eina_mono/eina_binbuf.cs +++ b/src/bindings/mono/eina_mono/eina_binbuf.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.InteropServices; -namespace eina { +namespace Eina { public class Binbuf : IDisposable { @@ -16,7 +16,7 @@ public class Binbuf : IDisposable [DllImport(efl.Libs.Eina)] public static extern byte eina_binbuf_append_length(IntPtr buf, byte[] str, UIntPtr length); [DllImport(efl.Libs.Eina)] public static extern byte - eina_binbuf_append_slice(IntPtr buf, eina.Slice slice); + eina_binbuf_append_slice(IntPtr buf, Eina.Slice slice); [DllImport(efl.Libs.Eina)] public static extern byte eina_binbuf_append_buffer(IntPtr buf, IntPtr data); [DllImport(efl.Libs.Eina)] public static extern byte @@ -24,7 +24,7 @@ public class Binbuf : IDisposable [DllImport(efl.Libs.Eina)] public static extern byte eina_binbuf_insert_length(IntPtr buf, byte[] str, UIntPtr length, UIntPtr pos); [DllImport(efl.Libs.Eina)] public static extern byte - eina_binbuf_insert_slice(IntPtr buf, eina.Slice slice, UIntPtr pos); + eina_binbuf_insert_slice(IntPtr buf, Eina.Slice slice, UIntPtr pos); [DllImport(efl.Libs.Eina)] public static extern byte eina_binbuf_insert_char(IntPtr buf, byte c, UIntPtr pos); [DllImport(efl.Libs.Eina)] public static extern byte @@ -35,7 +35,7 @@ public class Binbuf : IDisposable eina_binbuf_string_free(IntPtr buf); [DllImport(efl.Libs.Eina)] public static extern UIntPtr eina_binbuf_length_get(IntPtr buf); - [DllImport(efl.Libs.Eina)] public static extern eina.Slice + [DllImport(efl.Libs.Eina)] public static extern Eina.Slice eina_binbuf_slice_get(IntPtr buf); public IntPtr Handle {get;set;} = IntPtr.Zero; @@ -146,7 +146,7 @@ public class Binbuf : IDisposable return 0 != eina_binbuf_append_char(Handle, c); } - public bool Append(eina.Slice slice) + public bool Append(Eina.Slice slice) { return 0 != eina_binbuf_append_slice(Handle, slice); } @@ -166,7 +166,7 @@ public class Binbuf : IDisposable return 0 != eina_binbuf_insert_char(Handle, c, (UIntPtr)pos); } - public bool Insert(eina.Slice slice, uint pos) + public bool Insert(Eina.Slice slice, uint pos) { return 0 != eina_binbuf_insert_slice(Handle, slice, (UIntPtr)pos); } @@ -203,7 +203,7 @@ public class Binbuf : IDisposable return eina_binbuf_length_get(Handle); } - eina.Slice GetSlice() + Eina.Slice GetSlice() { return eina_binbuf_slice_get(Handle); } diff --git a/src/bindings/mono/eina_mono/eina_common.cs b/src/bindings/mono/eina_mono/eina_common.cs index 2a9766cd4d..e2ddc70978 100644 --- a/src/bindings/mono/eina_mono/eina_common.cs +++ b/src/bindings/mono/eina_mono/eina_common.cs @@ -4,13 +4,13 @@ using System; using System.Text; using System.Runtime.InteropServices; -namespace eina +namespace Eina { namespace Callbacks { -public delegate int Eina_Compare_Cb(IntPtr data1, IntPtr data2); -public delegate void Eina_Free_Cb(IntPtr data); +public delegate int EinaCompareCb(IntPtr data1, IntPtr data2); +public delegate void EinaFreeCb(IntPtr data); } @@ -107,11 +107,11 @@ public static class PrimitiveConversion { if (nat == IntPtr.Zero) { - eina.Log.Error("Null pointer for primitive type."); + Eina.Log.Error("Null pointer for primitive type."); return default(T); } - var w = Marshal.PtrToStructure >(nat); + var w = Marshal.PtrToStructure >(nat); return w.val; } diff --git a/src/bindings/mono/eina_mono/eina_config.cs b/src/bindings/mono/eina_mono/eina_config.cs index b5a0053372..6bc0397439 100644 --- a/src/bindings/mono/eina_mono/eina_config.cs +++ b/src/bindings/mono/eina_mono/eina_config.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.InteropServices; -namespace eina { +namespace Eina { public class Config { [DllImport(efl.Libs.Eina)] private static extern int eina_init(); @@ -11,11 +11,11 @@ public class Config { public static void Init() { if (eina_init() == 0) - throw (new efl.EflException("Failed to initialize Eina")); + throw (new Efl.EflException("Failed to initialize Eina")); // Initialize the submodules here - eina.Log.Init(); - eina.Error.Init(); + Eina.Log.Init(); + Eina.Error.Init(); } public static int Shutdown() { diff --git a/src/bindings/mono/eina_mono/eina_container_common.cs b/src/bindings/mono/eina_mono/eina_container_common.cs index d40ddd8a23..838a7edb07 100644 --- a/src/bindings/mono/eina_mono/eina_container_common.cs +++ b/src/bindings/mono/eina_mono/eina_container_common.cs @@ -5,14 +5,14 @@ using System.Linq; using System.Runtime.InteropServices; using System.Collections.Generic; -using eina.Callbacks; -using static eina.HashNativeFunctions; -using static eina.InarrayNativeFunctions; -using static eina.InlistNativeFunctions; -using static eina.NativeCustomExportFunctions; -using static eina.ContainerCommonData; +using Eina.Callbacks; +using static Eina.HashNativeFunctions; +using static Eina.InarrayNativeFunctions; +using static Eina.InlistNativeFunctions; +using static Eina.NativeCustomExportFunctions; +using static Eina.ContainerCommonData; -namespace eina { +namespace Eina { public enum ElementType { NumericType, StringType, ObjectType }; @@ -150,7 +150,7 @@ public class StringElementTraits : IBaseElementTraits { if (nat == IntPtr.Zero) { - eina.Log.Error("Null pointer for Inlist node."); + Eina.Log.Error("Null pointer for Inlist node."); return default(T); } var w = Marshal.PtrToStructure< InlistNode >(nat); @@ -204,15 +204,15 @@ public class EflObjectElementTraits : IBaseElementTraits public IntPtr ManagedToNativeAlloc(T man) { - IntPtr h = ((efl.eo.IWrapper)man).raw_handle; + IntPtr h = ((Efl.Eo.IWrapper)man).NativeHandle; if (h == IntPtr.Zero) return h; - return efl.eo.Globals.efl_ref(h); + return Efl.Eo.Globals.efl_ref(h); } public IntPtr ManagedToNativeAllocRef(T man, bool refs) { - IntPtr h = refs ? ManagedToNativeAlloc(man) : ((efl.eo.IWrapper)man).raw_handle; + IntPtr h = refs ? ManagedToNativeAlloc(man) : ((Efl.Eo.IWrapper)man).NativeHandle; return intPtrTraits.ManagedToNativeAlloc(h); } @@ -235,7 +235,7 @@ public class EflObjectElementTraits : IBaseElementTraits public void NativeFree(IntPtr nat) { if (nat != IntPtr.Zero) - efl.eo.Globals.efl_unref(nat); + Efl.Eo.Globals.efl_unref(nat); } public void NativeFreeRef(IntPtr nat, bool unrefs) @@ -276,7 +276,7 @@ public class EflObjectElementTraits : IBaseElementTraits { if (nat == IntPtr.Zero) return default(T); - return (T) Activator.CreateInstance(concreteType, efl.eo.Globals.efl_ref(nat)); + return (T) Activator.CreateInstance(concreteType, Efl.Eo.Globals.efl_ref(nat)); } public T NativeToManagedRef(IntPtr nat) @@ -290,7 +290,7 @@ public class EflObjectElementTraits : IBaseElementTraits { if (nat == IntPtr.Zero) { - eina.Log.Error("Null pointer for Inlist node."); + Eina.Log.Error("Null pointer for Inlist node."); return default(T); } var w = Marshal.PtrToStructure< InlistNode >(nat); @@ -384,7 +384,7 @@ public abstract class PrimitiveElementTraits { if (nat == IntPtr.Zero) { - eina.Log.Error("Null pointer on primitive/struct container."); + Eina.Log.Error("Null pointer on primitive/struct container."); return default(T); } return PrimitiveConversion.PointerToManaged(nat); @@ -399,7 +399,7 @@ public abstract class PrimitiveElementTraits { if (nat == IntPtr.Zero) { - eina.Log.Error("Null pointer for Inlist node."); + Eina.Log.Error("Null pointer for Inlist node."); return default(T); } var w = Marshal.PtrToStructure< InlistNode >(nat); @@ -503,7 +503,7 @@ public static class TraitFunctions { public static bool IsEflObject(System.Type type) { - return typeof(efl.eo.IWrapper).IsAssignableFrom(type); + return typeof(Efl.Eo.IWrapper).IsAssignableFrom(type); } public static bool IsString(System.Type type) @@ -511,7 +511,7 @@ public static class TraitFunctions return type == typeof(string); } - public static eina.ElementType GetElementTypeCode(System.Type type) + public static Eina.ElementType GetElementTypeCode(System.Type type) { if (IsEflObject(type)) return ElementType.ObjectType; diff --git a/src/bindings/mono/eina_mono/eina_error.cs b/src/bindings/mono/eina_mono/eina_error.cs index 4271df8cea..00e8f91c6d 100644 --- a/src/bindings/mono/eina_mono/eina_error.cs +++ b/src/bindings/mono/eina_mono/eina_error.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.InteropServices; -namespace eina { +namespace Eina { public struct Error : IComparable { @@ -36,7 +36,7 @@ public struct Error : IComparable } public override string ToString() { - return "eina.Error(" + code + ")"; + return "Eina.Error(" + code + ")"; } internal static void Init() @@ -62,7 +62,7 @@ public struct Error : IComparable public static String MsgGet(Error error) { IntPtr cstr = eina_error_msg_get(error); - return eina.StringConversion.NativeUtf8ToManagedString(cstr); + return Eina.StringConversion.NativeUtf8ToManagedString(cstr); } public static void RaiseIfOccurred() @@ -75,7 +75,7 @@ public struct Error : IComparable public static void Raise(Error e) { if (e != 0) - throw (new efl.EflException(MsgGet(e))); + throw (new Efl.EflException(MsgGet(e))); } public static void Clear() diff --git a/src/bindings/mono/eina_mono/eina_hash.cs b/src/bindings/mono/eina_mono/eina_hash.cs index 7b05f4e173..590033e7ab 100644 --- a/src/bindings/mono/eina_mono/eina_hash.cs +++ b/src/bindings/mono/eina_mono/eina_hash.cs @@ -4,12 +4,12 @@ using System; using System.Runtime.InteropServices; using System.Collections.Generic; -using static eina.TraitFunctions; -using static eina.IteratorNativeFunctions; -using static eina.HashNativeFunctions; -using eina.Callbacks; +using static Eina.TraitFunctions; +using static Eina.IteratorNativeFunctions; +using static Eina.HashNativeFunctions; +using Eina.Callbacks; -namespace eina +namespace Eina { [StructLayout(LayoutKind.Sequential)] @@ -365,14 +365,14 @@ public class Hash : IEnumerable>, IDi return eina_hash_population(Handle); } - public eina.Iterator Keys() + public Eina.Iterator Keys() { - return new eina.Iterator(EinaHashIteratorKeyNew(Handle), true, false); + return new Eina.Iterator(EinaHashIteratorKeyNew(Handle), true, false); } - public eina.Iterator Values() + public Eina.Iterator Values() { - return new eina.Iterator(eina_hash_iterator_data_new(Handle), true, false); + return new Eina.Iterator(eina_hash_iterator_data_new(Handle), true, false); } public IEnumerator> GetEnumerator() @@ -382,7 +382,7 @@ public class Hash : IEnumerable>, IDi { for (IntPtr tuplePtr; eina_iterator_next(itr, out tuplePtr);) { - var tuple = Marshal.PtrToStructure(tuplePtr); + var tuple = Marshal.PtrToStructure(tuplePtr); var key = NativeToManagedRef(tuple.key); var val = NativeToManaged(tuple.data); yield return new KeyValuePair(key, val); diff --git a/src/bindings/mono/eina_mono/eina_inarray.cs b/src/bindings/mono/eina_mono/eina_inarray.cs index a9d3116a34..d81f2ad239 100644 --- a/src/bindings/mono/eina_mono/eina_inarray.cs +++ b/src/bindings/mono/eina_mono/eina_inarray.cs @@ -4,10 +4,10 @@ using System; using System.Runtime.InteropServices; using System.Collections.Generic; -using static eina.TraitFunctions; -using static eina.InarrayNativeFunctions; +using static Eina.TraitFunctions; +using static Eina.InarrayNativeFunctions; -namespace eina { +namespace Eina { public static class InarrayNativeFunctions { @@ -298,14 +298,14 @@ public class Inarray : IEnumerable, IDisposable return true; } - public eina.Iterator GetIterator() + public Eina.Iterator GetIterator() { - return new eina.Iterator(eina_inarray_iterator_new(Handle), true, false); + return new Eina.Iterator(eina_inarray_iterator_new(Handle), true, false); } - public eina.Iterator GetReversedIterator() + public Eina.Iterator GetReversedIterator() { - return new eina.Iterator(eina_inarray_iterator_reversed_new(Handle), true, false); + return new Eina.Iterator(eina_inarray_iterator_reversed_new(Handle), true, false); } public IEnumerator GetEnumerator() @@ -323,9 +323,9 @@ public class Inarray : IEnumerable, IDisposable } /// Gets an Accessor for this Array. - public eina.Accessor GetAccessor() + public Eina.Accessor GetAccessor() { - return new eina.AccessorInArray(eina_inarray_accessor_new(Handle), Ownership.Managed); + return new Eina.AccessorInArray(eina_inarray_accessor_new(Handle), Ownership.Managed); } } diff --git a/src/bindings/mono/eina_mono/eina_inlist.cs b/src/bindings/mono/eina_mono/eina_inlist.cs index c3392a2db8..0bf09d0b85 100644 --- a/src/bindings/mono/eina_mono/eina_inlist.cs +++ b/src/bindings/mono/eina_mono/eina_inlist.cs @@ -4,11 +4,11 @@ using System; using System.Runtime.InteropServices; using System.Collections.Generic; -using static eina.TraitFunctions; -using static eina.InlistNativeFunctions; -using eina.Callbacks; +using static Eina.TraitFunctions; +using static Eina.InlistNativeFunctions; +using Eina.Callbacks; -namespace eina { +namespace Eina { public static class InlistNativeFunctions { @@ -296,9 +296,9 @@ public class Inlist : IEnumerable, IDisposable } - public eina.Iterator GetIterator() + public Eina.Iterator GetIterator() { - return new eina.Iterator(eina_inlist_iterator_wrapper_new_custom_export_mono(Handle), true, false); + return new Eina.Iterator(eina_inlist_iterator_wrapper_new_custom_export_mono(Handle), true, false); } public IEnumerator GetEnumerator() @@ -315,9 +315,9 @@ public class Inlist : IEnumerable, IDisposable } /// Gets an Accessor for this List. - public eina.Accessor GetAccessor() + public Eina.Accessor GetAccessor() { - return new eina.AccessorInList(eina_inlist_accessor_new(Handle), Ownership.Managed); + return new Eina.AccessorInList(eina_inlist_accessor_new(Handle), Ownership.Managed); } } diff --git a/src/bindings/mono/eina_mono/eina_iterator.cs b/src/bindings/mono/eina_mono/eina_iterator.cs index 77f61c189b..56ebab3f0c 100644 --- a/src/bindings/mono/eina_mono/eina_iterator.cs +++ b/src/bindings/mono/eina_mono/eina_iterator.cs @@ -4,10 +4,10 @@ using System; using System.Runtime.InteropServices; using System.Collections.Generic; -using static eina.TraitFunctions; -using static eina.IteratorNativeFunctions; +using static Eina.TraitFunctions; +using static Eina.IteratorNativeFunctions; -namespace eina { +namespace Eina { public static class IteratorNativeFunctions { diff --git a/src/bindings/mono/eina_mono/eina_list.cs b/src/bindings/mono/eina_mono/eina_list.cs index 03c2ba90e7..8ad4a2f6cf 100644 --- a/src/bindings/mono/eina_mono/eina_list.cs +++ b/src/bindings/mono/eina_mono/eina_list.cs @@ -4,11 +4,11 @@ using System; using System.Runtime.InteropServices; using System.Collections.Generic; -using static eina.TraitFunctions; -using static eina.ListNativeFunctions; -using eina.Callbacks; +using static Eina.TraitFunctions; +using static Eina.ListNativeFunctions; +using Eina.Callbacks; -namespace eina { +namespace Eina { public static class ListNativeFunctions { @@ -328,14 +328,14 @@ public class List : IEnumerable, IDisposable } - public eina.Iterator GetIterator() + public Eina.Iterator GetIterator() { - return new eina.Iterator(eina_list_iterator_new(Handle), true, false); + return new Eina.Iterator(eina_list_iterator_new(Handle), true, false); } - public eina.Iterator GetReversedIterator() + public Eina.Iterator GetReversedIterator() { - return new eina.Iterator(eina_list_iterator_reversed_new(Handle), true, false); + return new Eina.Iterator(eina_list_iterator_reversed_new(Handle), true, false); } public IEnumerator GetEnumerator() @@ -352,9 +352,9 @@ public class List : IEnumerable, IDisposable } /// Gets an Accessor for this List. - public eina.Accessor GetAccessor() + public Eina.Accessor GetAccessor() { - return new eina.Accessor(eina_list_accessor_new(Handle), Ownership.Managed); + return new Eina.Accessor(eina_list_accessor_new(Handle), Ownership.Managed); } } diff --git a/src/bindings/mono/eina_mono/eina_log.cs b/src/bindings/mono/eina_mono/eina_log.cs index c5e456c3a6..855c0f3836 100644 --- a/src/bindings/mono/eina_mono/eina_log.cs +++ b/src/bindings/mono/eina_mono/eina_log.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Diagnostics.Contracts; -namespace eina { // Manual wrappers around eina functions +namespace Eina { // Manual wrappers around eina functions public class Log { diff --git a/src/bindings/mono/eina_mono/eina_promises.cs b/src/bindings/mono/eina_mono/eina_promises.cs index b617b3a986..395288cbc5 100644 --- a/src/bindings/mono/eina_mono/eina_promises.cs +++ b/src/bindings/mono/eina_mono/eina_promises.cs @@ -4,9 +4,9 @@ using System.Collections.Generic; using System.Linq; -using static eina.EinaNative.PromiseNativeMethods; +using static Eina.EinaNative.PromiseNativeMethods; -namespace eina { +namespace Eina { namespace EinaNative { @@ -21,10 +21,10 @@ static internal class PromiseNativeMethods internal static extern IntPtr eina_promise_new(IntPtr scheduler, Promise_Cancel_Cb cancel_cb, IntPtr data); [DllImport(efl.Libs.Eina)] - internal static extern void eina_promise_resolve(IntPtr scheduler, eina.Value_Native value); + internal static extern void eina_promise_resolve(IntPtr scheduler, Eina.ValueNative value); [DllImport(efl.Libs.Eina)] - internal static extern void eina_promise_reject(IntPtr scheduler, eina.Error reason); + internal static extern void eina_promise_reject(IntPtr scheduler, Eina.Error reason); [DllImport(efl.Libs.Eina)] internal static extern IntPtr eina_future_new(IntPtr promise); @@ -41,7 +41,7 @@ static internal class PromiseNativeMethods [DllImport(efl.Libs.Eina)] internal static extern IntPtr eina_future_chain_array(IntPtr prev, FutureDesc[] desc); - internal delegate eina.Value_Native FutureCb(IntPtr data, eina.Value_Native value, IntPtr dead_future); + internal delegate Eina.ValueNative FutureCb(IntPtr data, Eina.ValueNative value, IntPtr dead_future); [StructLayout(LayoutKind.Sequential)] internal struct FutureDesc @@ -82,10 +82,10 @@ public class Promise : IDisposable /// public Promise(CancelCb cancelCb=null) { - efl.ILoop loop = efl.App.GetLoopMain(); + Efl.Loop loop = Efl.App.GetLoopMain(); // Should we be able to pass different schedulers? - IntPtr scheduler = efl_loop_future_scheduler_get(loop.raw_handle); + IntPtr scheduler = efl_loop_future_scheduler_get(loop.NativeHandle); IntPtr cb_data = IntPtr.Zero; @@ -112,7 +112,7 @@ public class Promise : IDisposable if (cb != null) cb(); else - eina.Log.Info("Null promise CancelCb found"); + Eina.Log.Info("Null promise CancelCb found"); handle.Free(); } @@ -133,7 +133,7 @@ public class Promise : IDisposable { if (Handle != IntPtr.Zero) { - eina_promise_reject(Handle, eina.Error.ECANCELED); + eina_promise_reject(Handle, Eina.Error.ECANCELED); Handle = IntPtr.Zero; } } @@ -149,7 +149,7 @@ public class Promise : IDisposable /// /// This will make all futures attached to it to be called with the given value as payload. /// - public void Resolve(eina.Value value) + public void Resolve(Eina.Value value) { SanityChecks(); eina_promise_resolve(this.Handle, value); @@ -162,10 +162,10 @@ public class Promise : IDisposable /// /// Rejects a promise. /// - /// The future chain attached to this promise will be called with an eina.Value of type - /// eina.ValueType.Error and payload eina.Error.ECANCELED. + /// The future chain attached to this promise will be called with an Eina.Value of type + /// Eina.ValueType.Error and payload Eina.Error.ECANCELED. /// - public void Reject(eina.Error reason) + public void Reject(Eina.Error reason) { SanityChecks(); eina_promise_reject(this.Handle, reason); @@ -182,13 +182,13 @@ public class Future /// /// Callback attached to a future and to be called when resolving/rejecting a promise. /// - /// The eina.Value as argument can come with an eina.Error.ECANCELED as payload if the + /// The Eina.Value as argument can come with an Eina.Error.ECANCELED as payload if the /// promise/future was rejected/cancelled. /// /// The return value usually is same as the argument, forwarded, but can be changed in /// case were the chain act as a transforming pipeline. /// - public delegate eina.Value ResolvedCb(eina.Value value); + public delegate Eina.Value ResolvedCb(Eina.Value value); public IntPtr Handle { get; internal set; } @@ -197,7 +197,7 @@ public class Future /// public Future(IntPtr handle) { - Handle = ThenRaw(handle, (eina.Value value) => { + Handle = ThenRaw(handle, (Eina.Value value) => { Handle = IntPtr.Zero; return value; }); @@ -212,7 +212,7 @@ public class Future public Future(Promise promise, ResolvedCb cb=null) { IntPtr intermediate = eina_future_new(promise.Handle); - Handle = ThenRaw(intermediate, (eina.Value value) => { + Handle = ThenRaw(intermediate, (Eina.Value value) => { if (cb != null) value = cb(value); Handle = IntPtr.Zero; @@ -229,7 +229,7 @@ public class Future /// /// Cancels this future and the chain it belongs to, along with the promise linked against it. /// - /// The callbacks will still be called with eina.Error.ECANCELED as payload. The promise cancellation + /// The callbacks will still be called with Eina.Error.ECANCELED as payload. The promise cancellation /// callback will also be called if present. /// public void Cancel() @@ -263,14 +263,14 @@ public class Future desc.data = GCHandle.ToIntPtr(handle); return eina_future_then_from_desc(previous, desc); } - private static eina.Value_Native NativeResolvedCb(IntPtr data, eina.Value_Native value, IntPtr dead_future) + private static Eina.ValueNative NativeResolvedCb(IntPtr data, Eina.ValueNative value, IntPtr dead_future) { GCHandle handle = GCHandle.FromIntPtr(data); ResolvedCb cb = handle.Target as ResolvedCb; if (cb != null) value = cb(value); else - eina.Log.Warning("Failed to get future callback."); + Eina.Log.Warning("Failed to get future callback."); handle.Free(); return value; } @@ -310,7 +310,7 @@ public class Future GCHandle handle = GCHandle.FromIntPtr(descs[i].data); handle.Free(); } - eina.Log.Error($"Failed to create native future description for callbacks. Error: {e.ToString()}"); + Eina.Log.Error($"Failed to create native future description for callbacks. Error: {e.ToString()}"); return null; } return new Future(eina_future_chain_array(Handle, descs)); diff --git a/src/bindings/mono/eina_mono/eina_slice.cs b/src/bindings/mono/eina_mono/eina_slice.cs index c75c156fd7..649ffc5d98 100644 --- a/src/bindings/mono/eina_mono/eina_slice.cs +++ b/src/bindings/mono/eina_mono/eina_slice.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.InteropServices; -namespace eina { +namespace Eina { public interface ISliceBase { @@ -40,7 +40,7 @@ public struct Slice : ISliceBase } [StructLayout(LayoutKind.Sequential)] -public struct Rw_Slice : ISliceBase +public struct RwSlice : ISliceBase { public UIntPtr Len {get;set;} public IntPtr Mem {get;set;} @@ -51,13 +51,13 @@ public struct Rw_Slice : ISliceBase set { Len = (UIntPtr) value; } } - public Rw_Slice(IntPtr mem, UIntPtr len) + public RwSlice(IntPtr mem, UIntPtr len) { Mem = mem; Len = len; } - public Rw_Slice PinnedDataSet(IntPtr mem, UIntPtr len) + public RwSlice PinnedDataSet(IntPtr mem, UIntPtr len) { Mem = mem; Len = len; @@ -77,7 +77,7 @@ public struct Rw_Slice : ISliceBase public static class Eina_SliceUtils { - public static byte[] GetBytes(this eina.ISliceBase slc) + public static byte[] GetBytes(this Eina.ISliceBase slc) { var size = (int)(slc.Len); byte[] mArray = new byte[size]; diff --git a/src/bindings/mono/eina_mono/eina_strbuf.cs b/src/bindings/mono/eina_mono/eina_strbuf.cs index 310f9a9292..9d7a982abb 100644 --- a/src/bindings/mono/eina_mono/eina_strbuf.cs +++ b/src/bindings/mono/eina_mono/eina_strbuf.cs @@ -1,9 +1,9 @@ using System; using System.Runtime.InteropServices; -using static eina.EinaNative.StrbufNativeMethods; +using static Eina.EinaNative.StrbufNativeMethods; -namespace eina +namespace Eina { namespace EinaNative { diff --git a/src/bindings/mono/eina_mono/eina_stringshare.cs b/src/bindings/mono/eina_mono/eina_stringshare.cs index 4e464c27b1..83ea31ee6d 100644 --- a/src/bindings/mono/eina_mono/eina_stringshare.cs +++ b/src/bindings/mono/eina_mono/eina_stringshare.cs @@ -4,7 +4,7 @@ using System; using System.Runtime.InteropServices; -namespace eina { +namespace Eina { public class Stringshare { [DllImport(efl.Libs.Eina)] public static extern System.IntPtr diff --git a/src/bindings/mono/eina_mono/eina_value.cs b/src/bindings/mono/eina_mono/eina_value.cs index 3712f1fc51..4deeb1ad63 100644 --- a/src/bindings/mono/eina_mono/eina_value.cs +++ b/src/bindings/mono/eina_mono/eina_value.cs @@ -10,11 +10,11 @@ using System.Security; using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; -using static eina.EinaNative.UnsafeNativeMethods; -using static eina.TraitFunctions; +using static Eina.EinaNative.UnsafeNativeMethods; +using static Eina.TraitFunctions; -namespace eina { +namespace Eina { namespace EinaNative { @@ -270,11 +270,11 @@ static internal class UnsafeNativeMethods { [DllImport(efl.Libs.Eina)] [return: MarshalAsAttribute(UnmanagedType.U1)] - internal static extern bool eina_value_optional_pget(IntPtr handle, out eina.EinaNative.Value_Array output); + internal static extern bool eina_value_optional_pget(IntPtr handle, out Eina.EinaNative.Value_Array output); [DllImport(efl.Libs.Eina)] [return: MarshalAsAttribute(UnmanagedType.U1)] - internal static extern bool eina_value_optional_pget(IntPtr handle, out eina.EinaNative.Value_List output); + internal static extern bool eina_value_optional_pget(IntPtr handle, out Eina.EinaNative.Value_List output); [DllImport(efl.Libs.Eina)] [return: MarshalAsAttribute(UnmanagedType.U1)] @@ -325,11 +325,11 @@ static internal class UnsafeNativeMethods { [DllImport(efl.Libs.CustomExports)] [return: MarshalAsAttribute(UnmanagedType.U1)] - internal static extern bool eina_value_pset_wrapper(IntPtr handle, ref eina.EinaNative.Value_Array ptr); + internal static extern bool eina_value_pset_wrapper(IntPtr handle, ref Eina.EinaNative.Value_Array ptr); [DllImport(efl.Libs.CustomExports)] [return: MarshalAsAttribute(UnmanagedType.U1)] - internal static extern bool eina_value_pset_wrapper(IntPtr handle, ref eina.EinaNative.Value_List ptr); + internal static extern bool eina_value_pset_wrapper(IntPtr handle, ref Eina.EinaNative.Value_List ptr); [DllImport(efl.Libs.Eina)] [return: MarshalAsAttribute(UnmanagedType.U1)] @@ -394,14 +394,14 @@ static internal class UnsafeNativeMethods { /// Struct for passing Values by value to Unmanaged functions. [StructLayout(LayoutKind.Sequential)] -public struct Value_Native +public struct ValueNative { public IntPtr Type; public IntPtr Value; // Atually an Eina_Value_Union, but it is padded to 8 bytes. public override string ToString() { - return $"Value_Native"; + return $"ValueNative"; } } @@ -582,7 +582,7 @@ static class ValueTypeBridge private static void LoadTypes() { - eina.Config.Init(); // Make sure eina is initialized. + Eina.Config.Init(); // Make sure eina is initialized. ManagedToNative.Add(ValueType.SByte, type_sbyte()); NativeToManaged.Add(type_sbyte(), ValueType.SByte); @@ -669,9 +669,9 @@ public class Value : IDisposable, IComparable, IEquatable // Ok EINA_VALUE_TYPE_DOUBLE: double -- double // EINA_VALUE_TYPE_STRINGSHARE: const char * -- string // Ok EINA_VALUE_TYPE_STRING: const char * -- string - // Ok EINA_VALUE_TYPE_ARRAY: Eina_Value_Array -- eina.Array? - // Ok EINA_VALUE_TYPE_LIST: Eina_Value_List -- eina.List? - // EINA_VALUE_TYPE_HASH: Eina_Value_Hash -- eina.Hash? + // Ok EINA_VALUE_TYPE_ARRAY: Eina_Value_Array -- Eina.Array? + // Ok EINA_VALUE_TYPE_LIST: Eina_Value_List -- Eina.List? + // EINA_VALUE_TYPE_HASH: Eina_Value_Hash -- Eina.Hash? // EINA_VALUE_TYPE_TIMEVAL: struct timeval -- FIXME // EINA_VALUE_TYPE_BLOB: Eina_Value_Blob -- FIXME // EINA_VALUE_TYPE_STRUCT: Eina_Value_Struct -- FIXME @@ -686,7 +686,7 @@ public class Value : IDisposable, IComparable, IEquatable /// Whether this is an Optional value (meaning it can have a value or not). public bool Optional { get { - return GetValueType() == eina.ValueType.Optional; + return GetValueType() == Eina.ValueType.Optional; } /* protected set { // Should we expose this? @@ -700,7 +700,7 @@ public class Value : IDisposable, IComparable, IEquatable public bool Empty { get { SanityChecks(); - return GetValueType() == eina.ValueType.Empty; + return GetValueType() == Eina.ValueType.Empty; } } @@ -745,7 +745,7 @@ public class Value : IDisposable, IComparable, IEquatable this.Handle = Alloc(); if (this.Handle == IntPtr.Zero) - throw new OutOfMemoryException("Failed to allocate memory for eina.Value"); + throw new OutOfMemoryException("Failed to allocate memory for Eina.Value"); // Initialize to EINA_VALUE_EMPTY before performing any other operation on this value. MemoryNative.Memset(this.Handle, 0, eina_value_sizeof()); @@ -779,19 +779,19 @@ public class Value : IDisposable, IComparable, IEquatable } /// Constructor to build value from Values_Natives passed by value from C. - public Value(Value_Native value) + public Value(ValueNative value) { IntPtr tmp = IntPtr.Zero; try { this.Handle = Alloc(); if (value.Type == IntPtr.Zero) // Got an EINA_VALUE_EMPTY by value. - MemoryNative.Memset(this.Handle, 0, Marshal.SizeOf(typeof(Value_Native))); + MemoryNative.Memset(this.Handle, 0, Marshal.SizeOf(typeof(ValueNative))); else { - // We allocate this intermediate Value_Native using malloc to allow freeing with + // We allocate this intermediate ValueNative using malloc to allow freeing with // free(), avoiding a call to eina_value_flush that would wipe the underlying value contents // for pointer types like string. - tmp = MemoryNative.Alloc(Marshal.SizeOf(typeof(Value_Native))); + tmp = MemoryNative.Alloc(Marshal.SizeOf(typeof(ValueNative))); Marshal.StructureToPtr(value, tmp, false); // Can't get the address of a struct directly. this.Handle = Alloc(); @@ -811,19 +811,19 @@ public class Value : IDisposable, IComparable, IEquatable } /// Implicit conversion from managed value to native struct representation. - public static implicit operator Value_Native(Value v) + public static implicit operator ValueNative(Value v) { return v.GetNative(); } /// Implicit conversion from native struct representation to managed wrapper. - public static implicit operator Value(Value_Native v) + public static implicit operator Value(ValueNative v) { return new Value(v); } /// Creates an Value instance from a given array description. - private static Value FromArrayDesc(eina.EinaNative.Value_Array arrayDesc) + private static Value FromArrayDesc(Eina.EinaNative.Value_Array arrayDesc) { Value value = new Value(); value.Setup(ValueType.Array, ValueType.String); // Placeholder values to be overwritten by the following pset call. @@ -833,7 +833,7 @@ public class Value : IDisposable, IComparable, IEquatable } /// Creates an Value instance from a given array description. - private static Value FromListDesc(eina.EinaNative.Value_List listDesc) + private static Value FromListDesc(Eina.EinaNative.Value_List listDesc) { Value value = new Value(); value.Setup(ValueType.List, ValueType.String); // Placeholder values to be overwritten by the following pset call. @@ -898,7 +898,7 @@ public class Value : IDisposable, IComparable, IEquatable throw new ObjectDisposedException(base.GetType().Name); // Can't call setup with Empty value type (would give an eina error) - if (type == eina.ValueType.Empty) + if (type == Eina.ValueType.Empty) { // Need to cleanup as it may point to payload outside the underlying Eina_Value (like arrays and strings). if (!Empty) @@ -989,10 +989,10 @@ public class Value : IDisposable, IComparable, IEquatable Flushed = true; } - /// Get a Value_Native struct with the *value* pointed by this eina.Value. - public Value_Native GetNative() + /// Get a ValueNative struct with the *value* pointed by this Eina.Value. + public ValueNative GetNative() { - Value_Native value = (Value_Native)Marshal.PtrToStructure(this.Handle, typeof(Value_Native)); + ValueNative value = (ValueNative)Marshal.PtrToStructure(this.Handle, typeof(ValueNative)); return value; } @@ -1007,7 +1007,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_uchar(this.Handle, value); } @@ -1022,7 +1022,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_char(this.Handle, value); } @@ -1037,7 +1037,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_short(this.Handle, value); } @@ -1052,7 +1052,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_ushort(this.Handle, value); } @@ -1068,7 +1068,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_uint(this.Handle, value); } @@ -1084,7 +1084,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_int(this.Handle, value); } @@ -1100,7 +1100,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_ulong(this.Handle, value); } @@ -1116,7 +1116,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_long(this.Handle, value); } @@ -1132,7 +1132,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_float(this.Handle, value); } @@ -1149,7 +1149,7 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsNumeric()) throw (new ArgumentException( - "Trying to set numeric value on a non-numeric eina.Value")); + "Trying to set numeric value on a non-numeric Eina.Value")); return eina_value_set_wrapper_double(this.Handle, value); } @@ -1165,13 +1165,13 @@ public class Value : IDisposable, IComparable, IEquatable if (!GetValueType().IsString()) throw (new ArgumentException( - "Trying to set non-string value on a string eina.Value")); + "Trying to set non-string value on a string Eina.Value")); // No need to worry about ownership as eina_value_set will copy the passed string. return eina_value_set_wrapper_string(this.Handle, value); } /// Stores the given error value. - public bool Set(eina.Error value) + public bool Set(Eina.Error value) { SanityChecks(); @@ -1211,7 +1211,7 @@ public class Value : IDisposable, IComparable, IEquatable Marshal.StructureToPtr(value_list, ptr_val, false); break; default: - throw new InvalidValueTypeException("Only containers can be passed as raw eina.Values"); + throw new InvalidValueTypeException("Only containers can be passed as raw Eina.Values"); } return eina_value_optional_pset(this.Handle, native_type, ptr_val); @@ -1338,8 +1338,8 @@ public class Value : IDisposable, IComparable, IEquatable return true; } - /// Gets the currently stored value as an eina.Error. - public bool Get(out eina.Error value) + /// Gets the currently stored value as an Eina.Error. + public bool Get(out Eina.Error value) { SanityChecks(); bool ret; @@ -1354,7 +1354,7 @@ public class Value : IDisposable, IComparable, IEquatable return ret; } - /// Gets the currently stored value as an complex (e.g. container) eina.Value. + /// Gets the currently stored value as an complex (e.g. container) Eina.Value. public bool Get(out Value value) { SanityChecks(); @@ -1368,14 +1368,14 @@ public class Value : IDisposable, IComparable, IEquatable switch (managedType) { case ValueType.Array: - eina.EinaNative.Value_Array array_desc; + Eina.EinaNative.Value_Array array_desc; if (!eina_value_optional_pget(this.Handle, out array_desc)) return false; value = Value.FromArrayDesc(array_desc); break; case ValueType.List: - eina.EinaNative.Value_List list_desc; + Eina.EinaNative.Value_List list_desc; if (!eina_value_optional_pget(this.Handle, out list_desc)) return false; @@ -1490,7 +1490,7 @@ public class Value : IDisposable, IComparable, IEquatable return str; } - /// Empties an optional eina.Value, freeing what was previously contained. + /// Empties an optional Eina.Value, freeing what was previously contained. public bool Reset() { OptionalSanityChecks(); diff --git a/src/bindings/mono/eldbus_mono/eldbus_common.cs b/src/bindings/mono/eldbus_mono/eldbus_common.cs index 20f14d4e6f..558bfcf059 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_common.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_common.cs @@ -136,7 +136,7 @@ public abstract class BasicMessageArgument { if (!InternalAppendTo(msg)) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not append basic type to eldbus.Message"); } } @@ -145,7 +145,7 @@ public abstract class BasicMessageArgument { if (!InternalAppendTo(iter)) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not append basic type to eldbus.MessageIterator"); } } @@ -503,8 +503,8 @@ public static class Common public static void RaiseNullHandle() { if (NullHandleError == 0) - NullHandleError = eina.Error.Register("Eldbus: null handle"); - eina.Error.Raise(NullHandleError); + NullHandleError = Eina.Error.Register("Eldbus: null handle"); + Eina.Error.Raise(NullHandleError); } public delegate void Eldbus_Message_Cb(IntPtr data, IntPtr msg, IntPtr pending); @@ -526,7 +526,7 @@ public static class Common MessageDelegate dlgt = Marshal.GetDelegateForFunctionPointer(data, typeof(MessageDelegate)) as MessageDelegate; if (dlgt == null) { - eina.Log.Error("Eldbus: invalid delegate pointer from Eldbus_Message_Cb"); + Eina.Log.Error("Eldbus: invalid delegate pointer from Eldbus_Message_Cb"); return; } @@ -540,7 +540,7 @@ public static class Common } catch(Exception e) { - eina.Log.Error("Eldbus: could not convert Eldbus_Message_Cb parameters. Exception: " + e.ToString()); + Eina.Log.Error("Eldbus: could not convert Eldbus_Message_Cb parameters. Exception: " + e.ToString()); return; } @@ -550,12 +550,12 @@ public static class Common } catch(Exception e) { - eina.Log.Error("Eldbus: Eldbus_Message_Cb delegate error. Exception: " + e.ToString()); + Eina.Log.Error("Eldbus: Eldbus_Message_Cb delegate error. Exception: " + e.ToString()); } } private static Eldbus_Message_Cb message_cb_wrapper = null; - private static eina.Error NullHandleError = 0; + private static Eina.Error NullHandleError = 0; } } diff --git a/src/bindings/mono/eldbus_mono/eldbus_config.cs b/src/bindings/mono/eldbus_mono/eldbus_config.cs index 84b2ae102c..c5bae0767b 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_config.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_config.cs @@ -13,7 +13,7 @@ public static class Config public static void Init() { if (eldbus_init() == 0) - throw new efl.EflException("Failed to initialize Eldbus"); + throw new Efl.EflException("Failed to initialize Eldbus"); } public static void Shutdown() diff --git a/src/bindings/mono/eldbus_mono/eldbus_connection.cs b/src/bindings/mono/eldbus_mono/eldbus_connection.cs index 0da670efc1..61ad6b69c8 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_connection.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_connection.cs @@ -193,7 +193,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_connection_send"); } @@ -225,7 +225,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_name_request"); } @@ -246,7 +246,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_name_release"); } @@ -267,7 +267,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_name_owner_get"); } @@ -288,7 +288,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_name_owner_has"); } @@ -306,7 +306,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_names_list"); } @@ -324,7 +324,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_names_activatable_list"); } @@ -342,7 +342,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_hello"); } @@ -363,7 +363,7 @@ public class Connection : IDisposable if(pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_name_start"); } diff --git a/src/bindings/mono/eldbus_mono/eldbus_message.cs b/src/bindings/mono/eldbus_mono/eldbus_message.cs index 0a1afb66d1..82fb5dac27 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_message.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_message.cs @@ -252,7 +252,7 @@ public class Message : IDisposable var ptr = eldbus_message_method_call_new(dest, path, iface, method); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_message_method_call_new"); } return new eldbus.Message(ptr, true); @@ -263,7 +263,7 @@ public class Message : IDisposable var ptr = eldbus_message_signal_new(path, _interface, name); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_message_signal_new"); } return new eldbus.Message(ptr, true); @@ -329,7 +329,7 @@ public class Message : IDisposable var ptr = eldbus_message_error_new(Handle, error_name, error_msg); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_message_error_new"); } return new eldbus.Message(ptr, false); @@ -341,7 +341,7 @@ public class Message : IDisposable var ptr = eldbus_message_method_return_new(Handle); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_message_method_return_new"); } return new eldbus.Message(ptr, false); @@ -472,7 +472,7 @@ public class Message : IDisposable var ptr = eldbus_message_iter_get(Handle); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `MessageIterator' object from eldbus_message_iter_get"); } return new eldbus.MessageIterator(ptr, IntPtr.Zero); @@ -534,13 +534,13 @@ public class MessageIterator } else if (!eldbus_message_iter_arguments_append(Handle, signature, out new_iter)) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not append container type"); } if (new_iter == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `MessageIterator' object from eldbus_message_iter_arguments_append"); } @@ -555,7 +555,7 @@ public class MessageIterator if (new_iter == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `MessageIterator' object from eldbus_message_iter_container_new"); } @@ -573,7 +573,7 @@ public class MessageIterator if (!eldbus_message_iter_container_close(Parent, Handle)) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not close MessageIterator"); } @@ -686,7 +686,7 @@ public class MessageIterator bool r = eldbus_message_iter_get_and_next(Handle, typecode, out hdl); if (hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get argument"); } iter = new eldbus.MessageIterator(hdl, Handle); @@ -700,7 +700,7 @@ public class MessageIterator IntPtr hdl = IntPtr.Zero; if (!eldbus_message_iter_arguments_get(Handle, signatue, out hdl) || hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get argument"); } iter = new eldbus.MessageIterator(hdl, Handle); @@ -802,7 +802,7 @@ public class MessageIterator IntPtr hdl = IntPtr.Zero; if (!eldbus_message_iter_arguments_get(Handle, signatue, out hdl) || hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get argument"); } iter = new eldbus.MessageIterator(hdl, Handle); @@ -830,7 +830,7 @@ public class MessageIterator if (!eldbus_message_iter_fixed_array_get(Handle, type_code, out value, out n_elements)) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get fixed array"); } } diff --git a/src/bindings/mono/eldbus_mono/eldbus_object.cs b/src/bindings/mono/eldbus_mono/eldbus_object.cs index d07654deab..0dfe4d891e 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_object.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_object.cs @@ -122,7 +122,7 @@ public class Object : System.IDisposable if (handle == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Object' object from eldbus_object_get"); } @@ -170,7 +170,7 @@ public class Object : System.IDisposable if (conn == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Connection' object from eldbus_object_connection_get"); } @@ -217,7 +217,7 @@ public class Object : System.IDisposable if (pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_object_send"); } @@ -232,7 +232,7 @@ public class Object : System.IDisposable if (hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_object_method_call_new"); } @@ -250,7 +250,7 @@ public class Object : System.IDisposable if (pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_object_peer_ping"); } @@ -268,7 +268,7 @@ public class Object : System.IDisposable if (pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_object_peer_machine_id_get"); } @@ -286,7 +286,7 @@ public class Object : System.IDisposable if (pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_object_introspect"); } @@ -304,7 +304,7 @@ public class Object : System.IDisposable if (pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_object_managed_objects_get"); } diff --git a/src/bindings/mono/eldbus_mono/eldbus_proxy.cs b/src/bindings/mono/eldbus_mono/eldbus_proxy.cs index d7729d8a70..25903c9b21 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_proxy.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_proxy.cs @@ -134,7 +134,7 @@ public class Proxy : IDisposable var ptr = eldbus_proxy_object_get(Handle); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Object' object from eldbus_proxy_object_get"); } return new eldbus.Object(ptr, false); @@ -157,7 +157,7 @@ public class Proxy : IDisposable var ptr = eldbus_proxy_method_call_new(Handle, member); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_proxy_method_call_new"); } return new eldbus.Message(ptr, false); @@ -177,7 +177,7 @@ public class Proxy : IDisposable if (pending_hdl == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Pending' object from eldbus_proxy_send"); } @@ -190,7 +190,7 @@ public class Proxy : IDisposable var ptr = eldbus_proxy_send_and_block(Handle, msg.Handle, timeout); if (ptr == IntPtr.Zero) { - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); throw new SEHException("Eldbus: could not get `Message' object from eldbus_proxy_send_and_block"); } return new eldbus.Message(ptr, true); diff --git a/src/bindings/mono/eo_mono/iwrapper.cs b/src/bindings/mono/eo_mono/iwrapper.cs index 90f7f9b5ae..11e9fa8091 100644 --- a/src/bindings/mono/eo_mono/iwrapper.cs +++ b/src/bindings/mono/eo_mono/iwrapper.cs @@ -6,9 +6,9 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; -using static eina.NativeCustomExportFunctions; +using static Eina.NativeCustomExportFunctions; -namespace efl { namespace eo { +namespace Efl { namespace Eo { public class Globals { [DllImport(efl.Libs.Eo)] public static extern void efl_object_init(); @@ -20,8 +20,10 @@ public class Globals { _efl_add_end(IntPtr eo, byte is_ref, byte is_fallback); [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_ref(IntPtr eo); - [DllImport(efl.Libs.Eo)] public static extern void + [DllImport(efl.Libs.CustomExports)] public static extern void efl_unref(IntPtr eo); + [DllImport(efl.Libs.Eo)] public static extern int + efl_ref_count(IntPtr eo); [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_class_new(IntPtr class_description, IntPtr base0); [DllImport(efl.Libs.Eo)] public static extern IntPtr @@ -55,12 +57,12 @@ public class Globals { System.IntPtr obj, IntPtr desc, short priority, - efl.Event_Cb cb, + Efl.EventCb cb, System.IntPtr data); [DllImport(efl.Libs.Eo)] public static extern bool efl_event_callback_del( System.IntPtr obj, IntPtr desc, - efl.Event_Cb cb, + Efl.EventCb cb, System.IntPtr data); [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_object_legacy_only_event_description_get([MarshalAs(UnmanagedType.LPStr)] String name); @@ -83,36 +85,40 @@ public class Globals { if(initializer != null) description.class_initializer = Marshal.GetFunctionPointerForDelegate(initializer); - IntPtr description_ptr = eina.MemoryNative.Alloc(Marshal.SizeOf(description)); + IntPtr description_ptr = Eina.MemoryNative.Alloc(Marshal.SizeOf(description)); Marshal.StructureToPtr(description, description_ptr, false); - eina.Log.Debug("Going to register!"); - IntPtr klass = efl.eo.Globals.efl_class_new(description_ptr, base_klass, IntPtr.Zero); + Eina.Log.Debug("Going to register!"); + IntPtr klass = Efl.Eo.Globals.efl_class_new(description_ptr, base_klass, IntPtr.Zero); if(klass == IntPtr.Zero) - eina.Log.Error("klass was not registered"); - eina.Log.Debug("Registered?"); + Eina.Log.Error("klass was not registered"); + else + Eina.Log.Debug("Registered class successfully"); return klass; } - public static IntPtr instantiate_start(IntPtr klass, efl.IObject parent) + public static IntPtr instantiate_start(IntPtr klass, Efl.Object parent) { - eina.Log.Debug("Instantiating"); + Eina.Log.Debug($"Instantiating from klass 0x{klass.ToInt64():x}"); System.IntPtr parent_ptr = System.IntPtr.Zero; if(parent != null) - parent_ptr = parent.raw_handle; + parent_ptr = parent.NativeHandle; - System.IntPtr eo = efl.eo.Globals._efl_add_internal_start("file", 0, klass, parent_ptr, 1, 0); + System.IntPtr eo = Efl.Eo.Globals._efl_add_internal_start("file", 0, klass, parent_ptr, 1, 0); + Console.WriteLine($"Eo instance right after internal_start 0x{eo.ToInt64():x} with refcount {Efl.Eo.Globals.efl_ref_count(eo)}"); + Console.WriteLine($"Parent was 0x{parent_ptr.ToInt64()}"); return eo; } public static IntPtr instantiate_end(IntPtr eo) { - eina.Log.Debug("efl_add_internal_start returned"); - eo = efl.eo.Globals._efl_add_end(eo, 1, 0); - eina.Log.Debug("efl_add_end returned"); + Eina.Log.Debug("calling efl_add_internal_end"); + eo = Efl.Eo.Globals._efl_add_end(eo, 1, 0); + Eina.Log.Debug($"efl_add_end returned eo 0x{eo.ToInt64():x}"); return eo; } - public static void data_set(efl.eo.IWrapper obj) + public static void data_set(Efl.Eo.IWrapper obj) { - IntPtr pd = efl.eo.Globals.efl_data_scope_get(obj.raw_handle, obj.raw_klass); + Eina.Log.Debug($"Calling data_scope_get with obj {obj.NativeHandle.ToInt64():x} and klass {obj.NativeClass.ToInt64():x}"); + IntPtr pd = Efl.Eo.Globals.efl_data_scope_get(obj.NativeHandle, obj.NativeClass); { GCHandle gch = GCHandle.Alloc(obj); EolianPD epd; @@ -120,13 +126,13 @@ public class Globals { Marshal.StructureToPtr(epd, pd, false); } } - public static efl.eo.IWrapper data_get(IntPtr pd) + public static Efl.Eo.IWrapper data_get(IntPtr pd) { EolianPD epd = (EolianPD)Marshal.PtrToStructure(pd, typeof(EolianPD)); if(epd.pointer != IntPtr.Zero) { GCHandle gch = GCHandle.FromIntPtr(epd.pointer); - return (efl.eo.IWrapper)gch.Target; + return (Efl.Eo.IWrapper)gch.Target; } else return null; @@ -137,7 +143,7 @@ public class Globals { IntPtr ptr = IntPtr.Zero; if (!dict.TryGetValue(str, out ptr)) { - ptr = eina.StringConversion.ManagedStringToNativeUtf8Alloc(str); + ptr = Eina.StringConversion.ManagedStringToNativeUtf8Alloc(str); dict[str] = ptr; } @@ -149,7 +155,7 @@ public class Globals { IntPtr ptr = IntPtr.Zero; if (!dict.TryGetValue(str, out ptr)) { - ptr = eina.Stringshare.eina_stringshare_add(str); + ptr = Eina.Stringshare.eina_stringshare_add(str); dict[str] = ptr; } @@ -160,7 +166,7 @@ public class Globals { { foreach(IntPtr ptr in dict.Values) { - eina.MemoryNative.Free(ptr); + Eina.MemoryNative.Free(ptr); } } @@ -168,7 +174,7 @@ public class Globals { { foreach(IntPtr ptr in dict.Values) { - eina.Stringshare.eina_stringshare_del(ptr); + Eina.Stringshare.eina_stringshare_del(ptr); } } @@ -178,27 +184,27 @@ public class Globals { handle.Free(); } - public static System.Threading.Tasks.Task WrapAsync(eina.Future future, CancellationToken token) + public static System.Threading.Tasks.Task WrapAsync(Eina.Future future, CancellationToken token) { // Creates a task that will wait for SetResult for completion. // TaskCompletionSource is used to create tasks for 'external' Task sources. - var tcs = new System.Threading.Tasks.TaskCompletionSource(); + var tcs = new System.Threading.Tasks.TaskCompletionSource(); // Flag to be passed to the cancell callback bool fulfilled = false; - future.Then((eina.Value received) => { + future.Then((Eina.Value received) => { lock (future) { // Convert an failed Future to a failed Task. - if (received.GetValueType() == eina.ValueType.Error) + if (received.GetValueType() == Eina.ValueType.Error) { - eina.Error err; + Eina.Error err; received.Get(out err); - if (err == eina.Error.ECANCELED) + if (err == Eina.Error.ECANCELED) tcs.SetCanceled(); else - tcs.TrySetException(new efl.FutureException(received)); + tcs.TrySetException(new Efl.FutureException(received)); } else { @@ -213,7 +219,7 @@ public class Globals { token.Register(() => { lock (future) { - // Will trigger the Then callback above with an eina.Error + // Will trigger the Then callback above with an Eina.Error if (!fulfilled) future.Cancel(); } @@ -238,11 +244,13 @@ public static class Config public interface IWrapper { - IntPtr raw_handle + /// Pointer to internal Eo instance. + IntPtr NativeHandle { get; } - IntPtr raw_klass + /// Pointer to internal Eo class. + IntPtr NativeClass { get; } @@ -265,42 +273,42 @@ public class MarshalTest : ICustomMarshaler { public static ICustomMarshaler GetInstance(string cookie) { - eina.Log.Debug("MarshalTest.GetInstace cookie " + cookie); + Eina.Log.Debug("MarshalTest.GetInstace cookie " + cookie); return new MarshalTest(); } public void CleanUpManagedData(object ManagedObj) { - //eina.Log.Warning("MarshalTest.CleanUpManagedData not implemented"); + //Eina.Log.Warning("MarshalTest.CleanUpManagedData not implemented"); //throw new NotImplementedException(); } public void CleanUpNativeData(IntPtr pNativeData) { - //eina.Log.Warning("MarshalTest.CleanUpNativeData not implemented"); + //Eina.Log.Warning("MarshalTest.CleanUpNativeData not implemented"); //throw new NotImplementedException(); } public int GetNativeDataSize() { - eina.Log.Debug("MarshalTest.GetNativeDataSize"); + Eina.Log.Debug("MarshalTest.GetNativeDataSize"); return 0; //return 8; } public IntPtr MarshalManagedToNative(object ManagedObj) { - eina.Log.Debug("MarshalTest.MarshallManagedToNative"); - var r = ((IWrapper)ManagedObj).raw_handle; + Eina.Log.Debug("MarshalTest.MarshallManagedToNative"); + var r = ((IWrapper)ManagedObj).NativeHandle; if (typeof(U) == typeof(OwnTag)) - efl.eo.Globals.efl_ref(r); + Efl.Eo.Globals.efl_ref(r); return r; } public object MarshalNativeToManaged(IntPtr pNativeData) { - eina.Log.Debug("MarshalTest.MarshalNativeToManaged"); + Eina.Log.Debug("MarshalTest.MarshalNativeToManaged"); if (typeof(U) != typeof(OwnTag)) - efl.eo.Globals.efl_ref(pNativeData); + Efl.Eo.Globals.efl_ref(pNativeData); return Activator.CreateInstance(typeof(T), new System.Object[] {pNativeData}); // return null; } @@ -308,13 +316,13 @@ public class MarshalTest : ICustomMarshaler public class StringPassOwnershipMarshaler : ICustomMarshaler { public object MarshalNativeToManaged(IntPtr pNativeData) { - var ret = eina.StringConversion.NativeUtf8ToManagedString(pNativeData); - eina.MemoryNative.Free(pNativeData); + var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); + Eina.MemoryNative.Free(pNativeData); return ret; } public IntPtr MarshalManagedToNative(object managedObj) { - return eina.MemoryNative.StrDup((string)managedObj); + return Eina.MemoryNative.StrDup((string)managedObj); } public void CleanUpNativeData(IntPtr pNativeData) { @@ -339,11 +347,11 @@ public class StringPassOwnershipMarshaler : ICustomMarshaler { public class StringKeepOwnershipMarshaler: ICustomMarshaler { public object MarshalNativeToManaged(IntPtr pNativeData) { - return eina.StringConversion.NativeUtf8ToManagedString(pNativeData); + return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); } public IntPtr MarshalManagedToNative(object managedObj) { - return eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj); + return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj); } public void CleanUpNativeData(IntPtr pNativeData) { @@ -368,13 +376,13 @@ public class StringKeepOwnershipMarshaler: ICustomMarshaler { public class StringsharePassOwnershipMarshaler : ICustomMarshaler { public object MarshalNativeToManaged(IntPtr pNativeData) { - var ret = eina.StringConversion.NativeUtf8ToManagedString(pNativeData); - eina.Stringshare.eina_stringshare_del(pNativeData); + var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); + Eina.Stringshare.eina_stringshare_del(pNativeData); return ret; } public IntPtr MarshalManagedToNative(object managedObj) { - return eina.Stringshare.eina_stringshare_add((string)managedObj); + return Eina.Stringshare.eina_stringshare_add((string)managedObj); } public void CleanUpNativeData(IntPtr pNativeData) { @@ -399,11 +407,11 @@ public class StringsharePassOwnershipMarshaler : ICustomMarshaler { public class StringshareKeepOwnershipMarshaler : ICustomMarshaler { public object MarshalNativeToManaged(IntPtr pNativeData) { - return eina.StringConversion.NativeUtf8ToManagedString(pNativeData); + return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); } public IntPtr MarshalManagedToNative(object managedObj) { - return eina.Stringshare.eina_stringshare_add((string)managedObj); + return Eina.Stringshare.eina_stringshare_add((string)managedObj); } public void CleanUpNativeData(IntPtr pNativeData) { @@ -428,11 +436,11 @@ public class StringshareKeepOwnershipMarshaler : ICustomMarshaler { public class StrbufPassOwnershipMarshaler : ICustomMarshaler { public object MarshalNativeToManaged(IntPtr pNativeData) { - return new eina.Strbuf(pNativeData, eina.Ownership.Managed); + return new Eina.Strbuf(pNativeData, Eina.Ownership.Managed); } public IntPtr MarshalManagedToNative(object managedObj) { - eina.Strbuf buf = managedObj as eina.Strbuf; + Eina.Strbuf buf = managedObj as Eina.Strbuf; buf.ReleaseOwnership(); return buf.Handle; } @@ -459,11 +467,11 @@ public class StrbufPassOwnershipMarshaler : ICustomMarshaler { public class StrbufKeepOwnershipMarshaler: ICustomMarshaler { public object MarshalNativeToManaged(IntPtr pNativeData) { - return new eina.Strbuf(pNativeData, eina.Ownership.Unmanaged); + return new Eina.Strbuf(pNativeData, Eina.Ownership.Unmanaged); } public IntPtr MarshalManagedToNative(object managedObj) { - eina.Strbuf buf = managedObj as eina.Strbuf; + Eina.Strbuf buf = managedObj as Eina.Strbuf; return buf.Handle; } @@ -500,18 +508,18 @@ public class EflException : Exception } } -/// Exception to be raised when a Task fails due to a failed eina.Future. +/// Exception to be raised when a Task fails due to a failed Eina.Future. public class FutureException : EflException { - /// The error code returned by the failed eina.Future. - public eina.Error Error { get; private set; } + /// The error code returned by the failed Eina.Future. + public Eina.Error Error { get; private set; } - /// Construct a new exception from the eina.Error stored in the given eina.Value. - public FutureException(eina.Value value) : base("Future failed.") + /// Construct a new exception from the Eina.Error stored in the given Eina.Value. + public FutureException(Eina.Value value) : base("Future failed.") { - if (value.GetValueType() != eina.ValueType.Error) - throw new ArgumentException("FutureException must receive an eina.Value with eina.Error."); - eina.Error err; + if (value.GetValueType() != Eina.ValueType.Error) + throw new ArgumentException("FutureException must receive an Eina.Value with Eina.Error."); + Eina.Error err; value.Get(out err); Error = err; } diff --git a/src/bindings/mono/eo_mono/workaround.cs b/src/bindings/mono/eo_mono/workaround.cs index 253e3758f3..1fa3889d48 100644 --- a/src/bindings/mono/eo_mono/workaround.cs +++ b/src/bindings/mono/eo_mono/workaround.cs @@ -51,29 +51,28 @@ public struct EolianPD } #pragma warning disable 0169 -public struct Evas_Object_Box_Layout +public struct EvasObjectBoxLayout { IntPtr o; IntPtr priv; IntPtr user_data; }; [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] -public struct Evas_Object_Box_Data +public struct EvasObjectBoxData { } -public delegate void Eina_Free_Cb(IntPtr data); -public struct Evas_Object_Box_Option { +public struct EvasObjectBoxOption { IntPtr obj; [MarshalAsAttribute(UnmanagedType.U1)] bool max_reached; [MarshalAsAttribute(UnmanagedType.U1)] bool min_reached; - evas.Coord alloc_size; + Evas.Coord alloc_size; }; #pragma warning restore 0169 -namespace efl { +namespace Efl { [StructLayout(LayoutKind.Sequential)] -public struct Event_Description { +public struct EventDescription { public IntPtr Name; [MarshalAs(UnmanagedType.U1)] public bool Unfreezable; [MarshalAs(UnmanagedType.U1)] public bool Legacy_is; @@ -81,7 +80,7 @@ public struct Event_Description { private static Dictionary descriptions = new Dictionary(); - public Event_Description(string name) + public EventDescription(string name) { this.Name = GetNative(name); this.Unfreezable = false; @@ -93,10 +92,10 @@ public struct Event_Description { { if (!descriptions.ContainsKey(name)) { - IntPtr data = efl.eo.Globals.dlsym(efl.eo.Globals.RTLD_DEFAULT, name); + IntPtr data = Efl.Eo.Globals.dlsym(Efl.Eo.Globals.RTLD_DEFAULT, name); if (data == IntPtr.Zero) { - string error = eina.StringConversion.NativeUtf8ToManagedString(efl.eo.Globals.dlerror()); + string error = Eina.StringConversion.NativeUtf8ToManagedString(Efl.Eo.Globals.dlerror()); throw new Exception(error); } descriptions.Add(name, data); @@ -105,17 +104,10 @@ public struct Event_Description { } }; - -public delegate void Event_Cb(System.IntPtr data, ref Event_StructInternal evt); -#pragma warning disable 0169 -public struct Dbg_Info { - IntPtr name; - IntPtr value; -}; -#pragma warning restore 0169 +public delegate void EventCb(System.IntPtr data, ref Event_StructInternal evt); [StructLayout(LayoutKind.Sequential)] -public struct Text_Cursor_Cursor { +public struct TextCursorCursor { IntPtr obj; UIntPtr pos; // UIntPtr to automatically change size_t between 32/64 IntPtr node; @@ -123,7 +115,7 @@ public struct Text_Cursor_Cursor { } [StructLayout(LayoutKind.Sequential)] -public struct Text_Annotate_Annotation { +public struct TextAnnotateAnnotation { IntPtr list; IntPtr obj; IntPtr start_node; @@ -131,40 +123,36 @@ public struct Text_Annotate_Annotation { [MarshalAsAttribute(UnmanagedType.U1)]bool is_item; } -public delegate void Signal_Cb(IntPtr data, IntPtr obj, IntPtr emission, IntPtr source); +public delegate void SignalCb(IntPtr data, IntPtr obj, IntPtr emission, IntPtr source); -namespace access { +namespace Access { -public struct Action_Data { +public struct ActionData { public IntPtr name; public IntPtr action; public IntPtr param; public IntPtr func; } -} // namespace access +public struct StateSet { + private ulong val; -} // namespace efl - -namespace evas { namespace font { - -} - - -// C# does not allow typedefs, so we use these implicit conversions. -public struct Modifier_Mask { - private ulong mask; - - public static implicit operator Modifier_Mask(ulong x) + public static implicit operator StateSet(ulong x) { - return new Modifier_Mask{mask=x}; + return new StateSet{val=x}; } - public static implicit operator ulong(Modifier_Mask x) + public static implicit operator ulong(StateSet x) { - return x.mask; + return x.val; } } +} // namespace Access + +} // namespace Efl + +namespace Evas { + public struct Coord { int val; @@ -177,37 +165,8 @@ public struct Coord { } } - -} - -public struct Efl_Font_Size { - int val; - - public Efl_Font_Size(int value) { val = value; } - static public implicit operator Efl_Font_Size(int val) { - return new Efl_Font_Size(val); - } - static public implicit operator int(Efl_Font_Size coord) { - return coord.val; - } -} - -namespace eina { - -[StructLayout(LayoutKind.Sequential)] -public struct Rectangle { - public int x; - public int y; - public int w; - public int h; -} - -} - -namespace evas { - /* Copied from Evas_Legacy.h */ -public enum Text_Style_Type +public enum TextStyleType { /// plain, standard text. Plain = 0, @@ -249,246 +208,19 @@ public enum Text_Style_Type ShadowDirectionRight = 112 /* 7 >> 4 */ }; -// Copied from Evas_Common.h -// -// -// - -public enum Callback_Type -{ - /// Mouse In Event. - EVAS_CALLBACK_MOUSE_IN = 0, - /// Mouse Out Event. - EVAS_CALLBACK_MOUSE_OUT, - /// Mouse Button Down Event. - EVAS_CALLBACK_MOUSE_DOWN, - /// Mouse Button Up Event. - EVAS_CALLBACK_MOUSE_UP, - /// Mouse Move Event. - EVAS_CALLBACK_MOUSE_MOVE, - /// Mouse Wheel Event. - EVAS_CALLBACK_MOUSE_WHEEL, - /// Multi-touch Down Event. - EVAS_CALLBACK_MULTI_DOWN, - /// Multi-touch Up Event. - EVAS_CALLBACK_MULTI_UP, - /// Multi-touch Move Event. - EVAS_CALLBACK_MULTI_MOVE, - /// Object Being Freed (Called after Del). - EVAS_CALLBACK_FREE, - /// Key Press Event. - EVAS_CALLBACK_KEY_DOWN, - /// Key Release Event. - EVAS_CALLBACK_KEY_UP, - /// Focus In Event. - EVAS_CALLBACK_FOCUS_IN, - /// Focus Out Event. - EVAS_CALLBACK_FOCUS_OUT, - /// Show Event. - EVAS_CALLBACK_SHOW, - /// Hide Event. - EVAS_CALLBACK_HIDE, - /// Move Event. - EVAS_CALLBACK_MOVE, - /// Resize Event. - EVAS_CALLBACK_RESIZE, - /// Restack Event. - EVAS_CALLBACK_RESTACK, - /// Object Being Deleted (called before Free). - EVAS_CALLBACK_DEL, - /// Events go on/off hold. - EVAS_CALLBACK_HOLD, - /// Size hints changed event. - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - /// Image has been preloaded. - EVAS_CALLBACK_IMAGE_PRELOADED, - /// Canvas got focus as a whole. - EVAS_CALLBACK_CANVAS_FOCUS_IN, - /// Canvas lost focus as a whole. - EVAS_CALLBACK_CANVAS_FOCUS_OUT, - ///Called after render update regions have been calculated, - /// but only if update regions exist. - EVAS_CALLBACK_RENDER_FLUSH_PRE, - ///Called after render update regions have - /// been sent to the display server, but only - /// if update regions existed for the most recent frame. - EVAS_CALLBACK_RENDER_FLUSH_POST, - /// Canvas object got focus. - EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, - /// Canvas object lost focus. - EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, - /// Image data has been unloaded (by some mechanism in Evas that throw out original image data). - EVAS_CALLBACK_IMAGE_UNLOADED, - /// Called just before rendering starts on the canvas target. @since 1.2. - EVAS_CALLBACK_RENDER_PRE, - /// Called just after rendering stops on the canvas target. @since 1.2. - EVAS_CALLBACK_RENDER_POST, - /// Image size is changed. @since 1.8. - EVAS_CALLBACK_IMAGE_RESIZE, - /// Devices added, removed or changed on canvas. @since 1.8. - EVAS_CALLBACK_DEVICE_CHANGED, - /// Input device changed value on some axis. @since 1.13. - EVAS_CALLBACK_AXIS_UPDATE, - /// Canvas viewport resized. @since 1.15. - EVAS_CALLBACK_CANVAS_VIEWPORT_RESIZE, - ///Sentinel value to indicate last enum field during iteration. - EVAS_CALLBACK_LAST -}; - -} - -namespace elm { - -namespace atspi { -public struct State_Set { - private ulong val; - - public static implicit operator State_Set(ulong x) - { - return new State_Set{val=x}; - } - public static implicit operator ulong(State_Set x) - { - return x.val; - } -} - -[StructLayout(LayoutKind.Sequential)] -public struct Relation_Set -{ - public IntPtr pointer; // list -} -} // namespace atspi - -namespace gengrid { namespace item { -[StructLayout(LayoutKind.Sequential)] -public struct Class -{ - int version; - uint refcount; - [MarshalAsAttribute(UnmanagedType.U1)]bool delete_me; - IntPtr item_style; - IntPtr decorate_item_style; - IntPtr decorate_all_item_style; - - // Delegates inside Elm_Gen_Item_Class_Functions - IntPtr text_get; - IntPtr content_get; - IntPtr state_get; - IntPtr del; - IntPtr filter_get; - IntPtr reusable_content_get; -} -} // namespace item -} // namespace gengrid - -namespace genlist { namespace item { -[StructLayout(LayoutKind.Sequential)] -public struct Class -{ - int version; - uint refcount; - [MarshalAsAttribute(UnmanagedType.U1)]bool delete_me; - IntPtr item_style; - IntPtr decorate_item_style; - IntPtr decorate_all_item_style; - - // Delegates inside Elm_Gen_Item_Class_Functions - IntPtr text_get; - IntPtr content_get; - IntPtr state_get; - IntPtr del; - IntPtr filter_get; - IntPtr reusable_content_get; -} -} // namespace item -} // namespace genlist - -} // namespace elm +} // namespace Evas // Global delegates -public delegate IntPtr list_data_get_func_type(IntPtr l); -public delegate void region_hook_func_type(IntPtr data, IntPtr obj); -public delegate void slider_freefunc_type(IntPtr data); -public delegate void slider_func_type(double val); - public delegate int Eina_Compare_Cb(IntPtr a, IntPtr b); -public delegate void Elm_Interface_Scrollable_Cb(IntPtr obj, IntPtr data); -public delegate void Elm_Interface_Scrollable_Min_Limit_Cb(IntPtr obj, +public delegate void ElmInterfaceScrollableCb(IntPtr obj, IntPtr data); +public delegate void ElmInterfaceScrollableMinLimitCb(IntPtr obj, [MarshalAsAttribute(UnmanagedType.U1)]bool w, [MarshalAsAttribute(UnmanagedType.U1)]bool h); -public delegate void Elm_Interface_Scrollable_Resize_Cb(IntPtr obj, evas.Coord w, evas.Coord h); -public delegate void Elm_Entry_Item_Provider_Cb(IntPtr data, IntPtr obj, IntPtr item); -public delegate void Elm_Entry_Filter_Cb(IntPtr data, IntPtr obj, IntPtr text); +public delegate void ElmInterfaceScrollableResizeCb(IntPtr obj, Evas.Coord w, Evas.Coord h); [return: MarshalAsAttribute(UnmanagedType.U1)] -public delegate bool Elm_Multibuttonentry_Item_Filter_Cb(IntPtr obj, IntPtr item_label, IntPtr item_data, IntPtr data); -public delegate IntPtr Elm_Multibuttonentry_Format_Cb(int count, IntPtr data); -[return: MarshalAsAttribute(UnmanagedType.U1)] -public delegate bool Elm_Fileselector_Filter_Func(IntPtr path, [MarshalAsAttribute(UnmanagedType.U1)]bool dir, IntPtr data); -public delegate void Evas_Smart_Cb(IntPtr data, IntPtr obj, IntPtr event_info); -public delegate void Elm_Gesture_Event_Cb(IntPtr data, IntPtr event_info); -public delegate void Elm_Object_Item_Signal_Cb(IntPtr data, IntPtr item, IntPtr emission, IntPtr source); -public delegate void Elm_Tooltip_Item_Content_Cb(IntPtr data, IntPtr obj, IntPtr tooltip, IntPtr item); -public delegate void Elm_Sys_Notify_Send_Cb(IntPtr data, uint id); -public delegate IntPtr Elm_Calendar_Format_Cb(IntPtr format); - -namespace edje { - -public delegate void Signal_Cb(IntPtr data, IntPtr obj, IntPtr emission, IntPtr source); -public delegate void Markup_Filter_Cb(IntPtr data, IntPtr obj, IntPtr part, IntPtr text ); -public delegate void Item_Provider_Cb(IntPtr data, IntPtr obj, IntPtr part, IntPtr item); -// Message_Handler_Cb is now legacy - -namespace text { -public delegate void Filter_Cb(IntPtr data, IntPtr obj, IntPtr part, int _type, IntPtr text); -public delegate void Change_Cb(IntPtr data, IntPtr obj, IntPtr part); -} - - -} // namespace edje - -public enum Elm_Code_Status_Type { - ELM_CODE_STATUS_TYPE_DEFAULT = 0, - ELM_CODE_STATUS_TYPE_CURRENT, - ELM_CODE_STATUS_TYPE_IGNORED, - ELM_CODE_STATUS_TYPE_NOTE, - ELM_CODE_STATUS_TYPE_WARNING, - ELM_CODE_STATUS_TYPE_ERROR, - ELM_CODE_STATUS_TYPE_FATAL, - - ELM_CODE_STATUS_TYPE_ADDED, - ELM_CODE_STATUS_TYPE_REMOVED, - ELM_CODE_STATUS_TYPE_CHANGED, - - ELM_CODE_STATUS_TYPE_PASSED, - ELM_CODE_STATUS_TYPE_FAILED, - - ELM_CODE_STATUS_TYPE_TODO, - - ELM_CODE_STATUS_TYPE_COUNT -}; - - -[StructLayout(LayoutKind.Sequential)] -public struct Elm_Atspi_Action -{ - IntPtr name; - IntPtr action; - IntPtr param; - IntPtr func; -} - -[StructLayout(LayoutKind.Sequential)] -public struct Tm { - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; -} - -public delegate IntPtr Efl_Ui_Calendar_Format_Cb(Tm stime); // struct tm as argument +public delegate bool ElmMultibuttonentryItemFilterCb(IntPtr obj, IntPtr item_label, IntPtr item_data, IntPtr data); +public delegate IntPtr ElmMultibuttonentryFormatCb(int count, IntPtr data); +public delegate void EinaFreeCb(IntPtr data); +public delegate void EvasSmartCb(IntPtr data, IntPtr obj, IntPtr event_info); +public delegate void ElmObjectItemSignalCb(IntPtr data, IntPtr item, IntPtr emission, IntPtr source); +public delegate void ElmTooltipItemContentCb(IntPtr data, IntPtr obj, IntPtr tooltip, IntPtr item); diff --git a/src/examples/ecore.mk b/src/examples/ecore.mk index 014cb4ef66..0e4bbee8c6 100644 --- a/src/examples/ecore.mk +++ b/src/examples/ecore.mk @@ -391,6 +391,25 @@ ecore_ecore_ipc_server_example_CPPFLAGS = $(ECORE_COMMON_CPPFLAGS) $(AM_CPPFLAGS ecore_ecore_ipc_client_example_SOURCES = ecore/ecore_ipc_client_example.c ecore_ecore_ipc_client_example_CPPFLAGS = $(ECORE_COMMON_CPPFLAGS) $(AM_CPPFLAGS) +if HAVE_CSHARP + +if HAVE_WIN32 +MCSFLAGS ?= +MCSFLAGS += -define:WIN32 +endif + +EXTRA_PROGRAMS += \ +ecore/efl_mono_loop_timer_example + +ecore_efl_mono_loop_timer_example_SOURCES = \ + ecore/efl_mono_loop_timer_example.cs + +ecore/efl_mono_loop_timer_example$(EXEEXT): $(ecore_efl_mono_loop_timer_example_SOURCES) $(am_dirstamp) $(top_builddir)/src/lib/efl_mono/libefl_mono.dll + @rm -f ecore/efl_mono_loop_timer_example$(EXEEXT) + $(AM_V_MCS) $(MCS) $(MCSFLAGS) -r:$(abs_top_builddir)/src/lib/efl_mono/libefl_mono.dll -out:$@ $(filter %.cs, $(^)) + +endif + ECORE_SRCS = \ ecore/ecore_animator_example.c \ diff --git a/src/examples/ecore/efl_loop_callback_add_event.cs b/src/examples/ecore/efl_loop_callback_add_event.cs deleted file mode 100644 index fe81bfd9ad..0000000000 --- a/src/examples/ecore/efl_loop_callback_add_event.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using System.Runtime.CompilerServices; - -class TestMain -{ - /* private efl.Loop loop; */ - - public TestMain(efl.Loop loop) - { - /* this.loop = loop; */ - } - - static void Main(string[] args) - { - efl.All.Init(); - - efl.Loop loop = new efl.LoopConcrete(); - - TestMain listener = new TestMain(loop); - - loop.CALLBACK_ADD += listener.callback_added_cb; - - loop.CALLBACK_ADD += listener.on_idle_enter; - loop.CALLBACK_ADD -= listener.on_idle_enter; - - loop.IDLE += listener.on_idle_enter; // Will trigger CALLBACK_ADD - - efl.All.Shutdown(); - } - - public void on_idle_enter(object sender, EventArgs e) - { - Console.WriteLine("I should not be called while the loop is not running..."); - } - - public void callback_added_cb(object sender, EventArgs e) - { - Console.WriteLine("Looks like we added a new callback."); - } -} - - diff --git a/src/examples/ecore/efl_loop_timer_example.cs b/src/examples/ecore/efl_mono_loop_timer_example.cs similarity index 51% rename from src/examples/ecore/efl_loop_timer_example.cs rename to src/examples/ecore/efl_mono_loop_timer_example.cs index dd6b2b8606..8c692753a4 100644 --- a/src/examples/ecore/efl_loop_timer_example.cs +++ b/src/examples/ecore/efl_mono_loop_timer_example.cs @@ -4,10 +4,10 @@ using System.Runtime.CompilerServices; class TestMain { - private efl.Loop loop; + private Efl.Loop loop; private int count; - public TestMain(efl.Loop loop) + public TestMain(Efl.Loop loop) { this.loop = loop; this.count = 0; @@ -15,32 +15,35 @@ class TestMain static void Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); - efl.Loop loop = new efl.LoopConcrete(); - efl.loop.Timer timer = new efl.loop.TimerConcrete(loop); + var loop = new Efl.Loop(); + var timer = new Efl.LoopTimer(loop, (Efl.LoopTimer t) => { + t.SetInterval(1.0); + }); TestMain listener = new TestMain(loop); Console.WriteLine("Starting MainLoop"); - timer.interval_set(1.0); + timer.TickEvt += listener.on_tick; + timer.TickEvt += listener.another_callback; + timer.TickEvt -= listener.another_callback; - timer.TICK += listener.on_tick; - timer.TICK += listener.another_callback; - timer.TICK -= listener.another_callback; + loop.Begin(); - loop.begin(); - - efl.All.Shutdown(); + Efl.All.Shutdown(); } public void on_tick(object sender, EventArgs e) { Console.WriteLine("on_tick called on listener"); - if (count++ == 5) - loop.quit(0); + if (count++ == 5) { + Eina.Value v = new Eina.Value(Eina.ValueType.Int32); + v.Set(0); + loop.Quit(v); + } } public void another_callback(object sender, EventArgs e) diff --git a/src/examples/efl_mono/EoInherit01.cs b/src/examples/efl_mono/EoInherit01.cs index cf35ca5f3e..26cff96c1a 100644 --- a/src/examples/efl_mono/EoInherit01.cs +++ b/src/examples/efl_mono/EoInherit01.cs @@ -1,8 +1,8 @@ using static System.Console; -class PlusTenNumberWrapper : example.NumberwrapperInherit +class PlusTenNumberWrapper : Example.Numberwrapper { - public PlusTenNumberWrapper(efl.IObject parent = null) + public PlusTenNumberWrapper(Efl.Object parent = null) : base(parent) {} @@ -20,8 +20,8 @@ public class ExampleEoInherit01 { public static void Main() { - eina.Config.Init(); - efl.eo.Config.Init(); + Eina.Config.Init(); + Efl.Eo.Config.Init(); var inheritObj = new PlusTenNumberWrapper(); @@ -52,7 +52,7 @@ public class ExampleEoInherit01 WriteLine("## Using original object ##\n"); // Check original EFL object - var origObj = new example.Numberwrapper(); + var origObj = new Example.Numberwrapper(); given = 111; origObj.SetNumber(given); stored = origObj.GetNumber(); diff --git a/src/examples/efl_mono/FunctionPointer01.cs b/src/examples/efl_mono/FunctionPointer01.cs index c32f53cd51..3eaa29d91c 100644 --- a/src/examples/efl_mono/FunctionPointer01.cs +++ b/src/examples/efl_mono/FunctionPointer01.cs @@ -12,10 +12,10 @@ public class ExampleFunctionPointer01 public static void Main() { - eina.Config.Init(); - efl.eo.Config.Init(); + Eina.Config.Init(); + Efl.Eo.Config.Init(); - var obj = new example.Numberwrapper(); + var obj = new Example.Numberwrapper(); // Set internal value obj.SetNumber(12); diff --git a/src/examples/eina/EinaArray01.cs b/src/examples/eina/EinaArray01.cs index 4ac4a77812..944c0bd397 100644 --- a/src/examples/eina/EinaArray01.cs +++ b/src/examples/eina/EinaArray01.cs @@ -4,7 +4,7 @@ public class ExampleEinaArray01 { public static void Main() { - eina.Config.Init(); + Eina.Config.Init(); var strings = new string[]{ "helo", "hera", "starbuck", "kat", "boomer", @@ -13,7 +13,7 @@ public class ExampleEinaArray01 "skulls", "bulldog", "flat top", "hammerhead", "gonzo" }; - var array = new eina.Array(20U); + var array = new Eina.Array(20U); // Push new elements foreach (string s in strings) diff --git a/src/examples/eina/EinaBinbuf01.cs b/src/examples/eina/EinaBinbuf01.cs index 395616879d..5482328ea2 100644 --- a/src/examples/eina/EinaBinbuf01.cs +++ b/src/examples/eina/EinaBinbuf01.cs @@ -4,11 +4,11 @@ public class ExampleEinaBinbuf01 { public static void Main() { - eina.Config.Init(); + Eina.Config.Init(); var bytes = new byte[]{0, 1, 2, 3, 4, 5, 6}; - var bb = new eina.Binbuf(); + var bb = new Eina.Binbuf(); // Append initial bytes bb.Append(bytes); diff --git a/src/examples/eina/EinaError01.cs b/src/examples/eina/EinaError01.cs index 61af99508b..09062717c7 100644 --- a/src/examples/eina/EinaError01.cs +++ b/src/examples/eina/EinaError01.cs @@ -3,73 +3,73 @@ using static System.Console; public class ExampleEinaError01 { private static bool RegisteredErrors = false; - private static eina.Error MyErrorNegative; - private static eina.Error MyErrorNull; + private static Eina.Error MyErrorNegative; + private static Eina.Error MyErrorNull; private static void testFunc(int n, string s) { if (!RegisteredErrors) { - MyErrorNegative = eina.Error.Register("Negative number"); - MyErrorNull = eina.Error.Register("NULL pointer"); + MyErrorNegative = Eina.Error.Register("Negative number"); + MyErrorNull = Eina.Error.Register("NULL pointer"); RegisteredErrors = true; } if (n < 0) { - eina.Error.Set(MyErrorNegative); + Eina.Error.Set(MyErrorNegative); return; } if (s == null) { - eina.Error.Set(MyErrorNull); + Eina.Error.Set(MyErrorNull); return; } } public static void Main() { - eina.Config.Init(); - efl.eo.Config.Init(); + Eina.Config.Init(); + Efl.Eo.Config.Init(); // Handling Eina_Error with exception try { testFunc(-1, "abc"); - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); } - catch(efl.EflException e) + catch(Efl.EflException e) { WriteLine($"Caught error: {e.Message}"); } // Handling Eina_Error directly testFunc(42, null); - eina.Error err = eina.Error.Get(); + Eina.Error err = Eina.Error.Get(); if (err != 0) { WriteLine($"Error set: {err.Message}"); } - eina.Error.Clear(); + Eina.Error.Clear(); // No error set try { testFunc(42, "abc"); - eina.Error.RaiseIfOccurred(); + Eina.Error.RaiseIfOccurred(); - err = eina.Error.Get(); - WriteLine($"Really no error? {err == eina.Error.NO_ERROR}."); + err = Eina.Error.Get(); + WriteLine($"Really no error? {err == Eina.Error.NO_ERROR}."); } catch { WriteLine("Unspected error!!!"); } - WriteLine("No error message is empty string: \"{0}\"", eina.Error.NO_ERROR.Message); - WriteLine("No error message is empty string: \"{0}\"", eina.Error.MsgGet(0)); + WriteLine("No error message is empty string: \"{0}\"", Eina.Error.NO_ERROR.Message); + WriteLine("No error message is empty string: \"{0}\"", Eina.Error.MsgGet(0)); } } diff --git a/src/examples/eina/EinaHash01.cs b/src/examples/eina/EinaHash01.cs index a645dde1ab..31f3c152f9 100644 --- a/src/examples/eina/EinaHash01.cs +++ b/src/examples/eina/EinaHash01.cs @@ -4,9 +4,9 @@ public class ExampleEinaHash01 { public static void Main() { - eina.Config.Init(); + Eina.Config.Init(); - var phone_book = new eina.Hash(); + var phone_book = new Eina.Hash(); // Add initial entries to our hash phone_book.Add("Wolfgang Amadeus Mozart", "+01 23 456-78910"); diff --git a/src/examples/elementary/efl_ui_slider_mono.cs b/src/examples/elementary/efl_ui_slider_mono.cs index 62b3504fcd..3ef10cbb0e 100644 --- a/src/examples/elementary/efl_ui_slider_mono.cs +++ b/src/examples/elementary/efl_ui_slider_mono.cs @@ -2,20 +2,20 @@ using System; public class Example { - public static efl.ui.IButton CreateButton(efl.IObject parent, + public static Efl.Ui.Button CreateButton(Efl.Object parent, string text, int w, int h, EventHandler callback) { - efl.ui.IButton button = new efl.ui.Button(parent); + Efl.Ui.Button button = new Efl.Ui.Button(parent); button.SetText(text); - button.SetSize(new eina.Size2D(w, h)); + button.SetSize(new Eina.Size2D(w, h)); - button.ClickedEvt += callback; + ((Efl.Ui.Clickable)button).ClickedEvt += callback; return button; } - public static void Formatter(eina.Strbuf buf, eina.Value val){ + public static void Formatter(Eina.Strbuf buf, Eina.Value val){ double ratio; if (val.Get(out ratio)) { buf.Append($"{(int)(ratio*100)}%"); @@ -34,27 +34,27 @@ public class Example int W = 120; int H = 30; - efl.All.Init(efl.Components.Ui); + Efl.All.Init(Efl.Components.Ui); - efl.ui.Win win = new efl.ui.Win(null); + Efl.Ui.Win win = new Efl.Ui.Win(null); win.SetText("Hello, C#!!"); win.SetAutohide(true); - efl.ui.Box_Flow box = new efl.ui.Box_Flow(win); + Efl.Ui.BoxFlow box = new Efl.Ui.BoxFlow(win); - efl.ui.IButton button = CreateButton(box, "Click to exit", 120, 30, + Efl.Ui.Button button = CreateButton(box, "Click to exit", 120, 30, (object sender, EventArgs e) => { - efl.ui.Config.Exit(); + Efl.Ui.Config.Exit(); }); box.DoPack(button); - efl.ui.Progressbar bar = new efl.ui.Progressbar(box); - bar.SetSize(new eina.Size2D(W, H)); + Efl.Ui.Progressbar bar = new Efl.Ui.Progressbar(box); + bar.SetSize(new Eina.Size2D(W, H)); bar.SetFormatCb(Formatter); - efl.ui.ISlider slider = new efl.ui.Slider(box); - slider.SetSize(new eina.Size2D(W, H)); + Efl.Ui.Slider slider = new Efl.Ui.Slider(box); + slider.SetSize(new Eina.Size2D(W, H)); slider.ChangedEvt += (object sender, EventArgs e) => { bar.SetRangeValue(slider.GetRangeValue()); @@ -66,12 +66,12 @@ public class Example button.SetVisible(true); box.SetVisible(true); - win.SetSize(new eina.Size2D(W, 3 * H)); + win.SetSize(new Eina.Size2D(W, 3 * H)); win.SetVisible(true); - efl.ui.Config.Run(); + Efl.Ui.Config.Run(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } } diff --git a/src/examples/elementary/efl_ui_unit_converter.cs b/src/examples/elementary/efl_ui_unit_converter.cs index 3f6c7abd26..5bbbe1723a 100644 --- a/src/examples/elementary/efl_ui_unit_converter.cs +++ b/src/examples/elementary/efl_ui_unit_converter.cs @@ -14,16 +14,16 @@ public class Example return miles * KMS_PER_MILE; } - private static void ShowErrorPopup(efl.ui.Win win, string message) + private static void ShowErrorPopup(Efl.Ui.Win win, string message) { - efl.ui.IAlert_Popup popup = new efl.ui.Alert_Popup(win); - efl.ui.Text popup_text = new efl.ui.Text(popup); + Efl.Ui.AlertPopup popup = new Efl.Ui.AlertPopup(win); + Efl.Ui.Text popup_text = new Efl.Ui.Text(popup); popup_text.SetText($"Error: {message}"); popup.SetContent(popup_text); popup.SetVisible(true); - popup.SetButton(efl.ui.Alert_Popup_Button.Positive, "Ok", null); - popup.SetSize(new eina.Size2D(150, 30)); - popup.ButtonClickedEvt += (object sender, efl.ui.Alert_Popup.ButtonClickedEvt_Args e) => { + popup.SetButton(Efl.Ui.AlertPopupButton.Positive, "Ok", null); + popup.SetSize(new Eina.Size2D(150, 30)); + popup.ButtonClickedEvt += (object sender, Efl.Ui.AlertPopupButtonClickedEvt_Args e) => { popup.SetParent(null); popup.Invalidate(); }; @@ -37,34 +37,34 @@ public class Example public static void Main() { int W = 120; int H = 30; - eina.Size2D size = new eina.Size2D(W, H); + Eina.Size2D size = new Eina.Size2D(W, H); - efl.All.Init(efl.Components.Ui); + Efl.All.Init(Efl.Components.Ui); - efl.ui.Win win = new efl.ui.Win(null); + Efl.Ui.Win win = new Efl.Ui.Win(null); win.SetText("C# Unit Converter"); win.SetAutohide(true); - efl.ui.Box_Flow box = new efl.ui.Box_Flow(win); - box.SetDirection(efl.ui.Dir.Horizontal); + Efl.Ui.BoxFlow box = new Efl.Ui.BoxFlow(win); + box.SetDirection(Efl.Ui.Dir.Horizontal); - efl.ui.Box_Flow miles_box = new efl.ui.Box_Flow(box); - miles_box.SetDirection(efl.ui.Dir.Down); + Efl.Ui.BoxFlow miles_box = new Efl.Ui.BoxFlow(box); + miles_box.SetDirection(Efl.Ui.Dir.Down); box.DoPack(miles_box); - efl.ui.Text miles_label = new efl.ui.Text(miles_box); + Efl.Ui.Text miles_label = new Efl.Ui.Text(miles_box); miles_label.SetText("Miles:"); miles_label.SetSize(size); miles_label.SetVisible(true); - efl.ui.Text_Editable miles_input = new efl.ui.Text_Editable(miles_box); + Efl.Ui.TextEditable miles_input = new Efl.Ui.TextEditable(miles_box); miles_input.SetText(""); miles_input.SetScrollable(true); miles_input.SetSize(size); miles_input.SetVisible(true); - efl.ui.IButton miles_button = new efl.ui.Button(miles_box); + Efl.Ui.Button miles_button = new Efl.Ui.Button(miles_box); miles_button.SetText("To Km"); miles_button.SetSize(size); miles_button.SetVisible(true); @@ -74,23 +74,23 @@ public class Example miles_box.DoPack(miles_button); - efl.ui.Box_Flow kms_box = new efl.ui.Box_Flow(box); - kms_box.SetDirection(efl.ui.Dir.Down); + Efl.Ui.BoxFlow kms_box = new Efl.Ui.BoxFlow(box); + kms_box.SetDirection(Efl.Ui.Dir.Down); box.DoPack(kms_box); - efl.ui.Text kms_label = new efl.ui.Text(kms_box); + Efl.Ui.Text kms_label = new Efl.Ui.Text(kms_box); kms_label.SetText("Kilometers:"); kms_label.SetSize(size); kms_label.SetVisible(true); - efl.ui.Text_Editable kms_input = new efl.ui.Text_Editable(kms_box); + Efl.Ui.TextEditable kms_input = new Efl.Ui.TextEditable(kms_box); kms_input.SetText(""); kms_input.SetScrollable(true); kms_input.SetSize(size); kms_input.SetVisible(true); - efl.ui.IButton kms_button = new efl.ui.Button(kms_box); + Efl.Ui.Button kms_button = new Efl.Ui.Button(kms_box); kms_button.SetText("To Miles"); kms_button.SetSize(size); kms_button.SetVisible(true); @@ -99,7 +99,7 @@ public class Example kms_box.DoPack(kms_input); kms_box.DoPack(kms_button); - kms_button.ClickedEvt += (object sender, EventArgs e) => { + ((Efl.Ui.Clickable)kms_button).ClickedEvt += (object sender, EventArgs e) => { try { string text = kms_input.GetText(); @@ -115,7 +115,7 @@ public class Example } }; - miles_button.ClickedEvt += (object sender, EventArgs e) => { + ((Efl.Ui.Clickable)miles_button).ClickedEvt += (object sender, EventArgs e) => { try { string text = miles_input.GetText(); @@ -134,17 +134,17 @@ public class Example kms_box.SetVisible(true); miles_box.SetVisible(true); - box.SetPosition(new eina.Position2D(20, 30)); + box.SetPosition(new Eina.Position2D(20, 30)); box.SetVisible(true); - win.SetPosition(new eina.Position2D(200, 200)); + win.SetPosition(new Eina.Position2D(200, 200)); - win.SetSize(new eina.Size2D(400, 120)); + win.SetSize(new Eina.Size2D(400, 120)); win.SetVisible(true); - efl.ui.Config.Run(); + Efl.Ui.Config.Run(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } } diff --git a/src/examples/evas/evas_mono_box.cs b/src/examples/evas/evas_mono_box.cs index 97c161c536..dbfd15e372 100644 --- a/src/examples/evas/evas_mono_box.cs +++ b/src/examples/evas/evas_mono_box.cs @@ -2,9 +2,9 @@ using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; -public class MyBox : evas.BoxInherit +public class MyBox : Evas.Box { - public MyBox(efl.IObject parent) : base(parent) {} + public MyBox(Efl.Object parent) : base(parent) {} [DllImport("evas")] static extern void evas_obj_box_layout_vertical(IntPtr obj, IntPtr data, IntPtr privdata); [DllImport("evas")] static extern void evas_obj_box_layout_horizontal(IntPtr obj, IntPtr data, IntPtr privdata); @@ -15,11 +15,11 @@ public class MyBox : evas.BoxInherit override public void CalculateGroup() { - IntPtr evas = evas_object_evas_get(raw_handle); + IntPtr evas = evas_object_evas_get(NativeHandle); evas_event_freeze(evas); Console.WriteLine("called group_calculate"); /* layouting_set(true); */ - evas_obj_box_layout_vertical(raw_handle, IntPtr.Zero, IntPtr.Zero); + evas_obj_box_layout_vertical(NativeHandle, IntPtr.Zero, IntPtr.Zero); /* layouting_set(false); */ /* children_changed_set(false); */ evas_event_thaw(evas); @@ -30,21 +30,21 @@ class TestMain { static void Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); - efl.Loop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); EcoreEvas ecore_evas = new EcoreEvas(); - efl.canvas.IObject canvas = ecore_evas.canvas; + Efl.Canvas.Object canvas = ecore_evas.canvas; canvas.SetVisible(true); - efl.IObject parent = canvas.GetParent(); - System.Diagnostics.Debug.Assert(parent.raw_handle != IntPtr.Zero); + Efl.Object parent = canvas.GetParent(); + System.Diagnostics.Debug.Assert(parent.NativeHandle != IntPtr.Zero); - evas.IBox box = new MyBox(canvas); - eina.Size2D size = new eina.Size2D(); + Evas.Box box = new MyBox(canvas); + Eina.Size2D size = new Eina.Size2D(); size.W = 320; size.H = 240; @@ -52,7 +52,7 @@ class TestMain box.SetSize(size); box.SetVisible(true); - efl.canvas.Rectangle rect = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle rect = new Efl.Canvas.Rectangle(canvas); rect.SetColor(0, 0, 255, 255); size.W = 320; size.H = 120; @@ -60,7 +60,7 @@ class TestMain rect.SetVisible(true); box.Append(rect); - efl.canvas.Rectangle rect2 = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle rect2 = new Efl.Canvas.Rectangle(canvas); rect2.SetColor(0, 255, 0, 255); rect2.SetSize(size); rect2.SetVisible(true); @@ -68,6 +68,6 @@ class TestMain loop.Begin(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } } diff --git a/src/examples/evas/evas_mono_image.cs b/src/examples/evas/evas_mono_image.cs index 47f9b36023..865aa42502 100644 --- a/src/examples/evas/evas_mono_image.cs +++ b/src/examples/evas/evas_mono_image.cs @@ -6,7 +6,7 @@ class TestMain static int WIDTH = 320; static int HEIGHT = 240; - evas.IImage image; + Evas.Image image; static string ImagePath([CallerFilePath] string folder="") @@ -14,27 +14,27 @@ class TestMain return System.IO.Path.GetDirectoryName(folder); } - public TestMain(evas.IImage image) + public TestMain(Evas.Image image) { this.image = image; } static void Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); - efl.Loop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); EcoreEvas ecore_evas = new EcoreEvas(); - eina.Size2D size = new eina.Size2D(); + Eina.Size2D size = new Eina.Size2D(); - efl.canvas.IObject canvas = ecore_evas.canvas; + Efl.Canvas.Object canvas = ecore_evas.canvas; canvas.SetVisible(true); - efl.IObject parent = canvas.GetParent(); - System.Diagnostics.Debug.Assert(parent.raw_handle != IntPtr.Zero); + Efl.Object parent = canvas.GetParent(); + System.Diagnostics.Debug.Assert(parent.NativeHandle != IntPtr.Zero); - efl.canvas.Rectangle bg = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle bg = new Efl.Canvas.Rectangle(canvas); bg.SetColor(255, 255, 255, 255); size.W = WIDTH; size.H = HEIGHT; @@ -42,15 +42,15 @@ class TestMain bg.SetVisible(true); string valid_path = args[0]; - evas.Image image = new evas.Image(canvas); + Evas.Image image = new Evas.Image(canvas); image.SetFile(valid_path, null); /* FIXME evas-image uses error handling code from * evas_object_image_load_error_get, which seems to be not available - * efl.image.load.State state = image.load_error_get(); */ + * Efl.image.load.State state = image.load_error_get(); */ // FIXME missing move - eina.Rect rect = new eina.Rect(); + Eina.Rect rect = new Eina.Rect(); rect.X = 0; rect.Y = 0; @@ -75,13 +75,13 @@ class TestMain /* EventListener callback = new EventListener(); */ /* bg.key_focus_set(true); */ - /* bg.event_callback_priority_add(evas.Callback_Type.Key_down, */ - /* efl.Callback_Priority.Default, */ + /* bg.event_callback_priority_add(Evas.Callback_Type.Key_down, */ + /* Efl.Callback_Priority.Default, */ /* callback, null); */ loop.Begin(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } public void on_key_down(object sender, EventArgs e) diff --git a/src/examples/evas/evas_mono_image2.cs b/src/examples/evas/evas_mono_image2.cs index 1f0e52ac62..0ad8fb0872 100644 --- a/src/examples/evas/evas_mono_image2.cs +++ b/src/examples/evas/evas_mono_image2.cs @@ -10,19 +10,19 @@ class TestMain static void Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); - efl.Loop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); EcoreEvas ecore_evas = new EcoreEvas(); - eina.Size2D size = new eina.Size2D(); - eina.Position2D pos = new eina.Position2D(); + Eina.Size2D size = new Eina.Size2D(); + Eina.Position2D pos = new Eina.Position2D(); - efl.canvas.IObject canvas = ecore_evas.canvas; + Efl.Canvas.Object canvas = ecore_evas.canvas; canvas.SetVisible(true); - efl.canvas.Rectangle bg = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle bg = new Efl.Canvas.Rectangle(canvas); bg.SetColor(255, 255, 255, 255); pos.X = 0; pos.Y = 0; @@ -33,7 +33,7 @@ class TestMain bg.SetVisible(true); string path = args[0]; - evas.Image logo = new evas.Image(canvas); + Evas.Image logo = new Evas.Image(canvas); logo.SetFillAuto(true); // TODO add preloaded support (depends on events) @@ -53,7 +53,7 @@ class TestMain pixels[i] = generator.Next(); } - evas.Image noise_img = new evas.Image(canvas); + Evas.Image noise_img = new Evas.Image(canvas); size.W = WIDTH / 4; size.H = HEIGHT / 4; noise_img.SetSize(size); @@ -66,7 +66,7 @@ class TestMain noise_img.SetVisible(true); Console.WriteLine("Creating noise image with sizez %d, %d", WIDTH/4, HEIGHT/4); - efl.canvas.Proxy proxy_img = new efl.canvas.Proxy(canvas); + Efl.Canvas.Proxy proxy_img = new Efl.Canvas.Proxy(canvas); proxy_img.SetSource(noise_img); pos.X = WIDTH / 2; pos.Y = HEIGHT / 2; diff --git a/src/examples/evas/evas_mono_rectangle.cs b/src/examples/evas/evas_mono_rectangle.cs index c31c24785e..85afbd2e61 100644 --- a/src/examples/evas/evas_mono_rectangle.cs +++ b/src/examples/evas/evas_mono_rectangle.cs @@ -12,28 +12,28 @@ class TestMain { int color_index = 0; - efl.All.Init(); + Efl.All.Init(); - efl.Loop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); EcoreEvas ecore_evas = new EcoreEvas(); - efl.canvas.IObject canvas = ecore_evas.canvas; + Efl.Canvas.Object canvas = ecore_evas.canvas; canvas.SetVisible(true); - efl.IObject parent = canvas.GetParent(); - System.Diagnostics.Debug.Assert(parent.raw_handle != IntPtr.Zero); + Efl.Object parent = canvas.GetParent(); + System.Diagnostics.Debug.Assert(parent.NativeHandle != IntPtr.Zero); - efl.canvas.Rectangle rect = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle rect = new Efl.Canvas.Rectangle(canvas); rect.SetColor(colors[0, 0], colors[0, 1], colors[0, 2], 255); - eina.Size2D size = new eina.Size2D(); + Eina.Size2D size = new Eina.Size2D(); size.W = 640; size.H = 480; rect.SetSize(size); rect.SetVisible(true); - canvas.KeyDownEvt += (object sender, efl.input.Interface.KeyDownEvt_Args e) => { + canvas.KeyDownEvt += (object sender, Efl.Input.InterfaceKeyDownEvt_Args e) => { color_index = (color_index + 1) % 3; Console.WriteLine("Key Down"); - Console.WriteLine("Got key obj at {0}", e.arg.raw_handle.ToString("X")); + Console.WriteLine("Got key obj at {0}", e.arg.NativeHandle.ToString("X")); Console.WriteLine("Got key_get() == [{0}]", e.arg.GetKey()); rect.SetColor(colors[color_index, 0], colors[color_index, 1], @@ -42,6 +42,6 @@ class TestMain loop.Begin(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } } diff --git a/src/examples/evas/evas_mono_table.cs b/src/examples/evas/evas_mono_table.cs index db329b22cd..b42057d651 100644 --- a/src/examples/evas/evas_mono_table.cs +++ b/src/examples/evas/evas_mono_table.cs @@ -9,37 +9,37 @@ class TestMain static void Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); - efl.Loop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); EcoreEvas ecore_evas = new EcoreEvas(); - eina.Size2D size = new eina.Size2D(); + Eina.Size2D size = new Eina.Size2D(); size.W = WIDTH; size.H = HEIGHT; - eina.Size2D hint = new eina.Size2D(); + Eina.Size2D hint = new Eina.Size2D(); - efl.canvas.IObject canvas = ecore_evas.canvas; + Efl.Canvas.Object canvas = ecore_evas.canvas; canvas.SetVisible(true); - efl.IObject parent = canvas.GetParent(); - System.Diagnostics.Debug.Assert(parent.raw_handle != IntPtr.Zero); + Efl.Object parent = canvas.GetParent(); + System.Diagnostics.Debug.Assert(parent.NativeHandle != IntPtr.Zero); - efl.canvas.Rectangle bg = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle bg = new Efl.Canvas.Rectangle(canvas); bg.SetColor(255, 255, 255, 255); bg.SetSize(size); bg.SetVisible(true); - evas.Table table = new evas.Table(canvas); - table.SetHomogeneous(evas.object_table.Homogeneous_Mode.None); + Evas.Table table = new Evas.Table(canvas); + table.SetHomogeneous(Evas.ObjectTable.HomogeneousMode.None); table.SetPadding(0, 0); table.SetSize(size); table.SetVisible(true); - efl.canvas.Rectangle rect = new efl.canvas.Rectangle(canvas); + Efl.Canvas.Rectangle rect = new Efl.Canvas.Rectangle(canvas); rect.SetColor(255, 0, 0, 255); hint.W = 100; hint.H = 50; @@ -47,7 +47,7 @@ class TestMain rect.SetVisible(true); table.Pack(rect, 1, 1, 2, 1); - rect = new efl.canvas.Rectangle(canvas); + rect = new Efl.Canvas.Rectangle(canvas); rect.SetColor(0, 255, 0, 255); hint.W = 50; hint.H = 100; @@ -55,7 +55,7 @@ class TestMain rect.SetVisible(true); table.Pack(rect, 1, 2, 1, 2); - rect = new efl.canvas.Rectangle(canvas); + rect = new Efl.Canvas.Rectangle(canvas); rect.SetColor(0, 0, 255, 255); hint.W = 50; hint.H = 50; @@ -63,7 +63,7 @@ class TestMain rect.SetVisible(true); table.Pack(rect, 2, 2, 1, 1); - rect = new efl.canvas.Rectangle(canvas); + rect = new Efl.Canvas.Rectangle(canvas); rect.SetColor(255, 255, 0, 255); rect.SetHintMin(hint); rect.SetVisible(true); @@ -71,7 +71,7 @@ class TestMain loop.Begin(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } } diff --git a/src/examples/evas/evas_mono_text.cs b/src/examples/evas/evas_mono_text.cs index a1532a4583..52b89f2f10 100644 --- a/src/examples/evas/evas_mono_text.cs +++ b/src/examples/evas/evas_mono_text.cs @@ -22,19 +22,19 @@ class TestMain static int HEIGHT = 240; private EcoreEvas ecore_evas; - private efl.canvas.IObject canvas; - private efl.canvas.IRectangle bg; - private evas.Text text; - private evas.Image border; + private Efl.Canvas.Object canvas; + private Efl.Canvas.Rectangle bg; + private Evas.Text text; + private Evas.Image border; public TestMain(String border_file) { ecore_evas = new EcoreEvas(); - eina.Size2D size = new eina.Size2D(); - eina.Position2D position = new eina.Position2D(); + Eina.Size2D size = new Eina.Size2D(); + Eina.Position2D position = new Eina.Position2D(); canvas = ecore_evas.canvas; canvas.SetVisible(true); - bg = new efl.canvas.Rectangle(canvas); + bg = new Efl.Canvas.Rectangle(canvas); bg.SetColor(255, 255, 255, 255); position.X = 0; position.Y = 0; @@ -45,10 +45,11 @@ class TestMain bg.SetVisible(true); bg.SetKeyFocus(true); + /* ((Efl.Input.Interface)bg).KeyDownEvt += On_KeyDown; */ bg.KeyDownEvt += On_KeyDown; - text = new evas.Text(canvas); - text.SetStyle(evas.Text_Style_Type.OutlineSoftShadow); + text = new Evas.Text(canvas); + text.SetStyle(Evas.TextStyleType.OutlineSoftShadow); text.SetColor(0, 0, 0, 255); text.SetGlowColor(255, 0, 0, 255); @@ -65,13 +66,13 @@ class TestMain text.SetPosition(position); text.SetVisible(true); - efl.font.Size font_size = 0; + Efl.Font.Size font_size = 0; String font = String.Empty; text.GetFont(out font, out font_size); Console.WriteLine("Adding text object with font {0} and size {1}", font, size); // setup border - border = new evas.Image(canvas); + border = new Evas.Image(canvas); border.SetFile(border_file, null); border.SetBorder(3, 3, 3, 3); border.SetBorderCenterFill(0); @@ -87,15 +88,15 @@ class TestMain } - private void On_KeyDown(object sender, efl.input.Interface.KeyDownEvt_Args e) + private void On_KeyDown(object sender, Efl.Input.InterfaceKeyDownEvt_Args e) { var key = e.arg.GetKey(); if (key == "h") { Console.WriteLine(commands); } else if (key == "t") { - evas.Text_Style_Type type = text.GetStyle(); - type = (evas.Text_Style_Type)(((int)type + 1) % 10); // 10 hardcoded from C example + Evas.TextStyleType type = text.GetStyle(); + type = (Evas.TextStyleType)(((int)type + 1) % 10); // 10 hardcoded from C example text.SetStyle(type); } } @@ -107,19 +108,19 @@ class TestMain static void Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); String border_path = "./src/examples/evas/resources/images/red.png"; if (args.Length >= 1) border_path = args[0]; - efl.Loop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); TestMain t = new TestMain(border_path); loop.Begin(); - efl.All.Shutdown(); + Efl.All.Shutdown(); } } diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp index 5a4a753a61..513dac582b 100644 --- a/src/lib/eolian_cxx/grammar/klass_def.hpp +++ b/src/lib/eolian_cxx/grammar/klass_def.hpp @@ -1129,6 +1129,22 @@ struct klass_def return ret; } + + std::vector get_all_events() const + { + std::vector ret; + + std::copy(events.cbegin(), events.cend(), std::back_inserter(ret)); + + for (auto inherit : inherits) + { + klass_def klass(get_klass(inherit, unit), unit); + std::copy(klass.events.cbegin(), klass.events.cend(), + std::back_inserter(ret)); + } + + return ret; + } }; struct value_def diff --git a/src/tests/efl_mono/BasicDirection.cs b/src/tests/efl_mono/BasicDirection.cs index 5db27a1534..546d7e2e53 100644 --- a/src/tests/efl_mono/BasicDirection.cs +++ b/src/tests/efl_mono/BasicDirection.cs @@ -11,7 +11,7 @@ class TestIntDirections { int original = 1984; int received; - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); t.IntOut(original, out received); @@ -22,7 +22,7 @@ class TestIntDirections { int original = 1984; int received; - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); t.IntPtrOut(original, out received); diff --git a/src/tests/efl_mono/Eina.cs b/src/tests/efl_mono/Eina.cs index f1e1dc49ff..119659b923 100644 --- a/src/tests/efl_mono/Eina.cs +++ b/src/tests/efl_mono/Eina.cs @@ -28,55 +28,55 @@ public static class BaseData public static readonly string[] append_seq_str = {"42","43","33"}; public static readonly string[] modified_seq_str = {"0x0","0x2A","0x42","42","43","33"}; - public static test.INumberwrapper NW(int n) + public static Dummy.Numberwrapper NW(int n) { - var nw = new test.Numberwrapper(); + var nw = new Dummy.Numberwrapper(); nw.SetNumber(n); return nw; } - public static test.INumberwrapper[] BaseSeqObj() + public static Dummy.Numberwrapper[] BaseSeqObj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); a.SetNumber(0x0); b.SetNumber(0x2A); c.SetNumber(0x42); - return new test.INumberwrapper[]{a,b,c}; + return new Dummy.Numberwrapper[]{a,b,c}; } - public static test.Numberwrapper[] AppendSeqObj() + public static Dummy.Numberwrapper[] AppendSeqObj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); a.SetNumber(42); b.SetNumber(43); c.SetNumber(33); - return new test.Numberwrapper[]{a,b,c}; + return new Dummy.Numberwrapper[]{a,b,c}; } - public static test.Numberwrapper[] ModifiedSeqObj() + public static Dummy.Numberwrapper[] ModifiedSeqObj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); - var d = new test.Numberwrapper(); - var e = new test.Numberwrapper(); - var f = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); + var d = new Dummy.Numberwrapper(); + var e = new Dummy.Numberwrapper(); + var f = new Dummy.Numberwrapper(); a.SetNumber(0x0); b.SetNumber(0x2A); c.SetNumber(0x42); d.SetNumber(42); e.SetNumber(43); f.SetNumber(33); - return new test.Numberwrapper[]{a,b,c,d,e,f}; + return new Dummy.Numberwrapper[]{a,b,c,d,e,f}; } public static void NumberwrapperSequenceAssertEqual( - test.INumberwrapper[] a - , test.INumberwrapper[] b + Dummy.Numberwrapper[] a + , Dummy.Numberwrapper[] b , [CallerLineNumber] int line = 0 , [CallerFilePath] string file = null , [CallerMemberName] string member = null) @@ -91,9 +91,9 @@ public static class BaseData } } -class NativeInheritImpl : test.TestingInherit +class NativeInheritImpl : Dummy.TestObject { - public NativeInheritImpl(efl.Object parent = null) : base(parent) {} + public NativeInheritImpl(Efl.Object parent = null) : base(parent) {} public bool slice_in_flag = false; public bool rw_slice_in_flag = false; @@ -106,13 +106,13 @@ class NativeInheritImpl : test.TestingInherit public bool binbuf_return_flag = false; public bool binbuf_return_own_flag = false; - override public bool EinaSliceIn(eina.Slice slice) + override public bool EinaSliceIn(Eina.Slice slice) { slice_in_flag = true; return slice.GetBytes().SequenceEqual(BaseSequence.Values()); } - override public bool EinaRwSliceIn(eina.Rw_Slice slice) + override public bool EinaRwSliceIn(Eina.RwSlice slice) { rw_slice_in_flag = true; return slice.GetBytes().SequenceEqual(BaseSequence.Values()); @@ -120,7 +120,7 @@ class NativeInheritImpl : test.TestingInherit private byte[] slice_out_seq = null; private GCHandle slice_out_pinned; - override public bool EinaSliceOut(ref eina.Slice slice) + override public bool EinaSliceOut(ref Eina.Slice slice) { slice_out_flag = true; @@ -136,7 +136,7 @@ class NativeInheritImpl : test.TestingInherit private byte[] rw_slice_out_seq = null; private GCHandle rw_slice_out_pinned; - override public bool EinaRwSliceOut(ref eina.Rw_Slice slice) + override public bool EinaRwSliceOut(ref Eina.RwSlice slice) { rw_slice_out_flag = true; @@ -152,7 +152,7 @@ class NativeInheritImpl : test.TestingInherit // // // - override public bool EinaBinbufIn(eina.Binbuf binbuf) + override public bool EinaBinbufIn(Eina.Binbuf binbuf) { binbuf_in_flag = true; @@ -168,8 +168,8 @@ class NativeInheritImpl : test.TestingInherit return r; } - private eina.Binbuf binbuf_in_own_binbuf = null; - override public bool EinaBinbufInOwn(eina.Binbuf binbuf) + private Eina.Binbuf binbuf_in_own_binbuf = null; + override public bool EinaBinbufInOwn(Eina.Binbuf binbuf) { binbuf_in_own_flag = true; @@ -195,12 +195,12 @@ class NativeInheritImpl : test.TestingInherit return r; } - private eina.Binbuf binbuf_out_binbuf = null; - override public bool EinaBinbufOut(out eina.Binbuf binbuf) + private Eina.Binbuf binbuf_out_binbuf = null; + override public bool EinaBinbufOut(out Eina.Binbuf binbuf) { binbuf_out_flag = true; - binbuf = new eina.Binbuf(); + binbuf = new Eina.Binbuf(); binbuf.Append(33); binbuf_out_binbuf = binbuf; @@ -218,12 +218,12 @@ class NativeInheritImpl : test.TestingInherit return r; } - private eina.Binbuf binbuf_out_own_binbuf = null; - override public bool EinaBinbufOutOwn(out eina.Binbuf binbuf) + private Eina.Binbuf binbuf_out_own_binbuf = null; + override public bool EinaBinbufOutOwn(out Eina.Binbuf binbuf) { binbuf_out_own_flag = true; - binbuf = new eina.Binbuf(); + binbuf = new Eina.Binbuf(); binbuf.Append(33); binbuf_out_own_binbuf = binbuf; @@ -238,12 +238,12 @@ class NativeInheritImpl : test.TestingInherit return r; } - private eina.Binbuf binbuf_return_binbuf = null; - override public eina.Binbuf EinaBinbufReturn() + private Eina.Binbuf binbuf_return_binbuf = null; + override public Eina.Binbuf EinaBinbufReturn() { binbuf_return_flag = true; - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); binbuf.Append(33); binbuf_return_binbuf = binbuf; @@ -261,12 +261,12 @@ class NativeInheritImpl : test.TestingInherit return r; } - private eina.Binbuf binbuf_return_own_binbuf = null; - override public eina.Binbuf EinaBinbufReturnOwn() + private Eina.Binbuf binbuf_return_own_binbuf = null; + override public Eina.Binbuf EinaBinbufReturnOwn() { binbuf_return_own_flag = true; - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); binbuf.Append(33); binbuf_return_own_binbuf = binbuf; @@ -295,14 +295,14 @@ class TestEinaBinbuf public static void eina_binbuf_default() { - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); Test.Assert(binbuf.Handle != IntPtr.Zero); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[0])); } public static void eina_binbuf_bytes() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.Handle != IntPtr.Zero); byte[] cmp = binbuf.GetBytes(); Test.Assert(cmp != test_string); @@ -311,7 +311,7 @@ class TestEinaBinbuf public static void eina_binbuf_bytes_length() { - var binbuf = new eina.Binbuf(test_string, 7); + var binbuf = new Eina.Binbuf(test_string, 7); Test.Assert(binbuf.Handle != IntPtr.Zero); byte[] cmp = binbuf.GetBytes(); byte[] expected = System.Text.Encoding.UTF8.GetBytes("0123456"); @@ -322,9 +322,9 @@ class TestEinaBinbuf public static void eina_binbuf_copy_ctor() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.Handle != IntPtr.Zero); - var binbuf2 = new eina.Binbuf(binbuf); + var binbuf2 = new Eina.Binbuf(binbuf); Test.Assert(binbuf2.Handle != IntPtr.Zero && binbuf.Handle != binbuf2.Handle); byte[] cmp = binbuf.GetBytes(); byte[] cmp2 = binbuf2.GetBytes(); @@ -334,7 +334,7 @@ class TestEinaBinbuf public static void free_get_null_handle() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.Handle != IntPtr.Zero); binbuf.Free(); Test.Assert(binbuf.Handle == IntPtr.Zero); @@ -342,7 +342,7 @@ class TestEinaBinbuf public static void reset_get_empty_string() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.Handle != IntPtr.Zero); byte[] cmp = binbuf.GetBytes(); Test.Assert(cmp != test_string); @@ -354,7 +354,7 @@ class TestEinaBinbuf public static void append_bytes() { - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); binbuf.Append(test_string); byte[] cmp = binbuf.GetBytes(); Test.Assert(cmp != test_string); @@ -363,7 +363,7 @@ class TestEinaBinbuf public static void append_bytes_length() { - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); binbuf.Append(test_string, 7); byte[] cmp = binbuf.GetBytes(); byte[] expected = System.Text.Encoding.UTF8.GetBytes("0123456"); @@ -373,9 +373,9 @@ class TestEinaBinbuf public static void append_binbuf() { - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[0])); - var binbuf2 = new eina.Binbuf(test_string); + var binbuf2 = new Eina.Binbuf(test_string); binbuf.Append(binbuf2); byte[] cmp = binbuf.GetBytes(); byte[] cmp2 = binbuf2.GetBytes(); @@ -386,7 +386,7 @@ class TestEinaBinbuf public static void append_char() { - var binbuf = new eina.Binbuf(); + var binbuf = new Eina.Binbuf(); binbuf.Append((byte) 0); binbuf.Append((byte) 12); binbuf.Append((byte) 42); @@ -397,7 +397,7 @@ class TestEinaBinbuf public static void remove() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.GetBytes().SequenceEqual(test_string)); binbuf.Remove(2, 9); Test.Assert(binbuf.Handle != IntPtr.Zero); @@ -407,14 +407,14 @@ class TestEinaBinbuf public static void get_string_native() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.GetBytes().SequenceEqual(test_string)); Test.Assert(binbuf.GetStringNative() != IntPtr.Zero); } public static void binbuf_free_string() { - var binbuf = new eina.Binbuf(test_string); + var binbuf = new Eina.Binbuf(test_string); Test.Assert(binbuf.GetBytes().SequenceEqual(test_string)); binbuf.FreeString(); Test.Assert(binbuf.Handle != IntPtr.Zero); @@ -423,15 +423,15 @@ class TestEinaBinbuf public static void binbuf_length() { - var binbuf = new eina.Binbuf(test_string, 6); + var binbuf = new Eina.Binbuf(test_string, 6); Test.Assert(binbuf.Length == 6); Test.Assert(binbuf.GetBytes().Length == 6); } public static void test_eina_binbuf_in() { - test.ITesting t = new test.Testing(); - var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); + var t = new Dummy.TestObject(); + var binbuf = new Eina.Binbuf(base_seq, (uint)base_seq.Length); Test.Assert(t.EinaBinbufIn(binbuf)); Test.Assert(binbuf.Own); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33})); @@ -441,8 +441,8 @@ class TestEinaBinbuf public static void test_eina_binbuf_in_own() { - test.ITesting t = new test.Testing(); - var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); + var t = new Dummy.TestObject(); + var binbuf = new Eina.Binbuf(base_seq, (uint)base_seq.Length); Test.Assert(t.EinaBinbufInOwn(binbuf)); Test.Assert(!binbuf.Own); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33})); @@ -453,8 +453,8 @@ class TestEinaBinbuf public static void test_eina_binbuf_out() { - test.ITesting t = new test.Testing(); - eina.Binbuf binbuf; + var t = new Dummy.TestObject(); + Eina.Binbuf binbuf; Test.Assert(t.EinaBinbufOut(out binbuf)); Test.Assert(!binbuf.Own); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); @@ -467,8 +467,8 @@ class TestEinaBinbuf public static void test_eina_binbuf_out_own() { - test.ITesting t = new test.Testing(); - eina.Binbuf binbuf; + var t = new Dummy.TestObject(); + Eina.Binbuf binbuf; Test.Assert(t.EinaBinbufOutOwn(out binbuf)); Test.Assert(binbuf.Own); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); @@ -480,7 +480,7 @@ class TestEinaBinbuf public static void test_eina_binbuf_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var binbuf = t.EinaBinbufReturn(); Test.Assert(!binbuf.Own); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); @@ -493,7 +493,7 @@ class TestEinaBinbuf public static void test_eina_binbuf_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var binbuf = t.EinaBinbufReturnOwn(); Test.Assert(binbuf.Own); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); @@ -509,7 +509,7 @@ class TestEinaBinbuf public static void test_inherit_eina_binbuf_in() { var t = new NativeInheritImpl(); - var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); + var binbuf = new Eina.Binbuf(base_seq, (uint)base_seq.Length); Test.Assert(t.CallEinaBinbufIn(binbuf)); Test.Assert(t.binbuf_in_flag); Test.Assert(binbuf.Own); @@ -521,7 +521,7 @@ class TestEinaBinbuf public static void test_inherit_eina_binbuf_in_own() { var t = new NativeInheritImpl(); - var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); + var binbuf = new Eina.Binbuf(base_seq, (uint)base_seq.Length); binbuf.Own = false; Test.Assert(t.CallEinaBinbufInOwn(binbuf)); Test.Assert(t.binbuf_in_own_flag); @@ -534,7 +534,7 @@ class TestEinaBinbuf public static void test_inherit_eina_binbuf_out() { var t = new NativeInheritImpl(); - eina.Binbuf binbuf = t.CallEinaBinbufOut(); + Eina.Binbuf binbuf = t.CallEinaBinbufOut(); Test.Assert(t.binbuf_out_flag); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); binbuf.Reset(); @@ -547,7 +547,7 @@ class TestEinaBinbuf public static void test_inherit_eina_binbuf_out_own() { var t = new NativeInheritImpl(); - eina.Binbuf binbuf = t.CallEinaBinbufOutOwn(); + Eina.Binbuf binbuf = t.CallEinaBinbufOutOwn(); Test.Assert(t.binbuf_out_own_flag); Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); binbuf.Reset(); @@ -592,10 +592,10 @@ class TestEinaSlice public static void eina_slice_marshalling() { - var binbuf = new eina.Binbuf(base_seq); + var binbuf = new Eina.Binbuf(base_seq); Test.Assert(binbuf.Handle != IntPtr.Zero); - eina.Slice slc = eina.Binbuf.eina_binbuf_slice_get(binbuf.Handle); + Eina.Slice slc = Eina.Binbuf.eina_binbuf_slice_get(binbuf.Handle); Test.Assert(slc.GetBytes().SequenceEqual(base_seq)); Test.Assert(base_seq.Length == (int)(slc.Len)); @@ -603,21 +603,21 @@ class TestEinaSlice public static void eina_slice_size() { - Test.Assert(Marshal.SizeOf(typeof(eina.Slice)) == Marshal.SizeOf(typeof(UIntPtr)) + Marshal.SizeOf(typeof(IntPtr))); - Test.Assert(Marshal.SizeOf(typeof(eina.Rw_Slice)) == Marshal.SizeOf(typeof(UIntPtr)) + Marshal.SizeOf(typeof(IntPtr))); + Test.Assert(Marshal.SizeOf(typeof(Eina.Slice)) == Marshal.SizeOf(typeof(UIntPtr)) + Marshal.SizeOf(typeof(IntPtr))); + Test.Assert(Marshal.SizeOf(typeof(Eina.RwSlice)) == Marshal.SizeOf(typeof(UIntPtr)) + Marshal.SizeOf(typeof(IntPtr))); } public static void pinned_data_set() { - var binbuf = new eina.Binbuf(); - binbuf.Append(new eina.Slice().PinnedDataSet(pinnedPtr, (UIntPtr)3)); + var binbuf = new Eina.Binbuf(); + binbuf.Append(new Eina.Slice().PinnedDataSet(pinnedPtr, (UIntPtr)3)); Test.Assert(binbuf.GetBytes().SequenceEqual(base_seq)); } public static void test_eina_slice_in() { - test.ITesting t = new test.Testing(); - var slc = new eina.Slice(pinnedPtr, (UIntPtr)3); + var t = new Dummy.TestObject(); + var slc = new Eina.Slice(pinnedPtr, (UIntPtr)3); Test.Assert(t.EinaSliceIn(slc)); } @@ -627,9 +627,9 @@ class TestEinaSlice GCHandle pinnedRWData = GCHandle.Alloc(rw_seq, GCHandleType.Pinned); IntPtr ptr = pinnedRWData.AddrOfPinnedObject(); - var slc = new eina.Rw_Slice(ptr, (UIntPtr)3); + var slc = new Eina.RwSlice(ptr, (UIntPtr)3); - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); Test.Assert(t.EinaRwSliceIn(slc)); Test.Assert(slc.GetBytes().SequenceEqual(new byte[3]{0x1,0x2B,0x43})); @@ -639,8 +639,8 @@ class TestEinaSlice public static void test_eina_slice_out() { - test.ITesting t = new test.Testing(); - var slc = new eina.Slice(); + var t = new Dummy.TestObject(); + var slc = new Eina.Slice(); Test.Assert(t.EinaSliceOut(ref slc)); Test.Assert(slc.Mem != IntPtr.Zero); Test.Assert(slc.Length == base_seq.Length); @@ -649,8 +649,8 @@ class TestEinaSlice public static void test_eina_rw_slice_out() { - test.ITesting t = new test.Testing(); - var slc = new eina.Rw_Slice(); + var t = new Dummy.TestObject(); + var slc = new Eina.RwSlice(); Test.Assert(t.EinaRwSliceOut(ref slc)); Test.Assert(slc.Mem != IntPtr.Zero); Test.Assert(slc.Length == base_seq.Length); @@ -670,7 +670,7 @@ class TestEinaSlice public static void test_inherit_eina_slice_in() { var t = new NativeInheritImpl(); - var slc = new eina.Slice(pinnedPtr, (UIntPtr)3); + var slc = new Eina.Slice(pinnedPtr, (UIntPtr)3); Test.Assert(t.EinaSliceIn(slc)); Test.Assert(t.slice_in_flag); } @@ -681,7 +681,7 @@ class TestEinaSlice GCHandle pinnedRWData = GCHandle.Alloc(rw_seq, GCHandleType.Pinned); IntPtr ptr = pinnedRWData.AddrOfPinnedObject(); - var slc = new eina.Rw_Slice(ptr, (UIntPtr)3); + var slc = new Eina.RwSlice(ptr, (UIntPtr)3); var t = new NativeInheritImpl(); Test.Assert(t.EinaRwSliceIn(slc)); @@ -695,7 +695,7 @@ class TestEinaSlice public static void test_inherit_eina_slice_out() { var t = new NativeInheritImpl(); - var slc = new eina.Slice(); + var slc = new Eina.Slice(); Test.Assert(t.EinaSliceOut(ref slc)); Test.Assert(t.slice_out_flag); Test.Assert(slc.Mem != IntPtr.Zero); @@ -706,7 +706,7 @@ class TestEinaSlice public static void test_inherit_eina_rw_slice_out() { var t = new NativeInheritImpl(); - var slc = new eina.Rw_Slice(); + var slc = new Eina.RwSlice(); Test.Assert(t.EinaRwSliceOut(ref slc)); Test.Assert(t.rw_slice_out_flag); Test.Assert(slc.Mem != IntPtr.Zero); @@ -719,13 +719,13 @@ class TestEinaArray { public static void eina_array_default() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); } public static void push_int() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88)); Test.Assert(a[0] == 88); @@ -733,7 +733,7 @@ class TestEinaArray public static void push_string() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("test string §éΨبÿツ")); Test.AssertEquals("test string §éΨبÿツ", a[0]); @@ -741,18 +741,18 @@ class TestEinaArray public static void push_obj() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); - var o = new test.Numberwrapper(); + var o = new Dummy.Numberwrapper(); o.SetNumber(88); Test.Assert(a.Push(o)); - Test.Assert(a[0].raw_handle == o.raw_handle); + Test.Assert(a[0].NativeHandle == o.NativeHandle); Test.Assert(a[0].GetNumber() == 88); } public static void pop_int() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88)); Test.Assert(a.Pop() == 88); @@ -761,7 +761,7 @@ class TestEinaArray public static void pop_string() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("test string")); Test.Assert(a.Pop() == "test string"); @@ -770,20 +770,20 @@ class TestEinaArray public static void pop_obj() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); - var o = new test.Numberwrapper(); + var o = new Dummy.Numberwrapper(); o.SetNumber(88); Test.Assert(a.Push(o)); var p = a.Pop(); - Test.Assert(p.raw_handle == o.raw_handle); + Test.Assert(p.NativeHandle == o.NativeHandle); Test.Assert(p.GetNumber() == 88); Test.Assert(a.Count() == 0); } public static void data_set_int() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88)); Test.Assert(a[0] == 88); @@ -795,7 +795,7 @@ class TestEinaArray public static void data_set_string() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("test string")); Test.Assert(a[0] == "test string"); @@ -807,34 +807,34 @@ class TestEinaArray public static void data_set_obj() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); Test.Assert(a.Push(o1)); - Test.Assert(a[0].raw_handle == o1.raw_handle); + Test.Assert(a[0].NativeHandle == o1.NativeHandle); Test.Assert(a[0].GetNumber() == 88); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); a.DataSet(0, o2); - Test.Assert(a[0].raw_handle == o2.raw_handle); + Test.Assert(a[0].NativeHandle == o2.NativeHandle); Test.Assert(a[0].GetNumber() == 44); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); a[0] = o3; - Test.Assert(a[0].raw_handle == o3.raw_handle); + Test.Assert(a[0].NativeHandle == o3.NativeHandle); Test.Assert(a[0].GetNumber() == 22); } public static void count_int() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Count() == 0); Test.Assert(a.Push(88)); @@ -850,7 +850,7 @@ class TestEinaArray public static void count_string() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Count() == 0); Test.Assert(a.Push("a")); @@ -866,36 +866,36 @@ class TestEinaArray public static void count_obj() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Count() == 0); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); Test.Assert(a.Push(o1)); - Test.Assert(a[0].raw_handle == o1.raw_handle); + Test.Assert(a[0].NativeHandle == o1.NativeHandle); Test.Assert(a[0].GetNumber() == 88); Test.Assert(a.Count() == 1); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); Test.Assert(a.Push(o2)); - Test.Assert(a[1].raw_handle == o2.raw_handle); + Test.Assert(a[1].NativeHandle == o2.NativeHandle); Test.Assert(a[1].GetNumber() == 44); Test.Assert(a.Count() == 2); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); Test.Assert(a.Push(o3)); - Test.Assert(a[2].raw_handle == o3.raw_handle); + Test.Assert(a[2].NativeHandle == o3.NativeHandle); Test.Assert(a[2].GetNumber() == 22); Test.Assert(a.Count() == 3); } public static void length_int() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Length == 0); Test.Assert(a.Push(88)); @@ -911,7 +911,7 @@ class TestEinaArray public static void length_string() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Length == 0); Test.Assert(a.Push("a")); @@ -927,7 +927,7 @@ class TestEinaArray public static void eina_array_as_ienumerable_int() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88)); Test.Assert(a.Push(44)); @@ -943,7 +943,7 @@ class TestEinaArray public static void eina_array_as_ienumerable_string() { - var a = new eina.Array(); + var a = new Eina.Array(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("X")); Test.Assert(a.Push("XX")); @@ -959,25 +959,25 @@ class TestEinaArray public static void eina_array_as_ienumerable_obj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); a.SetNumber(88); b.SetNumber(44); c.SetNumber(22); - var cmp = new test.Numberwrapper[]{a,b,c}; + var cmp = new Dummy.Numberwrapper[]{a,b,c}; - var arr = new eina.Array(); + var arr = new Eina.Array(); Test.Assert(arr.Handle != IntPtr.Zero); Test.Assert(arr.Push(a)); Test.Assert(arr.Push(b)); Test.Assert(arr.Push(c)); int i = 0; - foreach (test.Numberwrapper e in arr) + foreach (Dummy.Numberwrapper e in arr) { Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber()); - Test.Assert(cmp[i].raw_handle == e.raw_handle); + Test.Assert(cmp[i].NativeHandle == e.NativeHandle); ++i; } } @@ -990,8 +990,8 @@ class TestEinaArray public static void test_eina_array_int_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_int); Test.Assert(t.EinaArrayIntIn(arr)); Test.Assert(arr.Own); @@ -1002,8 +1002,8 @@ class TestEinaArray public static void test_eina_array_int_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_int); Test.Assert(t.EinaArrayIntInOwn(arr)); Test.Assert(!arr.Own); @@ -1015,8 +1015,8 @@ class TestEinaArray public static void test_eina_array_int_out() { - test.ITesting t = new test.Testing(); - eina.Array arr; + var t = new Dummy.TestObject(); + Eina.Array arr; Test.Assert(t.EinaArrayIntOut(out arr)); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1028,8 +1028,8 @@ class TestEinaArray public static void test_eina_array_int_out_own() { - test.ITesting t = new test.Testing(); - eina.Array arr; + var t = new Dummy.TestObject(); + Eina.Array arr; Test.Assert(t.EinaArrayIntOutOwn(out arr)); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1040,7 +1040,7 @@ class TestEinaArray public static void test_eina_array_int_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaArrayIntReturn(); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1052,7 +1052,7 @@ class TestEinaArray public static void test_eina_array_int_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaArrayIntReturnOwn(); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1064,8 +1064,8 @@ class TestEinaArray // String // public static void test_eina_array_str_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_str); Test.Assert(t.EinaArrayStrIn(arr)); Test.Assert(arr.Own); @@ -1076,8 +1076,8 @@ class TestEinaArray public static void test_eina_array_str_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_str); Test.Assert(t.EinaArrayStrInOwn(arr)); Test.Assert(!arr.Own); @@ -1089,8 +1089,8 @@ class TestEinaArray public static void test_eina_array_str_out() { - test.ITesting t = new test.Testing(); - eina.Array arr; + var t = new Dummy.TestObject(); + Eina.Array arr; Test.Assert(t.EinaArrayStrOut(out arr)); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1102,8 +1102,8 @@ class TestEinaArray public static void test_eina_array_str_out_own() { - test.ITesting t = new test.Testing(); - eina.Array arr; + var t = new Dummy.TestObject(); + Eina.Array arr; Test.Assert(t.EinaArrayStrOutOwn(out arr)); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1114,7 +1114,7 @@ class TestEinaArray public static void test_eina_array_str_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaArrayStrReturn(); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1126,7 +1126,7 @@ class TestEinaArray public static void test_eina_array_str_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaArrayStrReturnOwn(); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1139,8 +1139,8 @@ class TestEinaArray public static void test_eina_array_obj_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(BaseSeqObj()); Test.Assert(t.EinaArrayObjIn(arr)); Test.Assert(arr.Own); @@ -1151,8 +1151,8 @@ class TestEinaArray public static void test_eina_array_obj_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(BaseSeqObj()); Test.Assert(t.EinaArrayObjInOwn(arr)); Test.Assert(!arr.Own); @@ -1164,8 +1164,8 @@ class TestEinaArray public static void test_eina_array_obj_out() { - test.ITesting t = new test.Testing(); - eina.Array arr; + var t = new Dummy.TestObject(); + Eina.Array arr; Test.Assert(t.EinaArrayObjOut(out arr)); Test.Assert(!arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1177,8 +1177,8 @@ class TestEinaArray public static void test_eina_array_obj_out_own() { - test.ITesting t = new test.Testing(); - eina.Array arr; + var t = new Dummy.TestObject(); + Eina.Array arr; Test.Assert(t.EinaArrayObjOutOwn(out arr)); Test.Assert(arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1189,7 +1189,7 @@ class TestEinaArray public static void test_eina_array_obj_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaArrayObjReturn(); Test.Assert(!arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1201,7 +1201,7 @@ class TestEinaArray public static void test_eina_array_obj_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaArrayObjReturnOwn(); Test.Assert(arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1212,9 +1212,9 @@ class TestEinaArray public static void test_eina_array_obj_return_in_same_id() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var cmp = BaseSeqObj(); - var a = new eina.Array(); + var a = new Eina.Array(); a.Append(cmp); var b = t.EinaArrayObjReturnIn(a); NumberwrapperSequenceAssertEqual(a.ToArray(), b.ToArray()); @@ -1222,8 +1222,8 @@ class TestEinaArray int len = a.Length; for (int i=0; i < len; ++i) { - Test.Assert(a[i].raw_handle == b[i].raw_handle); - Test.Assert(a[i].raw_handle == cmp[i].raw_handle); + Test.Assert(a[i].NativeHandle == b[i].NativeHandle); + Test.Assert(a[i].NativeHandle == cmp[i].NativeHandle); } } @@ -1237,14 +1237,14 @@ class TestEinaInarray { public static void eina_inarray_default() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); a.Dispose(); } public static void push_int() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88) == 0); Test.Assert(a[0] == 88); @@ -1253,7 +1253,7 @@ class TestEinaInarray public static void push_string() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("test string") == 0); Test.Assert(a[0] == "test string"); @@ -1262,19 +1262,19 @@ class TestEinaInarray public static void push_obj() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); - var o = new test.Numberwrapper(); + var o = new Dummy.Numberwrapper(); o.SetNumber(88); Test.Assert(a.Push(o) == 0); - Test.Assert(a[0].raw_handle == o.raw_handle); + Test.Assert(a[0].NativeHandle == o.NativeHandle); Test.Assert(a[0].GetNumber() == 88); a.Dispose(); } public static void pop_int() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88) >= 0); Test.Assert(a.Pop() == 88); @@ -1284,7 +1284,7 @@ class TestEinaInarray public static void pop_string() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("test string") >= 0); Test.Assert(a.Pop() == "test string"); @@ -1294,13 +1294,13 @@ class TestEinaInarray public static void pop_obj() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); - var o = new test.Numberwrapper(); + var o = new Dummy.Numberwrapper(); o.SetNumber(88); Test.Assert(a.Push(o) >= 0); var p = a.Pop(); - Test.Assert(p.raw_handle == o.raw_handle); + Test.Assert(p.NativeHandle == o.NativeHandle); Test.Assert(p.GetNumber() == 88); Test.Assert(a.Count() == 0); a.Dispose(); @@ -1308,7 +1308,7 @@ class TestEinaInarray public static void replace_at_int() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88) >= 0); Test.Assert(a[0] == 88); @@ -1323,7 +1323,7 @@ class TestEinaInarray public static void replace_at_string() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("test string") >= 0); Test.Assert(a[0] == "test string"); @@ -1338,29 +1338,29 @@ class TestEinaInarray public static void replace_at_obj() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); Test.Assert(a.Push(o1) >= 0); - Test.Assert(a[0].raw_handle == o1.raw_handle); + Test.Assert(a[0].NativeHandle == o1.NativeHandle); Test.Assert(a[0].GetNumber() == 88); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); a.ReplaceAt(0, o2); - Test.Assert(a[0].raw_handle == o2.raw_handle); + Test.Assert(a[0].NativeHandle == o2.NativeHandle); Test.Assert(a[0].GetNumber() == 44); Test.Assert(a.Count() == 1); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); a[0] = o3; - Test.Assert(a[0].raw_handle == o3.raw_handle); + Test.Assert(a[0].NativeHandle == o3.NativeHandle); Test.Assert(a[0].GetNumber() == 22); Test.Assert(a.Count() == 1); @@ -1369,7 +1369,7 @@ class TestEinaInarray public static void count_int() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Count() == 0); Test.Assert(a.Push(88) == 0); @@ -1386,7 +1386,7 @@ class TestEinaInarray public static void count_string() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Count() == 0); Test.Assert(a.Push("a") == 0); @@ -1403,29 +1403,29 @@ class TestEinaInarray public static void count_obj() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Count() == 0); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); Test.Assert(a.Push(o1) == 0); - Test.Assert(a[0].raw_handle == o1.raw_handle); + Test.Assert(a[0].NativeHandle == o1.NativeHandle); Test.Assert(a[0].GetNumber() == 88); Test.Assert(a.Count() == 1); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); Test.Assert(a.Push(o2) == 1); - Test.Assert(a[1].raw_handle == o2.raw_handle); + Test.Assert(a[1].NativeHandle == o2.NativeHandle); Test.Assert(a[1].GetNumber() == 44); Test.Assert(a.Count() == 2); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); Test.Assert(a.Push(o3) == 2); - Test.Assert(a[2].raw_handle == o3.raw_handle); + Test.Assert(a[2].NativeHandle == o3.NativeHandle); Test.Assert(a[2].GetNumber() == 22); Test.Assert(a.Count() == 3); @@ -1434,7 +1434,7 @@ class TestEinaInarray public static void length_int() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Length == 0); Test.Assert(a.Push(88) >= 0); @@ -1451,7 +1451,7 @@ class TestEinaInarray public static void length_string() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Length == 0); Test.Assert(a.Push("a") >= 0); @@ -1468,7 +1468,7 @@ class TestEinaInarray public static void eina_inarray_as_ienumerable_int() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push(88) == 0); Test.Assert(a.Push(44) == 1); @@ -1485,7 +1485,7 @@ class TestEinaInarray public static void eina_inarray_as_ienumerable_string() { - var a = new eina.Inarray(); + var a = new Eina.Inarray(); Test.Assert(a.Handle != IntPtr.Zero); Test.Assert(a.Push("X") == 0); Test.Assert(a.Push("XX") == 1); @@ -1502,25 +1502,25 @@ class TestEinaInarray public static void eina_inarray_as_ienumerable_obj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); a.SetNumber(88); b.SetNumber(44); c.SetNumber(22); - var cmp = new test.Numberwrapper[]{a,b,c}; + var cmp = new Dummy.Numberwrapper[]{a,b,c}; - var arr = new eina.Inarray(); + var arr = new Eina.Inarray(); Test.Assert(arr.Handle != IntPtr.Zero); Test.Assert(arr.Push(a) == 0); Test.Assert(arr.Push(b) == 1); Test.Assert(arr.Push(c) == 2); int i = 0; - foreach (test.Numberwrapper e in arr) + foreach (Dummy.Numberwrapper e in arr) { Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber()); - Test.Assert(cmp[i].raw_handle == e.raw_handle); + Test.Assert(cmp[i].NativeHandle == e.NativeHandle); ++i; } arr.Dispose(); @@ -1534,8 +1534,8 @@ class TestEinaInarray public static void test_eina_inarray_int_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Inarray(); + var t = new Dummy.TestObject(); + var arr = new Eina.Inarray(); arr.Append(base_seq_int); Test.Assert(t.EinaInarrayIntIn(arr)); Test.Assert(arr.Own); @@ -1546,8 +1546,8 @@ class TestEinaInarray public static void test_eina_inarray_int_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Inarray(); + var t = new Dummy.TestObject(); + var arr = new Eina.Inarray(); arr.Append(base_seq_int); Test.Assert(t.EinaInarrayIntInOwn(arr)); Test.Assert(!arr.Own); @@ -1559,8 +1559,8 @@ class TestEinaInarray public static void test_eina_inarray_int_out() { - test.ITesting t = new test.Testing(); - eina.Inarray arr; + var t = new Dummy.TestObject(); + Eina.Inarray arr; Test.Assert(t.EinaInarrayIntOut(out arr)); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1572,8 +1572,8 @@ class TestEinaInarray public static void test_eina_inarray_int_out_own() { - test.ITesting t = new test.Testing(); - eina.Inarray arr; + var t = new Dummy.TestObject(); + Eina.Inarray arr; Test.Assert(t.EinaInarrayIntOutOwn(out arr)); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1584,7 +1584,7 @@ class TestEinaInarray public static void test_eina_inarray_int_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaInarrayIntReturn(); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1596,7 +1596,7 @@ class TestEinaInarray public static void test_eina_inarray_int_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaInarrayIntReturnOwn(); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_int)); @@ -1608,8 +1608,8 @@ class TestEinaInarray // String // public static void test_eina_inarray_str_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Inarray(); + var t = new Dummy.TestObject(); + var arr = new Eina.Inarray(); arr.Append(base_seq_str); Test.Assert(t.EinaInarrayStrIn(arr)); Test.Assert(arr.Own); @@ -1620,8 +1620,8 @@ class TestEinaInarray public static void test_eina_inarray_str_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Inarray(); + var t = new Dummy.TestObject(); + var arr = new Eina.Inarray(); arr.Append(base_seq_str); Test.Assert(t.EinaInarrayStrInOwn(arr)); Test.Assert(!arr.Own); @@ -1633,8 +1633,8 @@ class TestEinaInarray public static void test_eina_inarray_str_out() { - test.ITesting t = new test.Testing(); - eina.Inarray arr; + var t = new Dummy.TestObject(); + Eina.Inarray arr; Test.Assert(t.EinaInarrayStrOut(out arr)); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1646,8 +1646,8 @@ class TestEinaInarray public static void test_eina_inarray_str_out_own() { - test.ITesting t = new test.Testing(); - eina.Inarray arr; + var t = new Dummy.TestObject(); + Eina.Inarray arr; Test.Assert(t.EinaInarrayStrOutOwn(out arr)); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1658,7 +1658,7 @@ class TestEinaInarray public static void test_eina_inarray_str_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaInarrayStrReturn(); Test.Assert(!arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1670,7 +1670,7 @@ class TestEinaInarray public static void test_eina_inarray_str_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaInarrayStrReturnOwn(); Test.Assert(arr.Own); Test.Assert(arr.ToArray().SequenceEqual(base_seq_str)); @@ -1683,8 +1683,8 @@ class TestEinaInarray public static void test_eina_inarray_obj_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Inarray(); + var t = new Dummy.TestObject(); + var arr = new Eina.Inarray(); arr.Append(BaseSeqObj()); Test.Assert(t.EinaInarrayObjIn(arr)); Test.Assert(arr.Own); @@ -1695,8 +1695,8 @@ class TestEinaInarray public static void test_eina_inarray_obj_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Inarray(); + var t = new Dummy.TestObject(); + var arr = new Eina.Inarray(); arr.Append(BaseSeqObj()); Test.Assert(t.EinaInarrayObjInOwn(arr)); Test.Assert(!arr.Own); @@ -1708,8 +1708,8 @@ class TestEinaInarray public static void test_eina_inarray_obj_out() { - test.ITesting t = new test.Testing(); - eina.Inarray arr; + var t = new Dummy.TestObject(); + Eina.Inarray arr; Test.Assert(t.EinaInarrayObjOut(out arr)); Test.Assert(!arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1721,8 +1721,8 @@ class TestEinaInarray public static void test_eina_inarray_obj_out_own() { - test.ITesting t = new test.Testing(); - eina.Inarray arr; + var t = new Dummy.TestObject(); + Eina.Inarray arr; Test.Assert(t.EinaInarrayObjOutOwn(out arr)); Test.Assert(arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1733,7 +1733,7 @@ class TestEinaInarray public static void test_eina_inarray_obj_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaInarrayObjReturn(); Test.Assert(!arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1745,7 +1745,7 @@ class TestEinaInarray public static void test_eina_inarray_obj_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var arr = t.EinaInarrayObjReturnOwn(); Test.Assert(arr.Own); NumberwrapperSequenceAssertEqual(arr.ToArray(), BaseSeqObj()); @@ -1756,9 +1756,9 @@ class TestEinaInarray public static void test_eina_inarray_obj_return_in_same_id() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var cmp = BaseSeqObj(); - var a = new eina.Inarray(); + var a = new Eina.Inarray(); a.Append(cmp); var b = t.EinaInarrayObjReturnIn(a); NumberwrapperSequenceAssertEqual(a.ToArray(), b.ToArray()); @@ -1766,8 +1766,8 @@ class TestEinaInarray int len = a.Length; for (int i=0; i < len; ++i) { - Test.Assert(a[i].raw_handle == b[i].raw_handle); - Test.Assert(a[i].raw_handle == cmp[i].raw_handle); + Test.Assert(a[i].NativeHandle == b[i].NativeHandle); + Test.Assert(a[i].NativeHandle == cmp[i].NativeHandle); } a.Dispose(); } @@ -1777,7 +1777,7 @@ class TestEinaList { public static void data_set_int() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append(88); Test.Assert(lst[0] == 88); lst.DataSet(0, 44); @@ -1788,7 +1788,7 @@ class TestEinaList public static void data_set_string() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append("test string"); Test.Assert(lst[0] == "test string"); lst.DataSet(0, "other string"); @@ -1799,33 +1799,33 @@ class TestEinaList public static void data_set_obj() { - var lst = new eina.List(); + var lst = new Eina.List(); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); lst.Append(o1); - Test.Assert(lst[0].raw_handle == o1.raw_handle); + Test.Assert(lst[0].NativeHandle == o1.NativeHandle); Test.Assert(lst[0].GetNumber() == 88); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); lst.DataSet(0, o2); - Test.Assert(lst[0].raw_handle == o2.raw_handle); + Test.Assert(lst[0].NativeHandle == o2.NativeHandle); Test.Assert(lst[0].GetNumber() == 44); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); lst[0] = o3; - Test.Assert(lst[0].raw_handle == o3.raw_handle); + Test.Assert(lst[0].NativeHandle == o3.NativeHandle); Test.Assert(lst[0].GetNumber() == 22); } public static void append_count_int() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Count() == 0); lst.Append(88); Test.Assert(lst[0] == 88); @@ -1840,7 +1840,7 @@ class TestEinaList public static void append_count_string() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Count() == 0); lst.Append("a"); Test.Assert(lst[0] == "a"); @@ -1855,35 +1855,35 @@ class TestEinaList public static void append_count_obj() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Count() == 0); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); lst.Append(o1); - Test.Assert(lst[0].raw_handle == o1.raw_handle); + Test.Assert(lst[0].NativeHandle == o1.NativeHandle); Test.Assert(lst[0].GetNumber() == 88); Test.Assert(lst.Count() == 1); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); lst.Append(o2); - Test.Assert(lst[1].raw_handle == o2.raw_handle); + Test.Assert(lst[1].NativeHandle == o2.NativeHandle); Test.Assert(lst[1].GetNumber() == 44); Test.Assert(lst.Count() == 2); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); lst.Append(o3); - Test.Assert(lst[2].raw_handle == o3.raw_handle); + Test.Assert(lst[2].NativeHandle == o3.NativeHandle); Test.Assert(lst[2].GetNumber() == 22); Test.Assert(lst.Count() == 3); } public static void length_int() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Length == 0); lst.Append(88); Test.Assert(lst[0] == 88); @@ -1898,7 +1898,7 @@ class TestEinaList public static void length_string() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Length == 0); lst.Append("a"); Test.Assert(lst[0] == "a"); @@ -1913,7 +1913,7 @@ class TestEinaList public static void prepend_count_int() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Count() == 0); lst.Prepend(88); Test.Assert(lst[0] == 88); @@ -1928,7 +1928,7 @@ class TestEinaList public static void prepend_count_string() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Count() == 0); lst.Prepend("a"); Test.Assert(lst[0] == "a"); @@ -1943,35 +1943,35 @@ class TestEinaList public static void prepend_count_obj() { - var lst = new eina.List(); + var lst = new Eina.List(); Test.Assert(lst.Count() == 0); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); lst.Prepend(o1); - Test.Assert(lst[0].raw_handle == o1.raw_handle); + Test.Assert(lst[0].NativeHandle == o1.NativeHandle); Test.Assert(lst[0].GetNumber() == 88); Test.Assert(lst.Count() == 1); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); lst.Prepend(o2); - Test.Assert(lst[0].raw_handle == o2.raw_handle); + Test.Assert(lst[0].NativeHandle == o2.NativeHandle); Test.Assert(lst[0].GetNumber() == 44); Test.Assert(lst.Count() == 2); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); lst.Prepend(o3); - Test.Assert(lst[0].raw_handle == o3.raw_handle); + Test.Assert(lst[0].NativeHandle == o3.NativeHandle); Test.Assert(lst[0].GetNumber() == 22); Test.Assert(lst.Count() == 3); } public static void sorted_insert_int() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.SortedInsert(88); Test.Assert(lst.ToArray().SequenceEqual(new int[]{88})); lst.SortedInsert(22); @@ -1983,7 +1983,7 @@ class TestEinaList public static void sorted_insert_string() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.SortedInsert("c"); Test.Assert(lst.ToArray().SequenceEqual(new string[]{"c"})); lst.SortedInsert("a"); @@ -1995,7 +1995,7 @@ class TestEinaList public static void sort_int() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append(88); lst.Append(22); lst.Append(11); @@ -2008,7 +2008,7 @@ class TestEinaList public static void sort_string() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append("d"); lst.Append("b"); lst.Append("a"); @@ -2020,7 +2020,7 @@ class TestEinaList public static void reverse_int() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append(22); lst.Append(44); lst.Append(88); @@ -2032,7 +2032,7 @@ class TestEinaList public static void reverse_string() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append("a"); lst.Append("b"); lst.Append("c"); @@ -2043,7 +2043,7 @@ class TestEinaList public static void eina_list_as_ienumerable_int() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append(88); lst.Append(44); lst.Append(22); @@ -2058,7 +2058,7 @@ class TestEinaList public static void eina_list_as_ienumerable_string() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append("X"); lst.Append("XX"); lst.Append("XXX"); @@ -2073,24 +2073,24 @@ class TestEinaList public static void eina_list_as_ienumerable_obj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); a.SetNumber(88); b.SetNumber(44); c.SetNumber(22); - var cmp = new test.Numberwrapper[]{a,b,c}; + var cmp = new Dummy.Numberwrapper[]{a,b,c}; - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append(a); lst.Append(b); lst.Append(c); int i = 0; - foreach (test.Numberwrapper e in lst) + foreach (Dummy.Numberwrapper e in lst) { Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber()); - Test.Assert(cmp[i].raw_handle == e.raw_handle); + Test.Assert(cmp[i].NativeHandle == e.NativeHandle); ++i; } } @@ -2103,8 +2103,8 @@ class TestEinaList public static void test_eina_list_int_in() { - test.ITesting t = new test.Testing(); - var lst = new eina.List(); + var t = new Dummy.TestObject(); + var lst = new Eina.List(); lst.AppendArray(base_seq_int); Test.Assert(t.EinaListIntIn(lst)); Test.Assert(lst.Own); @@ -2115,8 +2115,8 @@ class TestEinaList public static void test_eina_list_int_in_own() { - test.ITesting t = new test.Testing(); - var lst = new eina.List(); + var t = new Dummy.TestObject(); + var lst = new Eina.List(); lst.AppendArray(base_seq_int); Test.Assert(t.EinaListIntInOwn(lst)); Test.Assert(!lst.Own); @@ -2127,8 +2127,8 @@ class TestEinaList public static void test_eina_list_int_out() { - test.ITesting t = new test.Testing(); - eina.List lst; + var t = new Dummy.TestObject(); + Eina.List lst; Test.Assert(t.EinaListIntOut(out lst)); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2139,8 +2139,8 @@ class TestEinaList public static void test_eina_list_int_out_own() { - test.ITesting t = new test.Testing(); - eina.List lst; + var t = new Dummy.TestObject(); + Eina.List lst; Test.Assert(t.EinaListIntOutOwn(out lst)); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2151,7 +2151,7 @@ class TestEinaList public static void test_eina_list_int_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaListIntReturn(); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2162,7 +2162,7 @@ class TestEinaList public static void test_eina_list_int_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaListIntReturnOwn(); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2174,8 +2174,8 @@ class TestEinaList // String // public static void test_eina_list_str_in() { - test.ITesting t = new test.Testing(); - var lst = new eina.List(); + var t = new Dummy.TestObject(); + var lst = new Eina.List(); lst.AppendArray(base_seq_str); Test.Assert(t.EinaListStrIn(lst)); Test.Assert(lst.Own); @@ -2186,8 +2186,8 @@ class TestEinaList public static void test_eina_list_str_in_own() { - test.ITesting t = new test.Testing(); - var lst = new eina.List(); + var t = new Dummy.TestObject(); + var lst = new Eina.List(); lst.AppendArray(base_seq_str); Test.Assert(t.EinaListStrInOwn(lst)); Test.Assert(!lst.Own); @@ -2198,8 +2198,8 @@ class TestEinaList public static void test_eina_list_str_out() { - test.ITesting t = new test.Testing(); - eina.List lst; + var t = new Dummy.TestObject(); + Eina.List lst; Test.Assert(t.EinaListStrOut(out lst)); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2210,8 +2210,8 @@ class TestEinaList public static void test_eina_list_str_out_own() { - test.ITesting t = new test.Testing(); - eina.List lst; + var t = new Dummy.TestObject(); + Eina.List lst; Test.Assert(t.EinaListStrOutOwn(out lst)); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2222,7 +2222,7 @@ class TestEinaList public static void test_eina_list_str_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaListStrReturn(); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2233,7 +2233,7 @@ class TestEinaList public static void test_eina_list_str_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaListStrReturnOwn(); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2246,8 +2246,8 @@ class TestEinaList public static void test_eina_list_obj_in() { - test.ITesting t = new test.Testing(); - var lst = new eina.List(); + var t = new Dummy.TestObject(); + var lst = new Eina.List(); lst.AppendArray(BaseSeqObj()); Test.Assert(t.EinaListObjIn(lst)); Test.Assert(lst.Own); @@ -2258,8 +2258,8 @@ class TestEinaList public static void test_eina_list_obj_in_own() { - test.ITesting t = new test.Testing(); - var lst = new eina.List(); + var t = new Dummy.TestObject(); + var lst = new Eina.List(); lst.AppendArray(BaseSeqObj()); Test.Assert(t.EinaListObjInOwn(lst)); Test.Assert(!lst.Own); @@ -2270,8 +2270,8 @@ class TestEinaList public static void test_eina_list_obj_out() { - test.ITesting t = new test.Testing(); - eina.List lst; + var t = new Dummy.TestObject(); + Eina.List lst; Test.Assert(t.EinaListObjOut(out lst)); Test.Assert(!lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2282,8 +2282,8 @@ class TestEinaList public static void test_eina_list_obj_out_own() { - test.ITesting t = new test.Testing(); - eina.List lst; + var t = new Dummy.TestObject(); + Eina.List lst; Test.Assert(t.EinaListObjOutOwn(out lst)); Test.Assert(lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2294,7 +2294,7 @@ class TestEinaList public static void test_eina_list_obj_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaListObjReturn(); Test.Assert(!lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2305,7 +2305,7 @@ class TestEinaList public static void test_eina_list_obj_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaListObjReturnOwn(); Test.Assert(lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2316,9 +2316,9 @@ class TestEinaList public static void test_eina_list_obj_return_in_same_id() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var cmp = BaseSeqObj(); - var a = new eina.List(); + var a = new Eina.List(); a.AppendArray(cmp); var b = t.EinaListObjReturnIn(a); NumberwrapperSequenceAssertEqual(a.ToArray(), b.ToArray()); @@ -2326,8 +2326,8 @@ class TestEinaList int len = a.Length; for (int i=0; i < len; ++i) { - Test.Assert(a[i].raw_handle == b[i].raw_handle); - Test.Assert(a[i].raw_handle == cmp[i].raw_handle); + Test.Assert(a[i].NativeHandle == b[i].NativeHandle); + Test.Assert(a[i].NativeHandle == cmp[i].NativeHandle); } } } @@ -2336,7 +2336,7 @@ class TestEinaInlist { public static void data_set_int() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.Append(88); Test.Assert(lst[0] == 88); lst.DataSet(0, 44); @@ -2348,7 +2348,7 @@ class TestEinaInlist public static void data_set_string() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.Append("test string"); Test.Assert(lst[0] == "test string"); lst.DataSet(0, "other string"); @@ -2360,27 +2360,27 @@ class TestEinaInlist public static void data_set_obj() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); lst.Append(o1); - Test.Assert(lst[0].raw_handle == o1.raw_handle); + Test.Assert(lst[0].NativeHandle == o1.NativeHandle); Test.Assert(lst[0].GetNumber() == 88); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); lst.DataSet(0, o2); - Test.Assert(lst[0].raw_handle == o2.raw_handle); + Test.Assert(lst[0].NativeHandle == o2.NativeHandle); Test.Assert(lst[0].GetNumber() == 44); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); lst[0] = o3; - Test.Assert(lst[0].raw_handle == o3.raw_handle); + Test.Assert(lst[0].NativeHandle == o3.NativeHandle); Test.Assert(lst[0].GetNumber() == 22); Test.Assert(lst.Count() == 1); @@ -2388,7 +2388,7 @@ class TestEinaInlist public static void append_count_int() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Count() == 0); lst.Append(88); Test.Assert(lst[0] == 88); @@ -2403,7 +2403,7 @@ class TestEinaInlist public static void append_count_string() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Count() == 0); lst.Append("a"); Test.Assert(lst[0] == "a"); @@ -2418,35 +2418,35 @@ class TestEinaInlist public static void append_count_obj() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Count() == 0); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); lst.Append(o1); - Test.Assert(lst[0].raw_handle == o1.raw_handle); + Test.Assert(lst[0].NativeHandle == o1.NativeHandle); Test.Assert(lst[0].GetNumber() == 88); Test.Assert(lst.Count() == 1); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); lst.Append(o2); - Test.Assert(lst[1].raw_handle == o2.raw_handle); + Test.Assert(lst[1].NativeHandle == o2.NativeHandle); Test.Assert(lst[1].GetNumber() == 44); Test.Assert(lst.Count() == 2); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); lst.Append(o3); - Test.Assert(lst[2].raw_handle == o3.raw_handle); + Test.Assert(lst[2].NativeHandle == o3.NativeHandle); Test.Assert(lst[2].GetNumber() == 22); Test.Assert(lst.Count() == 3); } public static void length_int() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Length == 0); lst.Append(88); Test.Assert(lst[0] == 88); @@ -2461,7 +2461,7 @@ class TestEinaInlist public static void length_string() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Length == 0); lst.Append("a"); Test.Assert(lst[0] == "a"); @@ -2476,7 +2476,7 @@ class TestEinaInlist public static void prepend_count_int() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Count() == 0); lst.Prepend(88); Test.Assert(lst[0] == 88); @@ -2491,7 +2491,7 @@ class TestEinaInlist public static void prepend_count_string() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Count() == 0); lst.Prepend("a"); Test.Assert(lst[0] == "a"); @@ -2506,35 +2506,35 @@ class TestEinaInlist public static void prepend_count_obj() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); Test.Assert(lst.Count() == 0); - var o1 = new test.Numberwrapper(); + var o1 = new Dummy.Numberwrapper(); o1.SetNumber(88); lst.Prepend(o1); - Test.Assert(lst[0].raw_handle == o1.raw_handle); + Test.Assert(lst[0].NativeHandle == o1.NativeHandle); Test.Assert(lst[0].GetNumber() == 88); Test.Assert(lst.Count() == 1); - var o2 = new test.Numberwrapper(); + var o2 = new Dummy.Numberwrapper(); o2.SetNumber(44); lst.Prepend(o2); - Test.Assert(lst[0].raw_handle == o2.raw_handle); + Test.Assert(lst[0].NativeHandle == o2.NativeHandle); Test.Assert(lst[0].GetNumber() == 44); Test.Assert(lst.Count() == 2); - var o3 = new test.Numberwrapper(); + var o3 = new Dummy.Numberwrapper(); o3.SetNumber(22); lst.Prepend(o3); - Test.Assert(lst[0].raw_handle == o3.raw_handle); + Test.Assert(lst[0].NativeHandle == o3.NativeHandle); Test.Assert(lst[0].GetNumber() == 22); Test.Assert(lst.Count() == 3); } public static void eina_inlist_as_ienumerable_int() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.Append(88); lst.Append(44); lst.Append(22); @@ -2549,7 +2549,7 @@ class TestEinaInlist public static void eina_inlist_as_ienumerable_string() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.Append("X"); lst.Append("XX"); lst.Append("XXX"); @@ -2564,24 +2564,24 @@ class TestEinaInlist public static void eina_inlist_as_ienumerable_obj() { - var a = new test.Numberwrapper(); - var b = new test.Numberwrapper(); - var c = new test.Numberwrapper(); + var a = new Dummy.Numberwrapper(); + var b = new Dummy.Numberwrapper(); + var c = new Dummy.Numberwrapper(); a.SetNumber(88); b.SetNumber(44); c.SetNumber(22); - var cmp = new test.Numberwrapper[]{a,b,c}; + var cmp = new Dummy.Numberwrapper[]{a,b,c}; - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.Append(a); lst.Append(b); lst.Append(c); int i = 0; - foreach (test.Numberwrapper e in lst) + foreach (Dummy.Numberwrapper e in lst) { Test.AssertEquals(cmp[i].GetNumber(), e.GetNumber()); - Test.Assert(cmp[i].raw_handle == e.raw_handle); + Test.Assert(cmp[i].NativeHandle == e.NativeHandle); ++i; } } @@ -2594,8 +2594,8 @@ class TestEinaInlist public static void test_eina_inlist_int_in() { - test.ITesting t = new test.Testing(); - var lst = new eina.Inlist(); + var t = new Dummy.TestObject(); + var lst = new Eina.Inlist(); lst.AppendArray(base_seq_int); Test.Assert(t.EinaInlistIntIn(lst)); Test.Assert(lst.Own); @@ -2606,8 +2606,8 @@ class TestEinaInlist public static void test_eina_inlist_int_in_own() { - test.ITesting t = new test.Testing(); - var lst = new eina.Inlist(); + var t = new Dummy.TestObject(); + var lst = new Eina.Inlist(); lst.AppendArray(base_seq_int); Test.Assert(t.EinaInlistIntInOwn(lst)); Test.Assert(!lst.Own); @@ -2618,8 +2618,8 @@ class TestEinaInlist public static void test_eina_inlist_int_out() { - test.ITesting t = new test.Testing(); - eina.Inlist lst; + var t = new Dummy.TestObject(); + Eina.Inlist lst; Test.Assert(t.EinaInlistIntOut(out lst)); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2630,8 +2630,8 @@ class TestEinaInlist public static void test_eina_inlist_int_out_own() { - test.ITesting t = new test.Testing(); - eina.Inlist lst; + var t = new Dummy.TestObject(); + Eina.Inlist lst; Test.Assert(t.EinaInlistIntOutOwn(out lst)); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2642,7 +2642,7 @@ class TestEinaInlist public static void test_eina_inlist_int_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaInlistIntReturn(); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2653,7 +2653,7 @@ class TestEinaInlist public static void test_eina_inlist_int_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaInlistIntReturnOwn(); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_int)); @@ -2665,8 +2665,8 @@ class TestEinaInlist // String // public static void test_eina_inlist_str_in() { - test.ITesting t = new test.Testing(); - var lst = new eina.Inlist(); + var t = new Dummy.TestObject(); + var lst = new Eina.Inlist(); lst.AppendArray(base_seq_str); Test.Assert(t.EinaInlistStrIn(lst)); Test.Assert(lst.Own); @@ -2677,8 +2677,8 @@ class TestEinaInlist public static void test_eina_inlist_str_in_own() { - test.ITesting t = new test.Testing(); - var lst = new eina.Inlist(); + var t = new Dummy.TestObject(); + var lst = new Eina.Inlist(); lst.AppendArray(base_seq_str); Test.Assert(t.EinaInlistStrInOwn(lst)); Test.Assert(!lst.Own); @@ -2689,8 +2689,8 @@ class TestEinaInlist public static void test_eina_inlist_str_out() { - test.ITesting t = new test.Testing(); - eina.Inlist lst; + var t = new Dummy.TestObject(); + Eina.Inlist lst; Test.Assert(t.EinaInlistStrOut(out lst)); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2701,8 +2701,8 @@ class TestEinaInlist public static void test_eina_inlist_str_out_own() { - test.ITesting t = new test.Testing(); - eina.Inlist lst; + var t = new Dummy.TestObject(); + Eina.Inlist lst; Test.Assert(t.EinaInlistStrOutOwn(out lst)); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2713,7 +2713,7 @@ class TestEinaInlist public static void test_eina_inlist_str_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaInlistStrReturn(); Test.Assert(!lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2724,7 +2724,7 @@ class TestEinaInlist public static void test_eina_inlist_str_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaInlistStrReturnOwn(); Test.Assert(lst.Own); Test.Assert(lst.ToArray().SequenceEqual(base_seq_str)); @@ -2737,8 +2737,8 @@ class TestEinaInlist public static void test_eina_inlist_obj_in() { - test.ITesting t = new test.Testing(); - var lst = new eina.Inlist(); + var t = new Dummy.TestObject(); + var lst = new Eina.Inlist(); lst.AppendArray(BaseSeqObj()); Test.Assert(t.EinaInlistObjIn(lst)); Test.Assert(lst.Own); @@ -2749,8 +2749,8 @@ class TestEinaInlist public static void test_eina_inlist_obj_in_own() { - test.ITesting t = new test.Testing(); - var lst = new eina.Inlist(); + var t = new Dummy.TestObject(); + var lst = new Eina.Inlist(); lst.AppendArray(BaseSeqObj()); Test.Assert(t.EinaInlistObjInOwn(lst)); Test.Assert(!lst.Own); @@ -2761,8 +2761,8 @@ class TestEinaInlist public static void test_eina_inlist_obj_out() { - test.ITesting t = new test.Testing(); - eina.Inlist lst; + var t = new Dummy.TestObject(); + Eina.Inlist lst; Test.Assert(t.EinaInlistObjOut(out lst)); Test.Assert(!lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2773,8 +2773,8 @@ class TestEinaInlist public static void test_eina_inlist_obj_out_own() { - test.ITesting t = new test.Testing(); - eina.Inlist lst; + var t = new Dummy.TestObject(); + Eina.Inlist lst; Test.Assert(t.EinaInlistObjOutOwn(out lst)); Test.Assert(lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2785,7 +2785,7 @@ class TestEinaInlist public static void test_eina_inlist_obj_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaInlistObjReturn(); Test.Assert(!lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2796,7 +2796,7 @@ class TestEinaInlist public static void test_eina_inlist_obj_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var lst = t.EinaInlistObjReturnOwn(); Test.Assert(lst.Own); NumberwrapperSequenceAssertEqual(lst.ToArray(), BaseSeqObj()); @@ -2807,9 +2807,9 @@ class TestEinaInlist public static void test_eina_inlist_obj_return_in_same_id() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var cmp = BaseSeqObj(); - var a = new eina.Inlist(); + var a = new Eina.Inlist(); a.AppendArray(cmp); var b = t.EinaInlistObjReturnIn(a); NumberwrapperSequenceAssertEqual(a.ToArray(), b.ToArray()); @@ -2817,8 +2817,8 @@ class TestEinaInlist int len = a.Length; for (int i=0; i < len; ++i) { - Test.Assert(a[i].raw_handle == b[i].raw_handle); - Test.Assert(a[i].raw_handle == cmp[i].raw_handle); + Test.Assert(a[i].NativeHandle == b[i].NativeHandle); + Test.Assert(a[i].NativeHandle == cmp[i].NativeHandle); } } } // < TestEinaInlist @@ -2828,7 +2828,7 @@ class TestEinaHash { public static void data_set_int() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); Test.Assert(hsh.Count == 0); hsh[88] = 888; @@ -2848,7 +2848,7 @@ class TestEinaHash public static void data_set_str() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); Test.Assert(hsh.Count == 0); hsh["aa"] = "aaa"; @@ -2868,7 +2868,7 @@ class TestEinaHash public static void data_set_obj() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); Test.Assert(hsh.Count == 0); var a = NW(22); @@ -2879,17 +2879,17 @@ class TestEinaHash var cc = NW(888); hsh[a] = aa; - Test.Assert(hsh[a].raw_handle == aa.raw_handle); + Test.Assert(hsh[a].NativeHandle == aa.NativeHandle); Test.Assert(hsh[a].GetNumber() == aa.GetNumber()); Test.Assert(hsh.Count == 1); hsh[b] = bb; - Test.Assert(hsh[b].raw_handle == bb.raw_handle); + Test.Assert(hsh[b].NativeHandle == bb.NativeHandle); Test.Assert(hsh[b].GetNumber() == bb.GetNumber()); Test.Assert(hsh.Count == 2); hsh[c] = cc; - Test.Assert(hsh[c].raw_handle == cc.raw_handle); + Test.Assert(hsh[c].NativeHandle == cc.NativeHandle); Test.Assert(hsh[c].GetNumber() == cc.GetNumber()); Test.Assert(hsh.Count == 3); @@ -2899,7 +2899,7 @@ class TestEinaHash public static void eina_hash_as_ienumerable_int() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var dct = new Dictionary(); hsh[88] = 888; @@ -2927,7 +2927,7 @@ class TestEinaHash public static void eina_hash_as_ienumerable_str() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var dct = new Dictionary(); hsh["aa"] = "aaa"; @@ -2955,8 +2955,8 @@ class TestEinaHash public static void eina_hash_as_ienumerable_obj() { - var hsh = new eina.Hash(); - var dct = new Dictionary(); + var hsh = new Eina.Hash(); + var dct = new Dictionary(); var a = NW(22); var aa = NW(222); @@ -2975,9 +2975,9 @@ class TestEinaHash int count = 0; - foreach (KeyValuePair kvp in hsh) + foreach (KeyValuePair kvp in hsh) { - Test.Assert(dct[kvp.Key.GetNumber()].raw_handle == kvp.Value.raw_handle); + Test.Assert(dct[kvp.Key.GetNumber()].NativeHandle == kvp.Value.NativeHandle); Test.Assert(dct[kvp.Key.GetNumber()].GetNumber() == kvp.Value.GetNumber()); dct.Remove(kvp.Key.GetNumber()); ++count; @@ -2997,8 +2997,8 @@ class TestEinaHash public static void test_eina_hash_int_in() { - test.ITesting t = new test.Testing(); - var hsh = new eina.Hash(); + var t = new Dummy.TestObject(); + var hsh = new Eina.Hash(); hsh[22] = 222; Test.Assert(t.EinaHashIntIn(hsh)); Test.Assert(hsh.Own); @@ -3010,8 +3010,8 @@ class TestEinaHash public static void test_eina_hash_int_in_own() { - test.ITesting t = new test.Testing(); - var hsh = new eina.Hash(); + var t = new Dummy.TestObject(); + var hsh = new Eina.Hash(); hsh[22] = 222; Test.Assert(t.EinaHashIntInOwn(hsh)); Test.Assert(!hsh.Own); @@ -3025,8 +3025,8 @@ class TestEinaHash public static void test_eina_hash_int_out() { - test.ITesting t = new test.Testing(); - eina.Hash hsh; + var t = new Dummy.TestObject(); + Eina.Hash hsh; Test.Assert(t.EinaHashIntOut(out hsh)); Test.Assert(!hsh.Own); Test.Assert(hsh[22] == 222); @@ -3039,8 +3039,8 @@ class TestEinaHash public static void test_eina_hash_int_out_own() { - test.ITesting t = new test.Testing(); - eina.Hash hsh; + var t = new Dummy.TestObject(); + Eina.Hash hsh; Test.Assert(t.EinaHashIntOutOwn(out hsh)); Test.Assert(hsh.Own); Test.Assert(hsh[22] == 222); @@ -3053,7 +3053,7 @@ class TestEinaHash public static void test_eina_hash_int_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var hsh = t.EinaHashIntReturn(); Test.Assert(!hsh.Own); Test.Assert(hsh[22] == 222); @@ -3066,7 +3066,7 @@ class TestEinaHash public static void test_eina_hash_int_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var hsh = t.EinaHashIntReturnOwn(); Test.Assert(hsh.Own); Test.Assert(hsh[22] == 222); @@ -3081,8 +3081,8 @@ class TestEinaHash public static void test_eina_hash_str_in() { - test.ITesting t = new test.Testing(); - var hsh = new eina.Hash(); + var t = new Dummy.TestObject(); + var hsh = new Eina.Hash(); hsh["aa"] = "aaa"; Test.Assert(t.EinaHashStrIn(hsh)); Test.Assert(hsh.Own); @@ -3094,8 +3094,8 @@ class TestEinaHash public static void test_eina_hash_str_in_own() { - test.ITesting t = new test.Testing(); - var hsh = new eina.Hash(); + var t = new Dummy.TestObject(); + var hsh = new Eina.Hash(); hsh["aa"] = "aaa"; Test.Assert(t.EinaHashStrInOwn(hsh)); Test.Assert(!hsh.Own); @@ -3109,8 +3109,8 @@ class TestEinaHash public static void test_eina_hash_str_out() { - test.ITesting t = new test.Testing(); - eina.Hash hsh; + var t = new Dummy.TestObject(); + Eina.Hash hsh; Test.Assert(t.EinaHashStrOut(out hsh)); Test.Assert(!hsh.Own); Test.Assert(hsh["aa"] == "aaa"); @@ -3123,8 +3123,8 @@ class TestEinaHash public static void test_eina_hash_str_out_own() { - test.ITesting t = new test.Testing(); - eina.Hash hsh; + var t = new Dummy.TestObject(); + Eina.Hash hsh; Test.Assert(t.EinaHashStrOutOwn(out hsh)); Test.Assert(hsh.Own); Test.Assert(hsh["aa"] == "aaa"); @@ -3137,7 +3137,7 @@ class TestEinaHash public static void test_eina_hash_str_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var hsh = t.EinaHashStrReturn(); Test.Assert(!hsh.Own); Test.Assert(hsh["aa"] == "aaa"); @@ -3150,7 +3150,7 @@ class TestEinaHash public static void test_eina_hash_str_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var hsh = t.EinaHashStrReturnOwn(); Test.Assert(hsh.Own); Test.Assert(hsh["aa"] == "aaa"); @@ -3165,19 +3165,19 @@ class TestEinaHash public static void test_eina_hash_obj_in() { - test.ITesting t = new test.Testing(); - var hsh = new eina.Hash(); + var t = new Dummy.TestObject(); + var hsh = new Eina.Hash(); var nwk1 = NW(22); var nwv1 = NW(222); hsh[nwk1] = nwv1; - test.INumberwrapper nwk2; - test.INumberwrapper nwv2; + Dummy.Numberwrapper nwk2; + Dummy.Numberwrapper nwv2; Test.Assert(t.EinaHashObjIn(hsh, nwk1, nwv1, out nwk2, out nwv2)); Test.Assert(hsh.Own); - Test.Assert(hsh[nwk1].raw_handle == nwv1.raw_handle); + Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle); Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber()); Test.Assert(hsh[nwk1].GetNumber() == 222); - Test.Assert(hsh[nwk2].raw_handle == nwv2.raw_handle); + Test.Assert(hsh[nwk2].NativeHandle == nwv2.NativeHandle); Test.Assert(hsh[nwk2].GetNumber() == nwv2.GetNumber()); Test.Assert(hsh[nwk2].GetNumber() == 444); hsh.Dispose(); @@ -3186,19 +3186,19 @@ class TestEinaHash public static void test_eina_hash_obj_in_own() { - test.ITesting t = new test.Testing(); - var hsh = new eina.Hash(); + var t = new Dummy.TestObject(); + var hsh = new Eina.Hash(); var nwk1 = NW(22); var nwv1 = NW(222); hsh[nwk1] = nwv1; - test.INumberwrapper nwk2; - test.INumberwrapper nwv2; + Dummy.Numberwrapper nwk2; + Dummy.Numberwrapper nwv2; Test.Assert(t.EinaHashObjInOwn(hsh, nwk1, nwv1, out nwk2, out nwv2)); Test.Assert(!hsh.Own); - Test.Assert(hsh[nwk1].raw_handle == nwv1.raw_handle); + Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle); Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber()); Test.Assert(hsh[nwk1].GetNumber() == 222); - Test.Assert(hsh[nwk2].raw_handle == nwv2.raw_handle); + Test.Assert(hsh[nwk2].NativeHandle == nwv2.NativeHandle); Test.Assert(hsh[nwk2].GetNumber() == nwv2.GetNumber()); Test.Assert(hsh[nwk2].GetNumber() == 444); hsh.Dispose(); @@ -3208,17 +3208,17 @@ class TestEinaHash public static void test_eina_hash_obj_out() { - test.ITesting t = new test.Testing(); - eina.Hash hsh; - test.INumberwrapper nwk1; - test.INumberwrapper nwv1; + var t = new Dummy.TestObject(); + Eina.Hash hsh; + Dummy.Numberwrapper nwk1; + Dummy.Numberwrapper nwv1; Test.Assert(t.EinaHashObjOut(out hsh, out nwk1, out nwv1)); Test.Assert(!hsh.Own); - Test.Assert(hsh[nwk1].raw_handle == nwv1.raw_handle); + Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle); Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber()); Test.Assert(hsh[nwk1].GetNumber() == 222); - test.INumberwrapper nwk2 = NW(44); - test.INumberwrapper nwv2 = NW(444); + Dummy.Numberwrapper nwk2 = NW(44); + Dummy.Numberwrapper nwv2 = NW(444); hsh[nwk2] = nwv2; hsh.Dispose(); Test.Assert(hsh.Handle == IntPtr.Zero); @@ -3227,17 +3227,17 @@ class TestEinaHash public static void test_eina_hash_obj_out_own() { - test.ITesting t = new test.Testing(); - eina.Hash hsh; - test.INumberwrapper nwk1; - test.INumberwrapper nwv1; + var t = new Dummy.TestObject(); + Eina.Hash hsh; + Dummy.Numberwrapper nwk1; + Dummy.Numberwrapper nwv1; Test.Assert(t.EinaHashObjOutOwn(out hsh, out nwk1, out nwv1)); Test.Assert(hsh.Own); - Test.Assert(hsh[nwk1].raw_handle == nwv1.raw_handle); + Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle); Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber()); Test.Assert(hsh[nwk1].GetNumber() == 222); - test.INumberwrapper nwk2 = NW(44); - test.INumberwrapper nwv2 = NW(444); + Dummy.Numberwrapper nwk2 = NW(44); + Dummy.Numberwrapper nwv2 = NW(444); hsh[nwk2] = nwv2; hsh.Dispose(); Test.Assert(hsh.Handle == IntPtr.Zero); @@ -3246,16 +3246,16 @@ class TestEinaHash public static void test_eina_hash_obj_return() { - test.ITesting t = new test.Testing(); - test.INumberwrapper nwk1; - test.INumberwrapper nwv1; + var t = new Dummy.TestObject(); + Dummy.Numberwrapper nwk1; + Dummy.Numberwrapper nwv1; var hsh = t.EinaHashObjReturn(out nwk1, out nwv1); Test.Assert(!hsh.Own); - Test.Assert(hsh[nwk1].raw_handle == nwv1.raw_handle); + Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle); Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber()); Test.Assert(hsh[nwk1].GetNumber() == 222); - test.INumberwrapper nwk2 = NW(44); - test.INumberwrapper nwv2 = NW(444); + Dummy.Numberwrapper nwk2 = NW(44); + Dummy.Numberwrapper nwv2 = NW(444); hsh[nwk2] = nwv2; hsh.Dispose(); Test.Assert(hsh.Handle == IntPtr.Zero); @@ -3264,16 +3264,16 @@ class TestEinaHash public static void test_eina_hash_obj_return_own() { - test.ITesting t = new test.Testing(); - test.INumberwrapper nwk1; - test.INumberwrapper nwv1; + var t = new Dummy.TestObject(); + Dummy.Numberwrapper nwk1; + Dummy.Numberwrapper nwv1; var hsh = t.EinaHashObjReturnOwn(out nwk1, out nwv1); Test.Assert(hsh.Own); - Test.Assert(hsh[nwk1].raw_handle == nwv1.raw_handle); + Test.Assert(hsh[nwk1].NativeHandle == nwv1.NativeHandle); Test.Assert(hsh[nwk1].GetNumber() == nwv1.GetNumber()); Test.Assert(hsh[nwk1].GetNumber() == 222); - test.INumberwrapper nwk2 = NW(44); - test.INumberwrapper nwv2 = NW(444); + Dummy.Numberwrapper nwk2 = NW(44); + Dummy.Numberwrapper nwv2 = NW(444); hsh[nwk2] = nwv2; hsh.Dispose(); Test.Assert(hsh.Handle == IntPtr.Zero); @@ -3288,7 +3288,7 @@ class TestEinaIterator public static void eina_array_int_empty_iterator() { - var arr = new eina.Array(); + var arr = new Eina.Array(); var itr = arr.GetIterator(); int idx = 0; foreach (int e in itr) @@ -3303,7 +3303,7 @@ class TestEinaIterator public static void eina_array_int_filled_iterator() { - var arr = new eina.Array(); + var arr = new Eina.Array(); arr.Append(base_seq_int); var itr = arr.GetIterator(); int idx = 0; @@ -3320,7 +3320,7 @@ class TestEinaIterator public static void eina_array_str_empty_iterator() { - var arr = new eina.Array(); + var arr = new Eina.Array(); var itr = arr.GetIterator(); int idx = 0; foreach (string e in itr) @@ -3335,7 +3335,7 @@ class TestEinaIterator public static void eina_array_str_filled_iterator() { - var arr = new eina.Array(); + var arr = new Eina.Array(); arr.Append(base_seq_str); var itr = arr.GetIterator(); int idx = 0; @@ -3352,10 +3352,10 @@ class TestEinaIterator public static void eina_array_obj_empty_iterator() { - var arr = new eina.Array(); + var arr = new Eina.Array(); var itr = arr.GetIterator(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { ++idx; } @@ -3367,14 +3367,14 @@ class TestEinaIterator public static void eina_array_obj_filled_iterator() { - var arr = new eina.Array(); + var arr = new Eina.Array(); var base_objs = BaseSeqObj(); arr.Append(base_objs); var itr = arr.GetIterator(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { - Test.Assert(e.raw_handle == base_objs[idx].raw_handle); + Test.Assert(e.NativeHandle == base_objs[idx].NativeHandle); Test.Assert(e.GetNumber() == base_objs[idx].GetNumber()); ++idx; } @@ -3388,7 +3388,7 @@ class TestEinaIterator public static void eina_inarray_int_empty_iterator() { - var arr = new eina.Inarray(); + var arr = new Eina.Inarray(); var itr = arr.GetIterator(); int idx = 0; foreach (int e in itr) @@ -3403,7 +3403,7 @@ class TestEinaIterator public static void eina_inarray_int_filled_iterator() { - var arr = new eina.Inarray(); + var arr = new Eina.Inarray(); arr.Append(base_seq_int); var itr = arr.GetIterator(); int idx = 0; @@ -3422,7 +3422,7 @@ class TestEinaIterator public static void eina_list_int_empty_iterator() { - var lst = new eina.List(); + var lst = new Eina.List(); var itr = lst.GetIterator(); int idx = 0; foreach (int e in itr) @@ -3437,7 +3437,7 @@ class TestEinaIterator public static void eina_list_int_filled_iterator() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.AppendArray(base_seq_int); var itr = lst.GetIterator(); int idx = 0; @@ -3454,7 +3454,7 @@ class TestEinaIterator public static void eina_list_str_empty_iterator() { - var lst = new eina.List(); + var lst = new Eina.List(); var itr = lst.GetIterator(); int idx = 0; foreach (string e in itr) @@ -3469,7 +3469,7 @@ class TestEinaIterator public static void eina_list_str_filled_iterator() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.AppendArray(base_seq_str); var itr = lst.GetIterator(); int idx = 0; @@ -3486,10 +3486,10 @@ class TestEinaIterator public static void eina_list_obj_empty_iterator() { - var lst = new eina.List(); + var lst = new Eina.List(); var itr = lst.GetIterator(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { ++idx; } @@ -3501,14 +3501,14 @@ class TestEinaIterator public static void eina_list_obj_filled_iterator() { - var lst = new eina.List(); + var lst = new Eina.List(); var base_objs = BaseSeqObj(); lst.AppendArray(base_objs); var itr = lst.GetIterator(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { - Test.Assert(e.raw_handle == base_objs[idx].raw_handle); + Test.Assert(e.NativeHandle == base_objs[idx].NativeHandle); Test.Assert(e.GetNumber() == base_objs[idx].GetNumber()); ++idx; } @@ -3522,7 +3522,7 @@ class TestEinaIterator public static void eina_inlist_int_empty_iterator() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); var itr = lst.GetIterator(); int idx = 0; foreach (int e in itr) @@ -3537,7 +3537,7 @@ class TestEinaIterator public static void eina_inlist_int_filled_iterator() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.AppendArray(base_seq_int); var itr = lst.GetIterator(); int idx = 0; @@ -3556,7 +3556,7 @@ class TestEinaIterator public static void eina_hash_keys_int_empty_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var itr = hsh.Keys(); bool entered = false; foreach (int e in itr) @@ -3571,7 +3571,7 @@ class TestEinaIterator public static void eina_hash_values_int_empty_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var itr = hsh.Values(); bool entered = false; foreach (int e in itr) @@ -3586,7 +3586,7 @@ class TestEinaIterator public static void eina_hash_keys_int_filled_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var dct = new Dictionary(); hsh[22] = 222; hsh[44] = 444; @@ -3613,7 +3613,7 @@ class TestEinaIterator public static void eina_hash_values_int_filled_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var dct = new Dictionary(); hsh[22] = 222; hsh[44] = 444; @@ -3640,7 +3640,7 @@ class TestEinaIterator public static void eina_hash_keys_str_empty_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var itr = hsh.Keys(); bool entered = false; foreach (string e in itr) @@ -3655,7 +3655,7 @@ class TestEinaIterator public static void eina_hash_values_str_empty_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var itr = hsh.Values(); bool entered = false; foreach (string e in itr) @@ -3670,7 +3670,7 @@ class TestEinaIterator public static void eina_hash_keys_str_filled_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var dct = new Dictionary(); hsh["aa"] = "aaa"; hsh["bb"] = "bbb"; @@ -3697,7 +3697,7 @@ class TestEinaIterator public static void eina_hash_values_str_filled_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var dct = new Dictionary(); hsh["aa"] = "aaa"; hsh["bb"] = "bbb"; @@ -3724,10 +3724,10 @@ class TestEinaIterator public static void eina_hash_keys_obj_empty_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var itr = hsh.Keys(); bool entered = false; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { entered = true; } @@ -3739,10 +3739,10 @@ class TestEinaIterator public static void eina_hash_values_obj_empty_iterator() { - var hsh = new eina.Hash(); + var hsh = new Eina.Hash(); var itr = hsh.Values(); bool entered = false; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { entered = true; } @@ -3754,8 +3754,8 @@ class TestEinaIterator public static void eina_hash_keys_obj_filled_iterator() { - var hsh = new eina.Hash(); - var dct = new eina.Hash(); + var hsh = new Eina.Hash(); + var dct = new Eina.Hash(); var a = NW(22); var b = NW(44); var c = NW(88); @@ -3772,10 +3772,10 @@ class TestEinaIterator var itr = hsh.Keys(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { Test.Assert(dct[e.GetNumber()] != null); - Test.Assert(dct[e.GetNumber()].raw_handle == e.raw_handle); + Test.Assert(dct[e.GetNumber()].NativeHandle == e.NativeHandle); Test.Assert(dct[e.GetNumber()].GetNumber() == e.GetNumber()); dct.Remove(e.GetNumber()); ++idx; @@ -3789,8 +3789,8 @@ class TestEinaIterator public static void eina_hash_values_obj_filled_iterator() { - var hsh = new eina.Hash(); - var dct = new eina.Hash(); + var hsh = new Eina.Hash(); + var dct = new Eina.Hash(); var a = NW(22); var b = NW(44); var c = NW(88); @@ -3807,10 +3807,10 @@ class TestEinaIterator var itr = hsh.Values(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { Test.Assert(dct[e.GetNumber()] != null); - Test.Assert(dct[e.GetNumber()].raw_handle == e.raw_handle); + Test.Assert(dct[e.GetNumber()].NativeHandle == e.NativeHandle); Test.Assert(dct[e.GetNumber()].GetNumber() == e.GetNumber()); dct.Remove(e.GetNumber()); ++idx; @@ -3830,8 +3830,8 @@ class TestEinaIterator public static void test_eina_iterator_int_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_int); var itr = arr.GetIterator(); @@ -3853,8 +3853,8 @@ class TestEinaIterator public static void test_eina_iterator_int_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_int); var itr = arr.GetIterator(); arr.OwnContent = false; @@ -3880,8 +3880,8 @@ class TestEinaIterator public static void test_eina_iterator_int_out() { - test.ITesting t = new test.Testing(); - eina.Iterator itr; + var t = new Dummy.TestObject(); + Eina.Iterator itr; Test.Assert(t.EinaIteratorIntOut(out itr)); @@ -3904,8 +3904,8 @@ class TestEinaIterator public static void test_eina_iterator_int_out_own() { - test.ITesting t = new test.Testing(); - eina.Iterator itr; + var t = new Dummy.TestObject(); + Eina.Iterator itr; Test.Assert(t.EinaIteratorIntOutOwn(out itr)); @@ -3925,7 +3925,7 @@ class TestEinaIterator public static void test_eina_iterator_int_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var itr = t.EinaIteratorIntReturn(); @@ -3947,7 +3947,7 @@ class TestEinaIterator public static void test_eina_iterator_int_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var itr = t.EinaIteratorIntReturnOwn(); @@ -3969,8 +3969,8 @@ class TestEinaIterator public static void test_eina_iterator_str_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_str); var itr = arr.GetIterator(); @@ -3992,8 +3992,8 @@ class TestEinaIterator public static void test_eina_iterator_str_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(base_seq_str); var itr = arr.GetIterator(); arr.OwnContent = false; @@ -4023,8 +4023,8 @@ class TestEinaIterator public static void test_eina_iterator_str_out() { - test.ITesting t = new test.Testing(); - eina.Iterator itr; + var t = new Dummy.TestObject(); + Eina.Iterator itr; Test.Assert(t.EinaIteratorStrOut(out itr)); @@ -4046,8 +4046,8 @@ class TestEinaIterator public static void test_eina_iterator_str_out_own() { - test.ITesting t = new test.Testing(); - eina.Iterator itr; + var t = new Dummy.TestObject(); + Eina.Iterator itr; Test.Assert(t.EinaIteratorStrOutOwn(out itr)); @@ -4067,7 +4067,7 @@ class TestEinaIterator public static void test_eina_iterator_str_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var itr = t.EinaIteratorStrReturn(); @@ -4089,7 +4089,7 @@ class TestEinaIterator public static void test_eina_iterator_str_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var itr = t.EinaIteratorStrReturnOwn(); @@ -4111,8 +4111,8 @@ class TestEinaIterator public static void test_eina_iterator_obj_in() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(BaseSeqObj()); var itr = arr.GetIterator(); @@ -4134,8 +4134,8 @@ class TestEinaIterator public static void test_eina_iterator_obj_in_own() { - test.ITesting t = new test.Testing(); - var arr = new eina.Array(); + var t = new Dummy.TestObject(); + var arr = new Eina.Array(); arr.Append(BaseSeqObj()); var itr = arr.GetIterator(); arr.OwnContent = false; @@ -4161,8 +4161,8 @@ class TestEinaIterator public static void test_eina_iterator_obj_out() { - test.ITesting t = new test.Testing(); - eina.Iterator itr; + var t = new Dummy.TestObject(); + Eina.Iterator itr; Test.Assert(t.EinaIteratorObjOut(out itr)); @@ -4172,7 +4172,7 @@ class TestEinaIterator var base_seq_obj = BaseSeqObj(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber()); ++idx; @@ -4186,8 +4186,8 @@ class TestEinaIterator public static void test_eina_iterator_obj_out_own() { - test.ITesting t = new test.Testing(); - eina.Iterator itr; + var t = new Dummy.TestObject(); + Eina.Iterator itr; Test.Assert(t.EinaIteratorObjOutOwn(out itr)); @@ -4197,7 +4197,7 @@ class TestEinaIterator var base_seq_obj = BaseSeqObj(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber()); ++idx; @@ -4209,7 +4209,7 @@ class TestEinaIterator public static void test_eina_iterator_obj_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var itr = t.EinaIteratorObjReturn(); @@ -4219,7 +4219,7 @@ class TestEinaIterator var base_seq_obj = BaseSeqObj(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber()); ++idx; @@ -4233,7 +4233,7 @@ class TestEinaIterator public static void test_eina_iterator_obj_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var itr = t.EinaIteratorObjReturnOwn(); @@ -4243,7 +4243,7 @@ class TestEinaIterator var base_seq_obj = BaseSeqObj(); int idx = 0; - foreach (test.INumberwrapper e in itr) + foreach (Dummy.Numberwrapper e in itr) { Test.AssertEquals(e.GetNumber(), base_seq_obj[idx].GetNumber()); ++idx; @@ -4259,13 +4259,13 @@ class TestEinaAccessor { public static void basic_accessor_list() { - var lst = new eina.List(); + var lst = new Eina.List(); lst.Append(1); lst.Append(2); lst.Append(3); lst.Append(4); - eina.Accessor accessor = lst.GetAccessor(); + Eina.Accessor accessor = lst.GetAccessor(); var zipped = accessor.Zip(lst, (first, second) => new Tuple(first, second)); @@ -4277,10 +4277,10 @@ class TestEinaAccessor public static void basic_accessor_array() { - var arr = new eina.Array(); + var arr = new Eina.Array(); arr.Append(base_seq_str); - eina.Accessor accessor = arr.GetAccessor(); + Eina.Accessor accessor = arr.GetAccessor(); var zipped = accessor.Zip(arr, (first, second) => new Tuple(first, second)); @@ -4292,13 +4292,13 @@ class TestEinaAccessor public static void basic_accessor_inlist() { - var lst = new eina.Inlist(); + var lst = new Eina.Inlist(); lst.Append(1); lst.Append(2); lst.Append(3); lst.Append(4); - eina.Accessor accessor = lst.GetAccessor(); + Eina.Accessor accessor = lst.GetAccessor(); var zipped = accessor.Zip(lst, (first, second) => new Tuple(first, second)); @@ -4310,10 +4310,10 @@ class TestEinaAccessor public static void basic_accessor_inarray() { - var arr = new eina.Inarray(); + var arr = new Eina.Inarray(); arr.Append(base_seq_int); - eina.Accessor accessor = arr.GetAccessor(); + Eina.Accessor accessor = arr.GetAccessor(); var zipped = accessor.Zip(arr, (first, second) => new Tuple(first, second)); diff --git a/src/tests/efl_mono/Eo.cs b/src/tests/efl_mono/Eo.cs index 5b88f57464..535c309e1c 100644 --- a/src/tests/efl_mono/Eo.cs +++ b/src/tests/efl_mono/Eo.cs @@ -6,7 +6,7 @@ namespace TestSuite class TestEo { - private class Derived : test.TestingInherit + private class Derived : Dummy.TestObject { } @@ -15,21 +15,20 @@ class TestEo // public static void return_same_object() { - test.ITesting testing = new test.Testing(); - test.ITesting o1 = testing.ReturnObject(); - Test.Assert(o1.raw_handle != IntPtr.Zero); - Test.Assert(o1.raw_handle == testing.raw_handle); - test.ITesting o2 = o1.ReturnObject(); - Test.Assert(o2.raw_handle != IntPtr.Zero); - Test.Assert(o2.raw_handle == o1.raw_handle); + var testing = new Dummy.TestObject(); + var o1 = testing.ReturnObject(); + Test.Assert(o1.NativeHandle != IntPtr.Zero); + Test.Assert(o1.NativeHandle == testing.NativeHandle); + var o2 = o1.ReturnObject(); + Test.Assert(o2.NativeHandle != IntPtr.Zero); + Test.Assert(o2.NativeHandle == o1.NativeHandle); } - /* Commented out as adding the event listener seems to prevent it from being GC'd. public static void destructor_really_frees() { bool delEventCalled = false; { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.DEL += (object sender, EventArgs e) => { delEventCalled = true; }; } @@ -46,8 +45,10 @@ class TestEo { bool delEventCalled = false; { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); + Eina.Log.Error($"Created object 0x{obj.NativeHandle.ToInt64():x}"); obj.DelEvt += (object sender, EventArgs e) => { delEventCalled = true; }; + Eina.Log.Error($"Will dispose object 0x{obj.NativeHandle.ToInt64():x}"); ((IDisposable)obj).Dispose(); } @@ -59,7 +60,7 @@ class TestEo { bool delEventCalled = false; { - test.ITesting obj = new Derived(); + var obj = new Derived(); obj.DEL += (object sender, EventArgs e) => { delEventCalled = true; }; } @@ -76,7 +77,7 @@ class TestEo { bool delEventCalled = false; { - test.ITesting obj = new Derived(); + var obj = new Derived(); obj.DEL += (object sender, EventArgs e) => { delEventCalled = true; }; ((IDisposable)obj).Dispose(); } @@ -86,7 +87,8 @@ class TestEo */ } -class MyLoop : efl.LoopInherit + +class MyLoop : Efl.Loop { public MyLoop() : base(null) { } } @@ -95,8 +97,8 @@ class TestEoInherit { public static void instantiate_inherited() { - efl.ILoop loop = new MyLoop(); - Test.Assert(loop.raw_handle != System.IntPtr.Zero); + Efl.Loop loop = new MyLoop(); + Test.Assert(loop.NativeHandle != System.IntPtr.Zero); } } @@ -104,7 +106,7 @@ class TestEoNames { public static void name_getset() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); string name = "Dummy"; obj.SetName(name); @@ -118,9 +120,9 @@ class TestEoConstructingMethods { bool called = false; string name = "Test object"; - test.ITesting obj = new test.Testing(null, (test.ITesting a) => { + var obj = new Dummy.TestObject(null, (Dummy.TestObject a) => { called = true; - Console.WriteLine("callback: obj raw_handle: {0:x}", a.raw_handle); + Console.WriteLine("callback: obj NativeHandle: {0:x}", a.NativeHandle); a.SetName(name); }); @@ -128,10 +130,10 @@ class TestEoConstructingMethods Test.AssertEquals(name, obj.GetName()); } - private class Derived : test.TestingInherit + private class Derived : Dummy.TestObject { - public Derived(test.ITesting parent = null, - test.TestingInherit.ConstructingMethod cb = null) : base(parent, cb) { + public Derived(Dummy.TestObject parent = null, + Dummy.TestObject.ConstructingMethod cb = null) : base(parent, cb) { } } @@ -139,7 +141,7 @@ class TestEoConstructingMethods { bool called = false; string name = "Another test object"; - Derived obj = new Derived(null, (test.ITesting a) => { + Derived obj = new Derived(null, (Dummy.TestObject a) => { called = true; a.SetComment(name); }); @@ -153,41 +155,41 @@ class TestEoParent { public static void basic_parent() { - test.ITesting parent = new test.Testing(null); - test.ITesting child = new test.Testing(parent); + var parent = new Dummy.TestObject(null); + var child = new Dummy.TestObject(parent); Test.AssertEquals(parent, child.GetParent()); - test.ITesting parent_retrieved = test.Testing.static_cast(child.GetParent()); + var parent_retrieved = Dummy.TestObject.static_cast(child.GetParent()); Test.AssertEquals(parent, parent_retrieved); } public static void parent_inherited_class() { - test.INumberwrapper parent = new test.Numberwrapper(null); - test.ITesting child = new test.Testing(parent); + Dummy.Numberwrapper parent = new Dummy.Numberwrapper(null); + var child = new Dummy.TestObject(parent); Test.AssertEquals(parent, child.GetParent()); - test.INumberwrapper parent_retrieved = test.Numberwrapper.static_cast(child.GetParent()); + Dummy.Numberwrapper parent_retrieved = Dummy.Numberwrapper.static_cast(child.GetParent()); Test.AssertEquals(parent, parent_retrieved); } - private class Derived : test.TestingInherit + private class Derived : Dummy.TestObject { - public Derived(test.ITesting parent = null) : base (parent) + public Derived(Dummy.TestObject parent = null) : base (parent) { } } public static void basic_parent_managed_inherit() { - test.ITesting parent = new Derived(null); - test.ITesting child = new Derived(parent); + var parent = new Derived(null); + var child = new Derived(parent); Test.AssertEquals(parent, child.GetParent()); - test.ITesting parent_from_cast = test.Testing.static_cast(child.GetParent()); + var parent_from_cast = Dummy.TestObject.static_cast(child.GetParent()); Test.AssertEquals(parent, parent_from_cast); } } @@ -197,15 +199,15 @@ class TestKlassMethods public static void basic_class_method() { int reference = 0xbeef; - test.Testing.SetKlassProp(reference); - Test.AssertEquals(reference, test.Testing.GetKlassProp()); + Dummy.TestObject.SetKlassProp(reference); + Test.AssertEquals(reference, Dummy.TestObject.GetKlassProp()); } public static void inherited_class_method() { int reference = 0xdead; - test.Child.SetKlassProp(reference); - Test.AssertEquals(reference, test.Child.GetKlassProp()); + Dummy.Child.SetKlassProp(reference); + Test.AssertEquals(reference, Dummy.Child.GetKlassProp()); } } @@ -213,13 +215,13 @@ class TestTypedefs { public static void basic_typedef_test() { - test.ITesting obj = new test.Testing(); - test.MyInt input = 1900; - test.MyInt receiver; + var obj = new Dummy.TestObject(); + Dummy.MyInt input = 1900; + Dummy.MyInt receiver; int ret = obj.BypassTypedef(input, out receiver); - Test.AssertEquals((test.MyInt)ret, input); + Test.AssertEquals((Dummy.MyInt)ret, input); Test.AssertEquals(receiver, input); } @@ -229,13 +231,13 @@ class TestEoAccessors { public static void basic_eo_accessors() { - test.ITesting obj = new test.Testing(); - eina.List lst = new eina.List(); + var obj = new Dummy.TestObject(); + Eina.List lst = new Eina.List(); lst.Append(4); lst.Append(3); lst.Append(2); lst.Append(5); - eina.Accessor acc = obj.CloneAccessor(lst.GetAccessor()); + Eina.Accessor acc = obj.CloneAccessor(lst.GetAccessor()); var zipped = acc.Zip(lst, (first, second) => new Tuple(first, second)); @@ -248,10 +250,10 @@ class TestEoAccessors class TestEoFinalize { - public sealed class Inherit : efl.ObjectInherit + public sealed class Inherit : Efl.Object { public bool finalizeCalled = false; - public override efl.IObject FinalizeAdd() + public override Efl.Object FinalizeAdd() { finalizeCalled = true; return this; @@ -266,4 +268,39 @@ class TestEoFinalize } } +class TestEoMultipleChildClasses +{ + + public sealed class FirstChild : Efl.Object + { + public int receivedValue = 0; + public override Efl.Object FinalizeAdd() + { + receivedValue = 1; + return this; + } + } + + public sealed class SecondChild : Efl.Object + { + public int receivedValue = 0; + public override Efl.Object FinalizeAdd() + { + receivedValue = 2; + return this; + } + } + + public static void test_multiple_child_classes() + { + FirstChild obj = new FirstChild(); + Test.AssertEquals(1, obj.receivedValue); + SecondChild obj2 = new SecondChild(); + Test.AssertEquals(2, obj2.receivedValue); + + obj = new FirstChild(); + Test.AssertEquals(1, obj.receivedValue); + } +} + } diff --git a/src/tests/efl_mono/EoPromises.cs b/src/tests/efl_mono/EoPromises.cs index 0c7c2e95e8..d5772396da 100644 --- a/src/tests/efl_mono/EoPromises.cs +++ b/src/tests/efl_mono/EoPromises.cs @@ -9,24 +9,24 @@ class TestEoPromises { public static void test_simple_task_run() { - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Future future = loop.Idle(); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Future future = loop.Idle(); bool callbackCalled = false; int ret_code = 1992; - future.Then((eina.Value value) => { + future.Then((Eina.Value value) => { callbackCalled = true; - eina.Value v = new eina.Value(eina.ValueType.Int32); + Eina.Value v = new Eina.Value(Eina.ValueType.Int32); v.Set(ret_code); loop.Quit(v); return value; }); - eina.Value ret_value = loop.Begin(); + Eina.Value ret_value = loop.Begin(); Test.Assert(callbackCalled, "Future loop callback must have been called."); - Test.AssertEquals(ret_value.GetValueType(), eina.ValueType.Int32); + Test.AssertEquals(ret_value.GetValueType(), Eina.ValueType.Int32); int ret_from_value; Test.Assert(ret_value.Get(out ret_from_value)); @@ -36,17 +36,17 @@ class TestEoPromises public static void test_object_promise() { - efl.ILoop loop = efl.App.GetLoopMain(); - test.Testing obj = new test.Testing(); + Efl.Loop loop = Efl.App.GetLoopMain(); + var obj = new Dummy.TestObject(); - eina.Future future = obj.GetFuture(); + Eina.Future future = obj.GetFuture(); bool callbackCalled = false; int receivedValue = -1; int sentValue = 1984; - future.Then((eina.Value value) => { + future.Then((Eina.Value value) => { callbackCalled = true; - Test.AssertEquals(value.GetValueType(), eina.ValueType.Int32); + Test.AssertEquals(value.GetValueType(), Eina.ValueType.Int32); value.Get(out receivedValue); return value; @@ -61,17 +61,17 @@ class TestEoPromises public static void test_object_promise_cancel() { - efl.ILoop loop = efl.App.GetLoopMain(); - test.Testing obj = new test.Testing(); + Efl.Loop loop = Efl.App.GetLoopMain(); + var obj = new Dummy.TestObject(); - eina.Future future = obj.GetFuture(); + Eina.Future future = obj.GetFuture(); bool callbackCalled = false; - eina.Error receivedError = -1; - eina.Error sentError = 120; - future.Then((eina.Value value) => { + Eina.Error receivedError = -1; + Eina.Error sentError = 120; + future.Then((Eina.Value value) => { callbackCalled = true; - Test.AssertEquals(value.GetValueType(), eina.ValueType.Error); + Test.AssertEquals(value.GetValueType(), Eina.ValueType.Error); value.Get(out receivedError); return value; @@ -88,10 +88,10 @@ class TestEoPromises class LoopConsumer { - public static async Task Consume(efl.ILoop loop) + public static async Task Consume(Efl.Loop loop) { - Task task = loop.IdleAsync(); - eina.Value v = await task; + Task task = loop.IdleAsync(); + Eina.Value v = await task; loop.Quit(v); } } @@ -100,7 +100,7 @@ class TestLoopEoAsyncMethods { public static void test_simple_async() { - efl.ILoop loop = efl.App.GetLoopMain(); + Efl.Loop loop = Efl.App.GetLoopMain(); Task t = LoopConsumer.Consume(loop); loop.Begin(); @@ -113,18 +113,18 @@ class TestEoAsyncMethods public static void test_async_fulfill() { - efl.ILoop loop = efl.App.GetLoopMain(); - test.ITesting obj = new test.Testing(); + Efl.Loop loop = Efl.App.GetLoopMain(); + var obj = new Dummy.TestObject(); - Task task = obj.GetFutureAsync(); + Task task = obj.GetFutureAsync(); int sentValue = 1337; obj.FulfillPromise(sentValue); loop.Iterate(); - eina.Value v = task.Result; - Test.AssertEquals(v.GetValueType(), eina.ValueType.Int32); + Eina.Value v = task.Result; + Test.AssertEquals(v.GetValueType(), Eina.ValueType.Int32); int receivedValue; v.Get(out receivedValue); @@ -133,11 +133,11 @@ class TestEoAsyncMethods public static void test_async_cancel() { - efl.ILoop loop = efl.App.GetLoopMain(); - test.ITesting obj = new test.Testing(); + Efl.Loop loop = Efl.App.GetLoopMain(); + var obj = new Dummy.TestObject(); CancellationTokenSource cancelSrc = new CancellationTokenSource(); - Task task = obj.GetFutureAsync(cancelSrc.Token); + Task task = obj.GetFutureAsync(cancelSrc.Token); cancelSrc.Cancel(); loop.Iterate(); @@ -145,7 +145,7 @@ class TestEoAsyncMethods bool raised = false; try { - eina.Value v = task.Result; + Eina.Value v = task.Result; } catch (AggregateException ae) { @@ -162,12 +162,12 @@ class TestEoAsyncMethods public static void test_async_reject() { - efl.ILoop loop = efl.App.GetLoopMain(); - test.ITesting obj = new test.Testing(); + Efl.Loop loop = Efl.App.GetLoopMain(); + var obj = new Dummy.TestObject(); - Task task = obj.GetFutureAsync(); + Task task = obj.GetFutureAsync(); - eina.Error sentError = 1337; + Eina.Error sentError = 1337; obj.RejectPromise(sentError); loop.Iterate(); @@ -175,15 +175,15 @@ class TestEoAsyncMethods bool raised = false; try { - eina.Value v = task.Result; + Eina.Value v = task.Result; } catch (AggregateException ae) { raised = true; ae.Handle((x) => { - Test.Assert(x is efl.FutureException, "AggregateException must have been TaskCanceledException"); - efl.FutureException ex = x as efl.FutureException; + Test.Assert(x is Efl.FutureException, "AggregateException must have been TaskCanceledException"); + Efl.FutureException ex = x as Efl.FutureException; Test.AssertEquals(ex.Error, sentError); return true; }); diff --git a/src/tests/efl_mono/Errors.cs b/src/tests/efl_mono/Errors.cs index b7359c1273..9f4ebf2690 100644 --- a/src/tests/efl_mono/Errors.cs +++ b/src/tests/efl_mono/Errors.cs @@ -7,10 +7,10 @@ class TestEinaError { public static void basic_test() { - eina.Error.Clear(); - Test.AssertNotRaises(eina.Error.RaiseIfOccurred); - eina.Error.Set(eina.Error.ENOENT); - Test.AssertRaises(eina.Error.RaiseIfOccurred); + Eina.Error.Clear(); + Test.AssertNotRaises(Eina.Error.RaiseIfOccurred); + Eina.Error.Set(Eina.Error.ENOENT); + Test.AssertRaises(Eina.Error.RaiseIfOccurred); } } @@ -19,24 +19,24 @@ class TestEolianError public static void global_eina_error() { - test.ITesting obj = new test.Testing(); - Test.AssertRaises(() => obj.RaisesEinaError()); + var obj = new Dummy.TestObject(); + Test.AssertRaises(() => obj.RaisesEinaError()); } - class Child : test.TestingInherit { + class Child : Dummy.TestObject { } public static void global_eina_error_inherited() { - test.ITesting obj = new Child(); - Test.AssertRaises(() => obj.RaisesEinaError()); + var obj = new Child(); + Test.AssertRaises(() => obj.RaisesEinaError()); } class CustomException : Exception { public CustomException(string msg): base(msg) {} } - class Overrider : test.TestingInherit { + class Overrider : Dummy.TestObject { public override void ChildrenRaiseError() { throw (new CustomException("Children error")); } @@ -44,18 +44,18 @@ class TestEolianError public static void exception_raised_from_inherited_virtual() { - test.ITesting obj = new Overrider(); + var obj = new Overrider(); - Test.AssertRaises(obj.CallChildrenRaiseError); + Test.AssertRaises(obj.CallChildrenRaiseError); } // return eina_error public static void eina_error_return() { - test.ITesting obj = new test.Testing(); - eina.Error expected = 42; + var obj = new Dummy.TestObject(); + Eina.Error expected = 42; obj.SetErrorRet(expected); - eina.Error error = obj.ReturnsError(); + Eina.Error error = obj.ReturnsError(); Test.AssertEquals(expected, error); @@ -66,12 +66,12 @@ class TestEolianError Test.AssertEquals(expected, error); } - class ReturnOverride : test.TestingInherit { - eina.Error code; - public override void SetErrorRet(eina.Error err) { + class ReturnOverride : Dummy.TestObject { + Eina.Error code; + public override void SetErrorRet(Eina.Error err) { code = 2 * err; } - public override eina.Error ReturnsError() + public override Eina.Error ReturnsError() { return code; } @@ -79,18 +79,18 @@ class TestEolianError public static void eina_error_return_from_inherited_virtual() { - test.ITesting obj = new ReturnOverride(); - eina.Error expected = 42; + var obj = new ReturnOverride(); + Eina.Error expected = 42; obj.SetErrorRet(expected); - eina.Error error = obj.ReturnsError(); + Eina.Error error = obj.ReturnsError(); - Test.AssertEquals(new eina.Error(expected * 2), error); + Test.AssertEquals(new Eina.Error(expected * 2), error); expected = 0; obj.SetErrorRet(expected); error = obj.ReturnsError(); - Test.AssertEquals(new eina.Error(expected * 2), error); + Test.AssertEquals(new Eina.Error(expected * 2), error); } // events @@ -108,11 +108,11 @@ class TestEolianError // An event whose managed delegate generates an exception // must set an eina_error so it can be reported back to // the managed code - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); Listener listener = new Listener(); obj.EvtWithIntEvt += listener.callback; - Test.AssertRaises(() => { obj.EmitEventWithInt(2); }); + Test.AssertRaises(() => { obj.EmitEventWithInt(2); }); } } } diff --git a/src/tests/efl_mono/Evas.cs b/src/tests/efl_mono/Evas.cs index 4b5622593e..6d40412c3d 100644 --- a/src/tests/efl_mono/Evas.cs +++ b/src/tests/efl_mono/Evas.cs @@ -2,9 +2,9 @@ using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; -public class MyBox : evas.BoxInherit +public class MyBox : Evas.Box { - public MyBox(efl.Object parent) : base(parent) {} + public MyBox(Efl.Object parent) : base(parent) {} [DllImport("evas")] static extern void evas_obj_box_layout_vertical(IntPtr obj, IntPtr data, IntPtr privdata); [DllImport("evas")] static extern void evas_obj_box_layout_horizontal(IntPtr obj, IntPtr data, IntPtr privdata); @@ -15,11 +15,11 @@ public class MyBox : evas.BoxInherit override public void CalculateGroup() { - IntPtr evas = evas_object_evas_get(raw_handle); + IntPtr evas = evas_object_evas_get(NativeHandle); evas_event_freeze(evas); - eina.Log.Debug("called group_calculate"); + Eina.Log.Debug("called group_calculate"); // slayouting_set(true); - evas_obj_box_layout_vertical(raw_handle, IntPtr.Zero, IntPtr.Zero); + evas_obj_box_layout_vertical(NativeHandle, IntPtr.Zero, IntPtr.Zero); // layouting_set(false); // children_changed_set(false); evas_event_thaw(evas); @@ -46,7 +46,7 @@ class TestEvas /* canvas.visible_set(true); */ /* efl.Object parent = canvas.parent_get(); */ - /* Test.Assert(parent.raw_handle != IntPtr.Zero); */ + /* Test.Assert(parent.NativeHandle != IntPtr.Zero); */ /* efl.canvas.Rectangle rect = new efl.canvas.RectangleConcrete(canvas); */ /* rect.color_set(255, 255, 255, 255); */ diff --git a/src/tests/efl_mono/Events.cs b/src/tests/efl_mono/Events.cs index 9cf7795dca..7387c1e1b4 100644 --- a/src/tests/efl_mono/Events.cs +++ b/src/tests/efl_mono/Events.cs @@ -1,7 +1,5 @@ using System; -using static test.Testing; // For the event args - namespace TestSuite { @@ -9,17 +7,17 @@ class TestEoEvents { public bool called = false; public bool correct_sender = false; - public efl.ILoop loop { get; set; } + public Efl.Loop loop { get; set; } protected void callback(object sender, EventArgs e) { called = true; - efl.IObject obj = sender as efl.IObject; + Efl.Object obj = sender as Efl.Object; if (obj != null) { obj.SetName("loop_called"); correct_sender = true; } - eina.Value v = new eina.Value(eina.ValueType.Int32); + Eina.Value v = new Eina.Value(Eina.ValueType.Int32); v.Set(0); loop.Quit(v); } @@ -27,7 +25,7 @@ class TestEoEvents public static void idle_event() { - efl.ILoop loop = new efl.Loop(); + Efl.Loop loop = new Efl.Loop(); loop.SetName("loop"); TestEoEvents listener = new TestEoEvents(); listener.loop = loop; @@ -44,10 +42,10 @@ class TestEoEvents public static void event_with_string_payload() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); string received_string = null; - obj.EvtWithStringEvt += (object sender, EvtWithStringEvt_Args e) => { + obj.EvtWithStringEvt += (object sender, Dummy.TestObjectEvtWithStringEvt_Args e) => { received_string = e.arg; }; @@ -58,10 +56,10 @@ class TestEoEvents public static void event_with_int_payload() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); int received_int= 0; - obj.EvtWithIntEvt += (object sender, EvtWithIntEvt_Args e) => { + obj.EvtWithIntEvt += (object sender, Dummy.TestObjectEvtWithIntEvt_Args e) => { received_int = e.arg; }; @@ -72,10 +70,10 @@ class TestEoEvents public static void event_with_bool_payload() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); bool received_bool = false; - obj.EvtWithBoolEvt += (object sender, EvtWithBoolEvt_Args e) => { + obj.EvtWithBoolEvt += (object sender, Dummy.TestObjectEvtWithBoolEvt_Args e) => { received_bool = e.arg; }; @@ -90,9 +88,9 @@ class TestEoEvents public static void event_with_uint_payload() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); uint received_uint = 0; - obj.EvtWithUintEvt += (object sender, EvtWithUintEvt_Args e) => { + obj.EvtWithUintEvt += (object sender, Dummy.TestObjectEvtWithUintEvt_Args e) => { received_uint = e.arg; }; @@ -103,14 +101,14 @@ class TestEoEvents public static void event_with_object_payload() { - test.ITesting obj = new test.Testing(); - test.ITesting received_obj = null; + var obj = new Dummy.TestObject(); + Dummy.TestObject received_obj = null; - obj.EvtWithObjEvt += (object sender, EvtWithObjEvt_Args e) => { + obj.EvtWithObjEvt += (object sender, Dummy.TestObjectEvtWithObjEvt_Args e) => { received_obj = e.arg; }; - test.ITesting sent_obj = new test.Testing(); + var sent_obj = new Dummy.TestObject(); obj.EmitEventWithObj(sent_obj); @@ -119,14 +117,14 @@ class TestEoEvents public static void event_with_error_payload() { - test.ITesting obj = new test.Testing(); - eina.Error received_error = 0; + var obj = new Dummy.TestObject(); + Eina.Error received_error = 0; - obj.EvtWithErrorEvt += (object sender, EvtWithErrorEvt_Args e) => { + obj.EvtWithErrorEvt += (object sender, Dummy.TestObjectEvtWithErrorEvt_Args e) => { received_error = e.arg; }; - eina.Error sent_error = -2001; + Eina.Error sent_error = -2001; obj.EmitEventWithError(sent_error); @@ -135,14 +133,14 @@ class TestEoEvents public static void event_with_struct_payload() { - test.ITesting obj = new test.Testing(); - test.StructSimple received_struct = default(test.StructSimple); + var obj = new Dummy.TestObject(); + Dummy.StructSimple received_struct = default(Dummy.StructSimple); - obj.EvtWithStructEvt += (object sender, EvtWithStructEvt_Args e) => { + obj.EvtWithStructEvt += (object sender, Dummy.TestObjectEvtWithStructEvt_Args e) => { received_struct = e.arg; }; - test.StructSimple sent_struct = default(test.StructSimple); + Dummy.StructSimple sent_struct = default(Dummy.StructSimple); sent_struct.Fstring = "Struct Event"; obj.EmitEventWithStruct(sent_struct); @@ -154,8 +152,8 @@ class TestEoEvents { int received = 0; int sent = 42; - test.ITesting obj = new test.Testing(null, (test.ITesting t) => { - t.EvtWithIntEvt += (object sender, EvtWithIntEvt_Args e) => { + var obj = new Dummy.TestObject(null, (Dummy.TestObject t) => { + t.EvtWithIntEvt += (object sender, Dummy.TestObjectEvtWithIntEvt_Args e) => { received = e.arg; }; }); @@ -170,10 +168,10 @@ class TestEventAddRemove { public static void test_add_remove_event() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); bool called = true; - EventHandler evtCb = (object sender, EvtWithIntEvt_Args e) => { + EventHandler evtCb = (object sender, Dummy.TestObjectEvtWithIntEvt_Args e) => { called = true; }; @@ -185,9 +183,50 @@ class TestEventAddRemove obj.EvtWithIntEvt -= evtCb; obj.EmitEventWithInt(42); Test.Assert(!called); + } +} +class TestInterfaceEvents +{ + public static void test_nonconflicting_events() + { + var obj = new Dummy.TestObject(); + var called = false; + EventHandler cb = (object sender, EventArgs e) => { + called = true; + }; + obj.NonconflictedEvt += cb; + obj.EmitNonconflicted(); + Test.Assert(called); + } + + public static void test_conflicting_events() + { + var obj = new Dummy.TestObject(); + var test_called = false; + var another_called = false; + + EventHandler cb = (object sender, EventArgs e) => { + test_called = true; + }; + + EventHandler another_cb = (object sender, EventArgs e) => { + another_called = true; + }; + + ((Dummy.TestIface)obj).ConflictedEvt += cb; + ((Dummy.AnotherIface)obj).ConflictedEvt += another_cb; + + obj.EmitTestConflicted(); + Test.Assert(test_called); + Test.Assert(!another_called); + test_called = false; + + obj.EmitAnotherConflicted(); + Test.Assert(!test_called); + Test.Assert(another_called); } } } diff --git a/src/tests/efl_mono/FunctionPointerMarshalling.cs b/src/tests/efl_mono/FunctionPointerMarshalling.cs index b6ba6df3d1..0f943d3265 100644 --- a/src/tests/efl_mono/FunctionPointerMarshalling.cs +++ b/src/tests/efl_mono/FunctionPointerMarshalling.cs @@ -9,15 +9,15 @@ class TestFunctionPointerMarshalling { public static void func_pointer_marshalling() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); bool called = false; - eina.Strbuf buf = new eina.Strbuf(); + Eina.Strbuf buf = new Eina.Strbuf(); string argument = "Some String"; - eina.Value v = new eina.Value(eina.ValueType.String); + Eina.Value v = new Eina.Value(Eina.ValueType.String); v.Set(argument); string reference = new string(argument.ToCharArray().Reverse().ToArray()); - obj.CallFormatCb(buf, v, (eina.Strbuf ibuf, eina.Value val) => { + obj.CallFormatCb(buf, v, (Eina.Strbuf ibuf, Eina.Value val) => { called = true; string str = null; val.Get(out str); diff --git a/src/tests/efl_mono/FunctionPointers.cs b/src/tests/efl_mono/FunctionPointers.cs index 1e2431ce47..de363c86d6 100644 --- a/src/tests/efl_mono/FunctionPointers.cs +++ b/src/tests/efl_mono/FunctionPointers.cs @@ -29,7 +29,7 @@ class TestFunctionPointers public static void set_callback_basic() { setup(); - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.SetCallback(twice); Test.Assert(called == false, "set_callback should not call the callback"); @@ -44,7 +44,7 @@ class TestFunctionPointers { setup(); - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.SetCallback(y => { called = true; return y + 4; @@ -62,7 +62,7 @@ class TestFunctionPointers { setup(); - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.SetCallback(twice); Test.Assert(called == false, "set_callback should not call the callback"); @@ -83,7 +83,7 @@ class TestFunctionPointers Test.AssertEquals(42 * 42, x); } - class NoOverride : test.TestingInherit { + class NoOverride : Dummy.TestObject { } public static void set_callback_inherited_no_override() { @@ -99,15 +99,15 @@ class TestFunctionPointers Test.AssertEquals(42 * 3, x); } - class WithOverride : test.TestingInherit { + class WithOverride : Dummy.TestObject { public bool set_called = false; public bool invoke_called = false; - public test.SimpleCb cb = null; + public Dummy.SimpleCb cb = null; public WithOverride() : base() { } - public override void SetCallback(test.SimpleCb cb) { + public override void SetCallback(Dummy.SimpleCb cb) { set_called = true; this.cb = cb; } @@ -115,7 +115,7 @@ class TestFunctionPointers invoke_called = true; if (cb != null) return cb(a); - eina.Log.Error("No callback set upon call_callback invocation"); + Eina.Log.Error("No callback set upon call_callback invocation"); return -1; } } diff --git a/src/tests/efl_mono/Main.cs b/src/tests/efl_mono/Main.cs index eae6882a45..3ae3584798 100644 --- a/src/tests/efl_mono/Main.cs +++ b/src/tests/efl_mono/Main.cs @@ -15,7 +15,7 @@ class TestMain static int Main(string[] args) { - efl.All.Init(); + Efl.All.Init(); bool pass = true; diff --git a/src/tests/efl_mono/Parts.cs b/src/tests/efl_mono/Parts.cs index 6137609a9c..5afed1fdd6 100644 --- a/src/tests/efl_mono/Parts.cs +++ b/src/tests/efl_mono/Parts.cs @@ -13,11 +13,11 @@ public static class TestParts { public static void basic_part_test() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); do_part_test(t); } - private class Child : test.TestingInherit + private class Child : Dummy.TestObject { public Child() : base(null) {} } @@ -27,14 +27,14 @@ public static class TestParts do_part_test(t); } - private static void do_part_test(test.ITesting t) + private static void do_part_test(Dummy.TestObject t) { - var p1 = t.Part1; - var p2 = t.Part2; - Test.Assert(p1 is test.Testing); - Test.AssertEquals("part1", p1.GetName()); - Test.Assert(p2 is test.Testing); - Test.AssertEquals("part2", p2.GetName()); + var p1 = t.PartOne; + var p2 = t.PartTwo; + Test.Assert(p1 is Dummy.TestObject); + Test.AssertEquals("part_one", p1.GetName()); + Test.Assert(p2 is Dummy.TestObject); + Test.AssertEquals("part_two", p2.GetName()); } } diff --git a/src/tests/efl_mono/Promises.cs b/src/tests/efl_mono/Promises.cs index 4191c31c5f..22c5239e25 100644 --- a/src/tests/efl_mono/Promises.cs +++ b/src/tests/efl_mono/Promises.cs @@ -9,8 +9,8 @@ class TestPromises public static void test_simple_cancel() { bool cleanCalled = false; - eina.Promise promise = new eina.Promise(() => { cleanCalled = true; }); - eina.Future future = new eina.Future(promise); + Eina.Promise promise = new Eina.Promise(() => { cleanCalled = true; }); + Eina.Future future = new Eina.Future(promise); future.Cancel(); Test.Assert(cleanCalled, "Promise clean callback should have been called."); Test.AssertRaises(() => { promise.Resolve(null); }); @@ -20,19 +20,19 @@ class TestPromises public static void test_simple_resolve() { bool callbackCalled = false; - eina.Value received_value = null; + Eina.Value received_value = null; - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); - eina.Future future = new eina.Future(promise); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); + Eina.Future future = new Eina.Future(promise); - future = future.Then((eina.Value value) => { + future = future.Then((Eina.Value value) => { callbackCalled = true; received_value = value; return value; } ); - eina.Value reference_value = new eina.Value(eina.ValueType.Int32); + Eina.Value reference_value = new Eina.Value(Eina.ValueType.Int32); reference_value.Set(1984); promise.Resolve(reference_value); @@ -45,24 +45,24 @@ class TestPromises public static void test_simple_reject() { bool callbackCalled = false; - eina.Error received_error = eina.Error.NO_ERROR; + Eina.Error received_error = Eina.Error.NO_ERROR; - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); - eina.Future future = new eina.Future(promise); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); + Eina.Future future = new Eina.Future(promise); - future = future.Then((eina.Value value) => { + future = future.Then((Eina.Value value) => { callbackCalled = true; value.Get(out received_error); return value; }); - promise.Reject(eina.Error.EPERM); + promise.Reject(Eina.Error.EPERM); loop.Iterate(); Test.Assert(callbackCalled, "Future callback should have been called."); - Test.AssertEquals(received_error, eina.Error.EPERM); + Test.AssertEquals(received_error, Eina.Error.EPERM); Test.AssertRaises(() => { promise.Resolve(null); }); Test.AssertRaises(future.Cancel); @@ -72,12 +72,12 @@ class TestPromises { bool callbackCalled = false; bool promiseCallbackCalled = false; - eina.Error received_error = eina.Error.NO_ERROR; + Eina.Error received_error = Eina.Error.NO_ERROR; - eina.Promise promise = new eina.Promise(() => { promiseCallbackCalled = true; }); - eina.Future future = new eina.Future(promise); + Eina.Promise promise = new Eina.Promise(() => { promiseCallbackCalled = true; }); + Eina.Future future = new Eina.Future(promise); - future = future.Then((eina.Value value) => { + future = future.Then((Eina.Value value) => { callbackCalled = true; value.Get(out received_error); return value; @@ -87,18 +87,18 @@ class TestPromises Test.Assert(promiseCallbackCalled, "Promise cancel callback should have been called."); Test.Assert(callbackCalled, "Future callback should have been called."); - Test.AssertEquals(received_error, eina.Error.ECANCELED); + Test.AssertEquals(received_error, Eina.Error.ECANCELED); } - private delegate eina.Future.ResolvedCb FutureCbGenerator(int x); + private delegate Eina.Future.ResolvedCb FutureCbGenerator(int x); public static void test_then_chaining() { bool[] callbacksCalled = {false, false, false, false}; - eina.Value[] received_value = {null, null, null, null}; + Eina.Value[] received_value = {null, null, null, null}; FutureCbGenerator genResolvedCb = (int i) => { - return (eina.Value value) => { + return (Eina.Value value) => { callbacksCalled[i] = true; int x; value.Get(out x); @@ -108,13 +108,13 @@ class TestPromises }; }; - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); - eina.Future future = new eina.Future(promise); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); + Eina.Future future = new Eina.Future(promise); for (int i = 0; i < 4; i++) future = future.Then(genResolvedCb(i)); - eina.Value reference_value = new eina.Value(eina.ValueType.Int32); + Eina.Value reference_value = new Eina.Value(Eina.ValueType.Int32); reference_value.Set(0); promise.Resolve(reference_value); @@ -137,10 +137,10 @@ class TestPromises public static void test_then_chain_array() { bool[] callbacksCalled = {false, false, false, false}; - eina.Value[] received_value = {null, null, null, null}; + Eina.Value[] received_value = {null, null, null, null}; FutureCbGenerator genResolvedCb = (int i) => { - return (eina.Value value) => { + return (Eina.Value value) => { callbacksCalled[i] = true; int x; value.Get(out x); @@ -150,16 +150,16 @@ class TestPromises }; }; - var cbs = new List(); + var cbs = new List(); for (int i = 0; i < 4; i++) cbs.Add(genResolvedCb(i)); - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); - eina.Future future = new eina.Future(promise); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); + Eina.Future future = new Eina.Future(promise); future = future.Chain(cbs); - eina.Value reference_value = new eina.Value(eina.ValueType.Int32); + Eina.Value reference_value = new Eina.Value(Eina.ValueType.Int32); reference_value.Set(0); promise.Resolve(reference_value); @@ -182,25 +182,25 @@ class TestPromises public static void test_cancel_after_resolve() { bool callbackCalled = false; - eina.Error received_error = eina.Error.NO_ERROR; + Eina.Error received_error = Eina.Error.NO_ERROR; - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); - eina.Future future = new eina.Future(promise); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); + Eina.Future future = new Eina.Future(promise); - future = future.Then((eina.Value value) => { + future = future.Then((Eina.Value value) => { callbackCalled = true; value.Get(out received_error); return value; }); - promise.Reject(eina.Error.EPERM); + promise.Reject(Eina.Error.EPERM); future.Cancel(); loop.Iterate(); Test.Assert(callbackCalled, "Future callback should have been called."); - Test.AssertEquals(received_error, eina.Error.ECANCELED); + Test.AssertEquals(received_error, Eina.Error.ECANCELED); Test.AssertRaises(() => { promise.Resolve(null); }); Test.AssertRaises(future.Cancel); @@ -209,19 +209,19 @@ class TestPromises public static void test_constructor_with_callback() { bool callbackCalled = false; - eina.Value received_value = null; + Eina.Value received_value = null; - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); #pragma warning disable 0219 - eina.Future future = new eina.Future(promise,(eina.Value value) => { + Eina.Future future = new Eina.Future(promise,(Eina.Value value) => { callbackCalled = true; received_value = value; return value; } ); #pragma warning restore 0219 - eina.Value reference_value = new eina.Value(eina.ValueType.Int32); + Eina.Value reference_value = new Eina.Value(Eina.ValueType.Int32); reference_value.Set(1984); promise.Resolve(reference_value); @@ -234,13 +234,13 @@ class TestPromises public static void test_reject_on_disposal() { bool callbackCalled = false; - eina.Error received_error = eina.Error.NO_ERROR; + Eina.Error received_error = Eina.Error.NO_ERROR; - efl.ILoop loop = efl.App.GetLoopMain(); - eina.Promise promise = new eina.Promise(); - eina.Future future = new eina.Future(promise); + Efl.Loop loop = Efl.App.GetLoopMain(); + Eina.Promise promise = new Eina.Promise(); + Eina.Future future = new Eina.Future(promise); - future = future.Then((eina.Value value) => { + future = future.Then((Eina.Value value) => { callbackCalled = true; value.Get(out received_error); return value; @@ -251,7 +251,7 @@ class TestPromises loop.Iterate(); Test.Assert(callbackCalled, "Future callback should have been called."); - Test.AssertEquals(received_error, eina.Error.ECANCELED); + Test.AssertEquals(received_error, Eina.Error.ECANCELED); Test.AssertRaises(() => { promise.Resolve(null); }); Test.AssertRaises(future.Cancel); diff --git a/src/tests/efl_mono/Strbuf.cs b/src/tests/efl_mono/Strbuf.cs index 97a70c23d2..ef2cc56f16 100644 --- a/src/tests/efl_mono/Strbuf.cs +++ b/src/tests/efl_mono/Strbuf.cs @@ -6,7 +6,7 @@ class TestStrBuf { public static void test_steal() { - eina.Strbuf buf = new eina.Strbuf(); + Eina.Strbuf buf = new Eina.Strbuf(); buf.Append("Here's"); buf.Append(' '); @@ -18,8 +18,8 @@ class TestStrBuf public static void test_eolian() { - test.ITesting obj = new test.Testing(); - eina.Strbuf buf = new eina.Strbuf(); + var obj = new Dummy.TestObject(); + Eina.Strbuf buf = new Eina.Strbuf(); obj.AppendToStrbuf(buf, "Appended"); obj.AppendToStrbuf(buf, " to buf"); @@ -27,7 +27,7 @@ class TestStrBuf Test.AssertEquals("Appended to buf", buf.Steal()); } - private class Appender : test.TestingInherit + private class Appender : Dummy.TestObject { public bool called; public Appender() : base(null) @@ -35,9 +35,9 @@ class TestStrBuf called = false; } - public override void AppendToStrbuf(eina.Strbuf buf, string str) + public override void AppendToStrbuf(Eina.Strbuf buf, string str) { - eina.Log.Error("Virtual wrapper called"); + Eina.Log.Error("Virtual wrapper called"); called = true; buf.Append(str); } @@ -46,7 +46,7 @@ class TestStrBuf public static void test_virtual_eolian() { Appender obj = new Appender(); - eina.Strbuf buf = new eina.Strbuf(); + Eina.Strbuf buf = new Eina.Strbuf(); obj.CallAppendToStrbuf(buf, "Is"); obj.CallAppendToStrbuf(buf, " this"); diff --git a/src/tests/efl_mono/Strings.cs b/src/tests/efl_mono/Strings.cs index 156b7ca9cf..bb20833ffc 100644 --- a/src/tests/efl_mono/Strings.cs +++ b/src/tests/efl_mono/Strings.cs @@ -8,7 +8,7 @@ class TestStrings public static void in_string() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); String sent = "in_string"; String returned = obj.InString(sent); Test.AssertEquals(sent, returned); @@ -21,7 +21,7 @@ class TestStrings public static void in_own_string() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); String sent = "in_own_string"; String returned = obj.InOwnString(sent); Test.AssertEquals(sent, returned); @@ -33,7 +33,7 @@ class TestStrings public static void return_string() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); Test.AssertEquals("string", obj.ReturnString()); } System.GC.Collect(); @@ -43,7 +43,7 @@ class TestStrings public static void return_own_string() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); Test.AssertEquals("own_string", obj.ReturnOwnString()); } System.GC.Collect(); @@ -54,7 +54,7 @@ class TestStrings { { String str = String.Empty; - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.OutString(out str); Test.AssertEquals("out_string", str); } @@ -66,14 +66,14 @@ class TestStrings { { String str = String.Empty; - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.OutOwnString(out str); Test.AssertEquals(str.ToString(), "out_own_string"); } System.GC.Collect(); } - private class StringReturner : test.TestingInherit + private class StringReturner : Dummy.TestObject { public String received_in; public String received_in_own; @@ -144,7 +144,7 @@ class TestStrings * some time in the future */ public static void return_string_from_virtual() { - test.ITesting obj = new StringReturner(); + var obj = new StringReturner(); /* for (int i = 0; i < 10000; i ++) // Uncomment this to check for memory leaks. */ Test.AssertEquals("inherited", obj.CallReturnString()); System.GC.Collect(); @@ -153,7 +153,7 @@ class TestStrings /* The managed wrapper must surrender the ownership to the C after the virtual call. */ public static void return_own_string_from_virtual() { - test.ITesting obj = new StringReturner(); + var obj = new StringReturner(); /* for (int i = 0; i < 10000; i ++) // Uncomment this to check for memory leaks. */ Test.AssertEquals("own_inherited", obj.CallReturnOwnString()); System.GC.Collect(); @@ -163,7 +163,7 @@ class TestStrings * need to cache it until some time in the future. */ public static void out_string_from_virtual() { - test.ITesting obj = new StringReturner(); + var obj = new StringReturner(); /* for (int i = 0; i < 10000; i ++) // Uncomment this to check for memory leaks. */ Test.AssertEquals("out_inherited", obj.CallOutString()); System.GC.Collect(); @@ -172,7 +172,7 @@ class TestStrings /* The managed wrapper gives C the ownership of the filled out parameter */ public static void out_own_string_from_virtual() { - test.ITesting obj = new StringReturner(); + var obj = new StringReturner(); /* for (int i = 0; i < 10000; i ++) // Uncomment this to check for memory leaks. */ Test.AssertEquals("out_own_inherited", obj.CallOutOwnString()); System.GC.Collect(); @@ -185,7 +185,7 @@ class TestStringshare public static void in_stringshare() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); String sent = "in_stringshare"; String returned = obj.InStringshare(sent); Test.AssertEquals(sent, returned); @@ -196,7 +196,7 @@ class TestStringshare public static void in_own_stringshare() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); String sent = "in_own_stringshare"; String returned = obj.InOwnStringshare(sent); Test.AssertEquals(sent, returned); @@ -207,7 +207,7 @@ class TestStringshare public static void return_stringshare() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); Test.AssertEquals("stringshare", obj.ReturnStringshare()); } System.GC.Collect(); @@ -216,7 +216,7 @@ class TestStringshare public static void return_own_stringshare() { { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); Test.AssertEquals("own_stringshare", obj.ReturnOwnStringshare()); } System.GC.Collect(); @@ -226,7 +226,7 @@ class TestStringshare { { String str = String.Empty; - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.OutStringshare(out str); Test.AssertEquals("out_stringshare", str); } @@ -237,14 +237,14 @@ class TestStringshare { { String str = String.Empty; - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); obj.OutOwnStringshare(out str); Test.AssertEquals(str.ToString(), "out_own_stringshare"); } System.GC.Collect(); } - private class StringshareReturner : test.TestingInherit + private class StringshareReturner : Dummy.TestObject { public String received_in; public String received_in_own; @@ -304,28 +304,28 @@ class TestStringshare public static void return_stringshare_from_virtual() { - test.ITesting obj = new StringshareReturner(); + var obj = new StringshareReturner(); // for (int i = 0; i < 1000000; i ++) // Uncomment this to check for memory leaks. Test.AssertEquals("inherited", obj.CallReturnStringshare()); } public static void return_own_stringshare_from_virtual() { - test.ITesting obj = new StringshareReturner(); + var obj = new StringshareReturner(); // for (int i = 0; i < 1000000; i ++) // Uncomment this to check for memory leaks. Test.AssertEquals("own_inherited", obj.CallReturnOwnStringshare()); } public static void out_stringshare_from_virtual() { - test.ITesting obj = new StringshareReturner(); + var obj = new StringshareReturner(); // for (int i = 0; i < 1000000; i ++) // Uncomment this to check for memory leaks. Test.AssertEquals("out_inherited", obj.CallOutStringshare()); } public static void out_own_stringshare_from_virtual() { - test.ITesting obj = new StringshareReturner(); + var obj = new StringshareReturner(); // for (int i = 0; i < 1000000; i ++) // Uncomment this to check for memory leaks. Test.AssertEquals("out_own_inherited", obj.CallOutOwnStringshare()); } diff --git a/src/tests/efl_mono/Structs.cs b/src/tests/efl_mono/Structs.cs index 4a9e7e9018..d2bb464c85 100644 --- a/src/tests/efl_mono/Structs.cs +++ b/src/tests/efl_mono/Structs.cs @@ -11,9 +11,9 @@ class TestStructs { // Auxiliary function // - private static test.StructSimple structSimpleWithValues() + private static Dummy.StructSimple structSimpleWithValues() { - var simple = new test.StructSimple(); + var simple = new Dummy.StructSimple(); simple.Fbyte = (sbyte)-126; simple.Fubyte = (byte) 254u; @@ -42,7 +42,7 @@ class TestStructs simple.Fdouble = -9007199254740992.0; simple.Fbool = true; simple.Fvoid_ptr = (IntPtr) 0xFE; - simple.Fenum = test.SampleEnum.V2; + simple.Fenum = Dummy.SampleEnum.V2; simple.Fstring = "test/string"; simple.Fmstring = "test/mstring"; simple.Fstringshare = "test/stringshare"; @@ -50,7 +50,7 @@ class TestStructs return simple; } - private static void checkStructSimple(test.StructSimple simple) + private static void checkStructSimple(Dummy.StructSimple simple) { Test.Assert(simple.Fbyte == (sbyte) -126); Test.Assert(simple.Fubyte == (byte) 254u); @@ -79,13 +79,13 @@ class TestStructs Test.Assert(simple.Fdouble == -9007199254740992.0); Test.Assert(simple.Fbool == true); Test.Assert(simple.Fvoid_ptr == (IntPtr) 0xFE); - Test.Assert(simple.Fenum == test.SampleEnum.V2); + Test.Assert(simple.Fenum == Dummy.SampleEnum.V2); Test.Assert(simple.Fstring == "test/string"); Test.Assert(simple.Fmstring == "test/mstring"); Test.Assert(simple.Fstringshare == "test/stringshare"); } - private static void checkZeroedStructSimple(test.StructSimple simple) + private static void checkZeroedStructSimple(Dummy.StructSimple simple) { Test.Assert(simple.Fbyte == 0); Test.Assert(simple.Fubyte == 0); @@ -114,64 +114,64 @@ class TestStructs Test.Assert(simple.Fdouble == 0); Test.Assert(simple.Fbool == false); Test.Assert(simple.Fvoid_ptr == IntPtr.Zero); - Test.Assert(simple.Fenum == test.SampleEnum.V0); + Test.Assert(simple.Fenum == Dummy.SampleEnum.V0); Test.Assert(simple.Fstring == null); Test.Assert(simple.Fmstring == null); Test.Assert(simple.Fstringshare == null); } - private static test.StructComplex structComplexWithValues() + private static Dummy.StructComplex structComplexWithValues() { - var complex = new test.StructComplex(); + var complex = new Dummy.StructComplex(); - complex.Farray = new eina.Array(); + complex.Farray = new Eina.Array(); complex.Farray.Push(0x0); complex.Farray.Push(0x2A); complex.Farray.Push(0x42); - complex.Finarray = new eina.Inarray(); + complex.Finarray = new Eina.Inarray(); complex.Finarray.Push(0x0); complex.Finarray.Push(0x2A); complex.Finarray.Push(0x42); - complex.Flist = new eina.List(); + complex.Flist = new Eina.List(); complex.Flist.Append("0x0"); complex.Flist.Append("0x2A"); complex.Flist.Append("0x42"); - complex.Finlist = new eina.Inlist(); + complex.Finlist = new Eina.Inlist(); complex.Finlist.Append(0x0); complex.Finlist.Append(0x2A); complex.Finlist.Append(0x42); - complex.Fhash = new eina.Hash(); + complex.Fhash = new Eina.Hash(); complex.Fhash["aa"] = "aaa"; complex.Fhash["bb"] = "bbb"; complex.Fhash["cc"] = "ccc"; complex.Fiterator = complex.Farray.GetIterator(); - complex.Fany_value = new eina.Value(eina.ValueType.Double); + complex.Fany_value = new Eina.Value(Eina.ValueType.Double); complex.Fany_value.Set(-9007199254740992.0); - complex.Fany_value_ptr = new eina.Value(eina.ValueType.String); + complex.Fany_value_ptr = new Eina.Value(Eina.ValueType.String); complex.Fany_value_ptr.Set("abc"); - complex.Fbinbuf = new eina.Binbuf(); + complex.Fbinbuf = new Eina.Binbuf(); complex.Fbinbuf.Append(126); complex.Fslice.Length = 1; - complex.Fslice.Mem = eina.MemoryNative.Alloc(1); + complex.Fslice.Mem = Eina.MemoryNative.Alloc(1); Marshal.WriteByte(complex.Fslice.Mem, 125); - complex.Fobj = new test.Numberwrapper(); + complex.Fobj = new Dummy.Numberwrapper(); complex.Fobj.SetNumber(42); return complex; } - private static void checkStructComplex(test.StructComplex complex) + private static void checkStructComplex(Dummy.StructComplex complex) { Test.Assert(complex.Farray.ToArray().SequenceEqual(base_seq_int)); @@ -211,7 +211,7 @@ class TestStructs } - private static void checkZeroedStructComplex(test.StructComplex complex) + private static void checkZeroedStructComplex(Dummy.StructComplex complex) { Test.Assert(complex.Farray == null); Test.Assert(complex.Finarray == null); @@ -235,19 +235,19 @@ class TestStructs private static void simple_default_instantiation() { - var simple = new test.StructSimple(); + var simple = new Dummy.StructSimple(); checkZeroedStructSimple(simple); } private static void complex_default_instantiation() { - var complex = new test.StructComplex(); + var complex = new Dummy.StructComplex(); checkZeroedStructComplex(complex); } public static void parameter_initialization() { - var simple = new test.StructSimple(0x1, 0x2, (char)0x3, 0x4, 0x5); + var simple = new Dummy.StructSimple(0x1, 0x2, (char)0x3, 0x4, 0x5); Test.AssertEquals(0x1, simple.Fbyte); Test.AssertEquals(0x2, simple.Fubyte); Test.AssertEquals(0x3, simple.Fchar); @@ -261,7 +261,7 @@ class TestStructs public static void simple_in() { var simple = structSimpleWithValues(); - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); bool r = t.StructSimpleIn(simple); Test.Assert(r, "Function returned false"); } @@ -271,7 +271,7 @@ class TestStructs var simple = structSimpleWithValues(); int original = simple.Fint; simple.Fmstring = "Struct Ptr In"; - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); Test.Assert(t.StructSimplePtrIn(ref simple)); Test.AssertEquals(-original, simple.Fint); Test.AssertEquals("nI rtP tcurtS", simple.Fmstring); @@ -282,16 +282,16 @@ class TestStructs var simple = structSimpleWithValues(); int original = simple.Fint; simple.Fmstring = "Struct Ptr In Own"; - test.ITesting t = new test.Testing(); - test.StructSimple result = t.StructSimplePtrInOwn(ref simple); + var t = new Dummy.TestObject(); + Dummy.StructSimple result = t.StructSimplePtrInOwn(ref simple); Test.AssertEquals(-original, result.Fint); Test.AssertEquals("nwO nI rtP tcurtS", result.Fmstring); } public static void simple_out() { - var simple = new test.StructSimple(); - test.ITesting t = new test.Testing(); + var simple = new Dummy.StructSimple(); + var t = new Dummy.TestObject(); bool r = t.StructSimpleOut(out simple); Test.Assert(r, "Function returned false"); checkStructSimple(simple); @@ -299,55 +299,55 @@ class TestStructs public static void simple_ptr_out() { - test.StructSimple simple; - test.ITesting t = new test.Testing(); - test.StructSimple result = t.StructSimplePtrOut(out simple); + Dummy.StructSimple simple; + var t = new Dummy.TestObject(); + Dummy.StructSimple result = t.StructSimplePtrOut(out simple); Test.AssertEquals(result.Fint, simple.Fint); Test.AssertEquals(result.Fstring, simple.Fstring); } public static void simple_ptr_out_own() { - test.StructSimple simple; - test.ITesting t = new test.Testing(); - test.StructSimple result = t.StructSimplePtrOutOwn(out simple); + Dummy.StructSimple simple; + var t = new Dummy.TestObject(); + Dummy.StructSimple result = t.StructSimplePtrOutOwn(out simple); Test.AssertEquals(result.Fint, simple.Fint); Test.AssertEquals(simple.Fstring, "Ptr Out Own"); } public static void simple_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var simple = t.StructSimpleReturn(); checkStructSimple(simple); } public static void simple_ptr_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var simple = t.StructSimplePtrReturn(); Test.AssertEquals(simple.Fstring, "Ret Ptr"); } public static void simple_ptr_return_own() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var simple = t.StructSimplePtrReturnOwn(); Test.AssertEquals(simple.Fstring, "Ret Ptr Own"); } - public class StructReturner : test.TestingInherit + public class StructReturner : Dummy.TestObject { - public test.StructSimple received; + public Dummy.StructSimple received; public bool called; public StructReturner() : base(null) { called = false; - received = default(test.StructSimple); + received = default(Dummy.StructSimple); } - public override bool StructSimpleIn(test.StructSimple simple) + public override bool StructSimpleIn(Dummy.StructSimple simple) { called = true; received = simple; @@ -355,63 +355,63 @@ class TestStructs return true; } - public override bool StructSimplePtrIn(ref test.StructSimple simple) + public override bool StructSimplePtrIn(ref Dummy.StructSimple simple) { called = true; simple.Fstring = "Virtual Struct Ptr In"; return true; } - public override test.StructSimple StructSimplePtrInOwn(ref test.StructSimple simple) + public override Dummy.StructSimple StructSimplePtrInOwn(ref Dummy.StructSimple simple) { called = true; received = simple; return received; } - public override bool StructSimpleOut(out test.StructSimple simple) { + public override bool StructSimpleOut(out Dummy.StructSimple simple) { called = true; - simple = new test.StructSimple(); + simple = new Dummy.StructSimple(); simple.Fstring = "Virtual Struct Out"; return true; } - public override test.StructSimple StructSimplePtrOut(out test.StructSimple simple) { + public override Dummy.StructSimple StructSimplePtrOut(out Dummy.StructSimple simple) { called = true; // No way to explicitly define the ownership of the parameter. - simple = new test.StructSimple(); + simple = new Dummy.StructSimple(); simple.Fstring = "Virtual Struct Ptr Out"; return simple; } - public override test.StructSimple StructSimplePtrOutOwn(out test.StructSimple simple) { + public override Dummy.StructSimple StructSimplePtrOutOwn(out Dummy.StructSimple simple) { called = true; // No way to explicitly define the ownership of the parameter. - simple = new test.StructSimple(); + simple = new Dummy.StructSimple(); simple.Fstring = "Virtual Struct Ptr Out Own"; return simple; } - public override test.StructSimple StructSimpleReturn() + public override Dummy.StructSimple StructSimpleReturn() { called = true; - var simple = new test.StructSimple(); + var simple = new Dummy.StructSimple(); simple.Fstring = "Virtual Struct Return"; return simple; } - public override test.StructSimple StructSimplePtrReturn() + public override Dummy.StructSimple StructSimplePtrReturn() { called = true; - var simple = new test.StructSimple(); + var simple = new Dummy.StructSimple(); simple.Fstring = "Virtual Struct Ptr Return"; return simple; } - public override test.StructSimple StructSimplePtrReturnOwn() + public override Dummy.StructSimple StructSimplePtrReturnOwn() { called = true; - var simple = new test.StructSimple(); + var simple = new Dummy.StructSimple(); simple.Fstring = "Virtual Struct Ptr Return Own"; return simple; } @@ -453,7 +453,7 @@ class TestStructs public static void simple_out_virtual() { StructReturner t = new StructReturner(); - test.StructSimple simple; + Dummy.StructSimple simple; t.CallStructSimpleOut(out simple); Test.Assert(t.called, "override was not called"); Test.AssertEquals("Virtual Struct Out", simple.Fstring); @@ -462,7 +462,7 @@ class TestStructs public static void simple_ptr_out_virtual() { StructReturner t = new StructReturner(); - test.StructSimple simple; + Dummy.StructSimple simple; t.CallStructSimplePtrOut(out simple); Test.Assert(t.called, "override was not called"); Test.AssertEquals("Virtual Struct Ptr Out", simple.Fstring); @@ -471,7 +471,7 @@ class TestStructs public static void simple_ptr_out_own_virtual() { StructReturner t = new StructReturner(); - test.StructSimple simple; + Dummy.StructSimple simple; t.CallStructSimplePtrOutOwn(out simple); Test.Assert(t.called, "override was not called"); Test.AssertEquals("Virtual Struct Ptr Out Own", simple.Fstring); @@ -480,7 +480,7 @@ class TestStructs public static void simple_return_virtual() { StructReturner t = new StructReturner(); - test.StructSimple simple = t.CallStructSimpleReturn(); + Dummy.StructSimple simple = t.CallStructSimpleReturn(); Test.Assert(t.called, "override was not called"); Test.AssertEquals("Virtual Struct Return", simple.Fstring); } @@ -488,7 +488,7 @@ class TestStructs public static void simple_ptr_return_virtual() { StructReturner t = new StructReturner(); - test.StructSimple simple = t.CallStructSimplePtrReturn(); + Dummy.StructSimple simple = t.CallStructSimplePtrReturn(); Test.Assert(t.called, "override was not called"); Test.AssertEquals("Virtual Struct Ptr Return", simple.Fstring); } @@ -496,7 +496,7 @@ class TestStructs public static void simple_ptr_return_own_virtual() { StructReturner t = new StructReturner(); - test.StructSimple simple = t.CallStructSimplePtrReturnOwn(); + Dummy.StructSimple simple = t.CallStructSimplePtrReturnOwn(); Test.Assert(t.called, "override was not called"); Test.AssertEquals("Virtual Struct Ptr Return Own", simple.Fstring); } @@ -505,7 +505,7 @@ class TestStructs public static void complex_in() { var complex = structComplexWithValues(); - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); bool r = t.StructComplexIn(complex); Test.Assert(r, "Function returned false"); } @@ -520,8 +520,8 @@ class TestStructs public static void complex_out() { - var complex = new test.StructComplex(); - test.ITesting t = new test.Testing(); + var complex = new Dummy.StructComplex(); + var t = new Dummy.TestObject(); bool r = t.StructComplexOut(out complex); Test.Assert(r, "Function returned false"); checkStructComplex(complex); @@ -537,7 +537,7 @@ class TestStructs public static void complex_return() { - test.ITesting t = new test.Testing(); + var t = new Dummy.TestObject(); var complex = t.StructComplexReturn(); checkStructComplex(complex); } diff --git a/src/tests/efl_mono/Value.cs b/src/tests/efl_mono/Value.cs index 31326f949c..63b1d1f4be 100644 --- a/src/tests/efl_mono/Value.cs +++ b/src/tests/efl_mono/Value.cs @@ -13,7 +13,7 @@ public static class TestEinaValue { public static void TestByteSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Byte)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Byte)) { byte val = 0xff; Test.Assert(v.Set(val)); byte x; @@ -24,7 +24,7 @@ public static class TestEinaValue { public static void TestSByteSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.SByte)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.SByte)) { sbyte val = -45; Test.Assert(v.Set(val)); sbyte x; @@ -35,7 +35,7 @@ public static class TestEinaValue { public static void TestShortSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Short)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Short)) { short val = -128; Test.Assert(v.Set(val)); short x; @@ -46,7 +46,7 @@ public static class TestEinaValue { public static void TestUShortSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.UShort)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.UShort)) { ushort val = 0xff55; Test.Assert(v.Set(val)); ushort x; @@ -57,7 +57,7 @@ public static class TestEinaValue { public static void TestLongSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Long)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Long)) { long val = 0xdeadbeef; Test.Assert(v.Set(val)); long x; @@ -68,7 +68,7 @@ public static class TestEinaValue { public static void TestULongSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.ULong)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.ULong)) { ulong val = 0xdeadbeef; Test.Assert(v.Set(val)); ulong x; @@ -79,7 +79,7 @@ public static class TestEinaValue { public static void TestFloatSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Float)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Float)) { float val = 1.609344f; Test.Assert(v.Set(val)); float x; @@ -90,7 +90,7 @@ public static class TestEinaValue { public static void TestDoubleSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Double)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Double)) { double val = 1.609344; Test.Assert(v.Set(val)); double x; @@ -102,7 +102,7 @@ public static class TestEinaValue { public static void TestIntSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(v.Set(32)); int x; Test.Assert(v.Get(out x)); @@ -116,7 +116,7 @@ public static class TestEinaValue { public static void TestUIntSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(v.Set(0xdeadbeef)); uint x = 0; Test.Assert(v.Get(out x)); @@ -126,7 +126,7 @@ public static class TestEinaValue { public static void TestStringSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.String)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.String)) { string expected_str = "Hello"; Test.Assert(v.Set(expected_str)); string str = null; @@ -137,10 +137,10 @@ public static class TestEinaValue { public static void TestErrorSimple() { - using (eina.Value v = new eina.Value(eina.ValueType.Error)) { - eina.Error error = new eina.Error(eina.Error.NO_ERROR); + using (Eina.Value v = new Eina.Value(Eina.ValueType.Error)) { + Eina.Error error = new Eina.Error(Eina.Error.NO_ERROR); Test.Assert(v.Set(error)); - eina.Error x; + Eina.Error x; Test.Assert(v.Get(out x)); Test.AssertEquals(error, x); } @@ -148,10 +148,10 @@ public static class TestEinaValue { public static void TestSetWrongType() { - using (eina.Value v = new eina.Value(eina.ValueType.String)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.String)) { Test.AssertRaises(() => v.Set(42)); Test.AssertNotRaises(() => v.Set("Wumpus")); - Test.Assert(v.Setup(eina.ValueType.Int32)); + Test.Assert(v.Setup(Eina.ValueType.Int32)); Test.AssertRaises(() => v.Set("Wat?")); Test.AssertNotRaises(() => v.Set(1984)); } @@ -159,12 +159,12 @@ public static class TestEinaValue { public static void TestValueSetup() { - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(v.Set(44)); int x = 0; Test.Assert(v.Get(out x)); Test.AssertEquals(44, x); - v.Setup(eina.ValueType.String); + v.Setup(Eina.ValueType.String); string str = "Hello"; Test.Assert(v.Get(out str)); @@ -174,7 +174,7 @@ public static class TestEinaValue { public static void TestValueDispose() { - eina.Value v = new eina.Value(eina.ValueType.Int32); + Eina.Value v = new Eina.Value(Eina.ValueType.Int32); v.Dispose(); Test.AssertRaises(v.Flush); Test.AssertRaises(() => v.ToString()); @@ -183,34 +183,34 @@ public static class TestEinaValue { public static void TestValueFlush() { - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(v.Set(44)); Test.Assert(!v.Flushed); v.Flush(); Test.Assert(v.Flushed); int x; - Test.AssertRaises(() => v.Get(out x)); + Test.AssertRaises(() => v.Get(out x)); x = 42; - Test.AssertRaises(() => v.Set(x)); + Test.AssertRaises(() => v.Set(x)); - v.Setup(eina.ValueType.String); - Test.AssertNotRaises(() => v.Set("Hello, EFL")); + v.Setup(Eina.ValueType.String); + Test.AssertNotRaises(() => v.Set("Hello, EFL")); string y = String.Empty; - Test.AssertNotRaises(() => v.Get(out y)); + Test.AssertNotRaises(() => v.Get(out y)); v.Flush(); - Test.AssertRaises(() => v.Get(out y)); + Test.AssertRaises(() => v.Get(out y)); - v.Setup(eina.ValueType.Array, eina.ValueType.UInt32); + v.Setup(Eina.ValueType.Array, Eina.ValueType.UInt32); - Test.AssertNotRaises(() => + Test.AssertNotRaises(() => v.Append(42)); v.Flush(); - Test.AssertRaises(() => + Test.AssertRaises(() => v.Append(42)); - Test.AssertRaises(() => v.GetValueSubType()); + Test.AssertRaises(() => v.GetValueSubType()); } } @@ -218,7 +218,7 @@ public static class TestEinaValue { private delegate bool BoolRet(); public static void TestValueOptionalInt() { - using (eina.Value a = new eina.Value(eina.ValueType.Optional)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Optional)) { Test.Assert(a.Optional); Test.Assert(a.OptionalEmpty); // By default, optional values are empty @@ -242,7 +242,7 @@ public static class TestEinaValue { } public static void TestValueOptionalUint() { - using (eina.Value a = new eina.Value(eina.ValueType.Optional)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Optional)) { Test.Assert(a.Optional); Test.Assert(a.OptionalEmpty); // By default, optional values are empty @@ -266,13 +266,13 @@ public static class TestEinaValue { } public static void TestValueOptionalString() { - using (eina.Value a = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(!a.Optional); BoolRet dummy = () => a.OptionalEmpty; - Test.AssertRaises(() => dummy()); + Test.AssertRaises(() => dummy()); } - using (eina.Value a = new eina.Value(eina.ValueType.Optional)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Optional)) { Test.Assert(a.Optional); Test.Assert(a.OptionalEmpty); // By default, optional values are empty @@ -296,9 +296,9 @@ public static class TestEinaValue { } public static void TestValueOptionalArrays() { - using (eina.Value a = new eina.Value(eina.ValueType.Optional)) - using (eina.Value expected = new eina.Value(eina.ValueType.Array, - eina.ValueType.Int32)) + using (Eina.Value a = new Eina.Value(Eina.ValueType.Optional)) + using (Eina.Value expected = new Eina.Value(Eina.ValueType.Array, + Eina.ValueType.Int32)) { Test.Assert(a.Optional); @@ -320,7 +320,7 @@ public static class TestEinaValue { Test.Assert(a.Set(expected)); Test.Assert(!a.OptionalEmpty); - eina.Value actual = null; + Eina.Value actual = null; Test.Assert(a.Get(out actual)); Test.AssertEquals(expected, actual); @@ -330,9 +330,9 @@ public static class TestEinaValue { } public static void TestValueOptionalLists() { - using (eina.Value a = new eina.Value(eina.ValueType.Optional)) - using (eina.Value expected = new eina.Value(eina.ValueType.List, - eina.ValueType.Int32)) + using (Eina.Value a = new Eina.Value(Eina.ValueType.Optional)) + using (Eina.Value expected = new Eina.Value(Eina.ValueType.List, + Eina.ValueType.Int32)) { Test.Assert(a.Optional); @@ -354,7 +354,7 @@ public static class TestEinaValue { Test.Assert(a.Set(expected)); Test.Assert(!a.OptionalEmpty); - eina.Value actual = null; + Eina.Value actual = null; Test.Assert(a.Get(out actual)); Test.AssertEquals(expected, actual); } @@ -362,8 +362,8 @@ public static class TestEinaValue { public static void TestValueCompareInts() { - using (eina.Value a = new eina.Value(eina.ValueType.Int32)) - using (eina.Value b = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Int32)) + using (Eina.Value b = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(a.Set(123)); Test.Assert(b.Set(123)); Test.AssertEquals(0, a.CompareTo(b)); @@ -379,9 +379,9 @@ public static class TestEinaValue { public static void TestValueComparisonEquals() { - using (eina.Value a = new eina.Value(eina.ValueType.Int32)) - using (eina.Value b = new eina.Value(eina.ValueType.Int32)) - using (eina.Value c = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Int32)) + using (Eina.Value b = new Eina.Value(Eina.ValueType.Int32)) + using (Eina.Value c = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(a.Set(1)); Test.Assert(b.Set(1)); Test.Assert(c.Set(1)); @@ -399,8 +399,8 @@ public static class TestEinaValue { public static void TestValueComparisonOverloadEquals() { - using (eina.Value a = new eina.Value(eina.ValueType.Int32)) - using (eina.Value b = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Int32)) + using (Eina.Value b = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(a.Set(1)); Test.Assert(b.Set(1)); @@ -423,8 +423,8 @@ public static class TestEinaValue { public static void TestValueComparisonOverloadLessMore() { - using (eina.Value a = new eina.Value(eina.ValueType.Int32)) - using (eina.Value b = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.Int32)) + using (Eina.Value b = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(a.Set(1)); Test.Assert(b.Set(0)); @@ -437,8 +437,8 @@ public static class TestEinaValue { public static void TestValueCompareStrings() { - using (eina.Value a = new eina.Value(eina.ValueType.String)) - using (eina.Value b = new eina.Value(eina.ValueType.String)) { + using (Eina.Value a = new Eina.Value(Eina.ValueType.String)) + using (Eina.Value b = new Eina.Value(Eina.ValueType.String)) { Test.Assert(a.Set("aaa")); Test.Assert(b.Set("aaa")); Test.AssertEquals(0, a.CompareTo(b)); @@ -455,8 +455,8 @@ public static class TestEinaValue { public static void TestValueCompareArray() { - using(eina.Value a = new eina.Value(eina.ValueType.Array, eina.ValueType.Int32)) - using(eina.Value b = new eina.Value(eina.ValueType.Array, eina.ValueType.Int32)) { + using(Eina.Value a = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) + using(Eina.Value b = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) { Test.AssertEquals(a, b); @@ -498,8 +498,8 @@ public static class TestEinaValue { public static void TestValueCompareList() { - using(eina.Value a = new eina.Value(eina.ValueType.List, eina.ValueType.Int32)) - using(eina.Value b = new eina.Value(eina.ValueType.List, eina.ValueType.Int32)) { + using(Eina.Value a = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) + using(Eina.Value b = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) { Test.AssertEquals(a, b); @@ -546,7 +546,7 @@ public static class TestEinaValue { public static void TestValueToString() { - using(eina.Value a = new eina.Value(eina.ValueType.Int32)) { + using(Eina.Value a = new Eina.Value(Eina.ValueType.Int32)) { int i = -12345; string x = $"{i}"; Test.Assert(a.Set(i)); @@ -554,13 +554,13 @@ public static class TestEinaValue { uint u = 0xdeadbeef; x = $"{u}"; - Test.Assert(a.Setup(eina.ValueType.UInt32)); + Test.Assert(a.Setup(Eina.ValueType.UInt32)); Test.Assert(a.Set(u)); Test.AssertEquals(x, a.ToString()); string s = "Hello, Johnny!"; x = s; - Test.Assert(a.Setup(eina.ValueType.String)); + Test.Assert(a.Setup(Eina.ValueType.String)); Test.Assert(a.Set(s)); Test.AssertEquals(x, a.ToString()); } @@ -568,8 +568,8 @@ public static class TestEinaValue { public static void TestValueConvertInt() { - using(eina.Value from = new eina.Value(eina.ValueType.Int32)) - using(eina.Value to = new eina.Value(eina.ValueType.UInt32)) { + using(Eina.Value from = new Eina.Value(Eina.ValueType.Int32)) + using(Eina.Value to = new Eina.Value(Eina.ValueType.UInt32)) { int source = 0x7FFFFFFF; uint target_uint; int target_int; @@ -581,12 +581,12 @@ public static class TestEinaValue { Test.Assert(to.Get(out target_uint)); Test.AssertEquals(target_uint, (uint)source); - Test.Assert(to.Setup(eina.ValueType.Int32)); + Test.Assert(to.Setup(Eina.ValueType.Int32)); Test.Assert(from.ConvertTo(to)); Test.Assert(to.Get(out target_int)); Test.AssertEquals(target_int, source); - Test.Assert(to.Setup(eina.ValueType.String)); + Test.Assert(to.Setup(Eina.ValueType.String)); Test.Assert(from.ConvertTo(to)); Test.Assert(to.Get(out target_str)); Test.AssertEquals(target_str, source_str); @@ -598,8 +598,8 @@ public static class TestEinaValue { public static void TestValueConvertUInt() { - using(eina.Value from = new eina.Value(eina.ValueType.UInt32)) - using(eina.Value to = new eina.Value(eina.ValueType.UInt32)) { + using(Eina.Value from = new Eina.Value(Eina.ValueType.UInt32)) + using(Eina.Value to = new Eina.Value(Eina.ValueType.UInt32)) { uint source = 0xFFFFFFFF; uint target_uint; string target_str; @@ -610,10 +610,10 @@ public static class TestEinaValue { Test.Assert(to.Get(out target_uint)); Test.AssertEquals(target_uint, source); - Test.Assert(to.Setup(eina.ValueType.Int32)); + Test.Assert(to.Setup(Eina.ValueType.Int32)); Test.Assert(!from.ConvertTo(to)); - Test.Assert(to.Setup(eina.ValueType.String)); + Test.Assert(to.Setup(Eina.ValueType.String)); Test.Assert(from.ConvertTo(to)); Test.Assert(to.Get(out target_str)); Test.AssertEquals(target_str, source_str); @@ -626,21 +626,21 @@ public static class TestEinaValue { public static void TestValueContainerConstructorWrongArgs() { Test.AssertRaises(() => { - using(eina.Value array = new eina.Value(eina.ValueType.String, eina.ValueType.String)) { } + using(Eina.Value array = new Eina.Value(Eina.ValueType.String, Eina.ValueType.String)) { } }); } public static void TestValueContainerWithNonContainerAccess() { - using(eina.Value array = new eina.Value(eina.ValueType.Int32)) { - Test.AssertRaises(() => array[0] = 1); + using(Eina.Value array = new Eina.Value(Eina.ValueType.Int32)) { + Test.AssertRaises(() => array[0] = 1); object val = null; - Test.AssertRaises(() => val = array[0]); + Test.AssertRaises(() => val = array[0]); } } public static void TestValueArray() { - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.Int32)) { + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) { Test.AssertEquals(0, array.Count()); Test.Assert(array.Append(0)); Test.AssertEquals(1, array.Count()); @@ -669,13 +669,13 @@ public static class TestEinaValue { Test.AssertEquals("[1984, -42, 5, 42]", array.ToString()); } - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.UInt32)) { + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.UInt32)) { Test.Assert(array.Append(2)); Test.AssertEquals((uint)array[0], (uint)2); Test.AssertRaises(() => array[0] = -1); } - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.String)) { + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.String)) { Test.Assert(array.Append("hello")); Test.Assert(array.Append("world")); @@ -692,7 +692,7 @@ public static class TestEinaValue { } public static void TestArrayOutOfBounds() { - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.Int32)) { + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) { object placeholder = null; Test.AssertRaises(() => array[0] = 1); Test.AssertRaises(() => placeholder = array[0]); @@ -708,16 +708,16 @@ public static class TestEinaValue { } public static void TestValueArraySubType() { - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.Int32)) - Test.AssertEquals(eina.ValueType.Int32, array.GetValueSubType()); + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) + Test.AssertEquals(Eina.ValueType.Int32, array.GetValueSubType()); - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.UInt32)) - Test.AssertEquals(eina.ValueType.UInt32, array.GetValueSubType()); + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.UInt32)) + Test.AssertEquals(Eina.ValueType.UInt32, array.GetValueSubType()); } public static void TestValueArrayConvert() { - using(eina.Value array = new eina.Value(eina.ValueType.Array, eina.ValueType.Int32)) - using(eina.Value other = new eina.Value(eina.ValueType.Int32)) { + using(Eina.Value array = new Eina.Value(Eina.ValueType.Array, Eina.ValueType.Int32)) + using(Eina.Value other = new Eina.Value(Eina.ValueType.Int32)) { other.Set(100); other.ConvertTo(array); Test.AssertEquals(100, (int)array[0]); @@ -726,7 +726,7 @@ public static class TestEinaValue { } public static void TestValueList() { - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.Int32)) { + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) { Test.AssertEquals(0, list.Count()); Test.Assert(list.Append(0)); Test.AssertEquals(1, list.Count()); @@ -755,13 +755,13 @@ public static class TestEinaValue { Test.AssertEquals("[1984, -42, 5, 42]", list.ToString()); } - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.UInt32)) { + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.UInt32)) { Test.Assert(list.Append(2)); Test.AssertEquals((uint)list[0], (uint)2); Test.AssertRaises(() => list[0] = -1); } - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.String)) { + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.String)) { Test.Assert(list.Append("hello")); Test.Assert(list.Append("world")); @@ -778,7 +778,7 @@ public static class TestEinaValue { } public static void TestListOutOfBounds() { - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.Int32)) { + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) { object placeholder = null; Test.AssertRaises(() => list[0] = 1); Test.AssertRaises(() => placeholder = list[0]); @@ -794,16 +794,16 @@ public static class TestEinaValue { } public static void TestValueListSubType() { - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.Int32)) - Test.AssertEquals(eina.ValueType.Int32, list.GetValueSubType()); + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) + Test.AssertEquals(Eina.ValueType.Int32, list.GetValueSubType()); - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.UInt32)) - Test.AssertEquals(eina.ValueType.UInt32, list.GetValueSubType()); + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.UInt32)) + Test.AssertEquals(Eina.ValueType.UInt32, list.GetValueSubType()); } public static void TestValueListConvert() { - using(eina.Value list = new eina.Value(eina.ValueType.List, eina.ValueType.Int32)) - using(eina.Value other = new eina.Value(eina.ValueType.Int32)) { + using(Eina.Value list = new Eina.Value(Eina.ValueType.List, Eina.ValueType.Int32)) + using(Eina.Value other = new Eina.Value(Eina.ValueType.Int32)) { other.Set(100); other.ConvertTo(list); Test.AssertEquals(100, (int)list[0]); @@ -813,20 +813,20 @@ public static class TestEinaValue { public static void TestStringThroughValue() { // Check if Value_Native->Value doesn't try to free the pointed string. - using(eina.Value value_ptr = new eina.Value(eina.ValueType.String)) { + using(Eina.Value value_ptr = new Eina.Value(Eina.ValueType.String)) { string payload = "Something"; value_ptr.Set(payload); - eina.Value_Native byvalue = value_ptr; - eina.Value another_value_ptr = byvalue; + Eina.ValueNative byvalue = value_ptr; + Eina.Value another_value_ptr = byvalue; Test.AssertEquals(value_ptr, another_value_ptr); } } public static void TestValueEmpty() { - using (eina.Value empty = new eina.Value(eina.ValueType.Empty)) { + using (Eina.Value empty = new Eina.Value(Eina.ValueType.Empty)) { Test.Assert(empty.Empty, "Value must be empty"); - empty.Setup(eina.ValueType.Int32); + empty.Setup(Eina.ValueType.Int32); // Values already set-up are not empty. For this kind of empty, use Optional Test.Assert(!empty.Empty, "Values already set-up must not be empty."); @@ -837,13 +837,13 @@ public static class TestEinaValue { } public static void TestValueCopy() { - eina.Value v2 = null; + Eina.Value v2 = null; int raw_val = 42; - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { Test.Assert(v.Set(raw_val)); - v2 = new eina.Value(v); + v2 = new Eina.Value(v); } int rec_val; diff --git a/src/tests/efl_mono/ValueEolian.cs b/src/tests/efl_mono/ValueEolian.cs index 4c3531544b..78da29087a 100644 --- a/src/tests/efl_mono/ValueEolian.cs +++ b/src/tests/efl_mono/ValueEolian.cs @@ -11,15 +11,15 @@ namespace TestSuite { public static class TestEinaValueEolian { public static void TestEolianEinaValueInReturn() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { v.Set(42); obj.SetValuePtr(v); - Test.AssertEquals(eina.Ownership.Managed, v.Ownership); + Test.AssertEquals(Eina.Ownership.Managed, v.Ownership); - eina.Value v_received = obj.GetValuePtrOwn(); - Test.AssertEquals(eina.Ownership.Managed, v_received.Ownership); + Eina.Value v_received = obj.GetValuePtrOwn(); + Test.AssertEquals(Eina.Ownership.Managed, v_received.Ownership); Test.AssertEquals(v, v_received); v_received.Dispose(); } @@ -27,17 +27,17 @@ public static class TestEinaValueEolian { public static void TestEolianEinaValueInOwn() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); - using (eina.Value v = new eina.Value(eina.ValueType.Int32)) { + using (Eina.Value v = new Eina.Value(Eina.ValueType.Int32)) { v.Set(2001); - Test.AssertEquals(eina.Ownership.Managed, v.Ownership); + Test.AssertEquals(Eina.Ownership.Managed, v.Ownership); obj.SetValuePtrOwn(v); - Test.AssertEquals(eina.Ownership.Unmanaged, v.Ownership); + Test.AssertEquals(Eina.Ownership.Unmanaged, v.Ownership); - eina.Value v_received = obj.GetValuePtr(); - Test.AssertEquals(eina.Ownership.Unmanaged, v_received.Ownership); + Eina.Value v_received = obj.GetValuePtr(); + Test.AssertEquals(Eina.Ownership.Unmanaged, v_received.Ownership); Test.AssertEquals(v, v_received); @@ -47,62 +47,62 @@ public static class TestEinaValueEolian { public static void TestEolianEinaValueOut() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); - using (eina.Value v = new eina.Value(eina.ValueType.String)) { - eina.Value v_out = null; + using (Eina.Value v = new Eina.Value(Eina.ValueType.String)) { + Eina.Value v_out = null; v.Set("hello!"); obj.SetValuePtr(v); obj.OutValuePtr(out v_out); Test.AssertEquals(v, v_out); - Test.AssertEquals(eina.Ownership.Unmanaged, v_out.Ownership); + Test.AssertEquals(Eina.Ownership.Unmanaged, v_out.Ownership); } } public static void TestEolianEinaValueOutOwn() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); - using (eina.Value v = new eina.Value(eina.ValueType.String)) { - eina.Value v_out = null; + using (Eina.Value v = new Eina.Value(Eina.ValueType.String)) { + Eina.Value v_out = null; v.Set("hello!"); obj.SetValuePtr(v); obj.OutValuePtrOwn(out v_out); Test.AssertEquals(v, v_out); - Test.AssertEquals(eina.Ownership.Managed, v_out.Ownership); + Test.AssertEquals(Eina.Ownership.Managed, v_out.Ownership); } } public static void TestEolianEinaValueOutByValue() { - test.ITesting obj = new test.Testing(); + var obj = new Dummy.TestObject(); - using (eina.Value v = new eina.Value(eina.ValueType.String)) { - eina.Value v_out = null; + using (Eina.Value v = new Eina.Value(Eina.ValueType.String)) { + Eina.Value v_out = null; v.Set("hello!"); obj.SetValue(v); obj.OutValue(out v_out); Test.AssertEquals(v, v_out); - Test.AssertEquals(eina.Ownership.Managed, v_out.Ownership); + Test.AssertEquals(Eina.Ownership.Managed, v_out.Ownership); } } - private class ValueHandler : test.TestingInherit + private class ValueHandler : Dummy.TestObject { - public eina.Value value; + public Eina.Value value; public ValueHandler() : base(null) { value = null; } - public override void SetValue(eina.Value value) + public override void SetValue(Eina.Value value) { this.value = value; } @@ -111,7 +111,7 @@ public static class TestEinaValueEolian { public static void TestEolianEinaValueByValueConst() { ValueHandler obj = new ValueHandler(); - using (eina.Value val = new eina.Value(eina.ValueType.String)) { + using (Eina.Value val = new Eina.Value(Eina.ValueType.String)) { obj.CallSetValue(val); Test.AssertEquals(val, obj.value); } diff --git a/src/tests/efl_mono/dummy_another_iface.eo b/src/tests/efl_mono/dummy_another_iface.eo new file mode 100644 index 0000000000..6c4376e4bc --- /dev/null +++ b/src/tests/efl_mono/dummy_another_iface.eo @@ -0,0 +1,10 @@ +interface Dummy.Another_Iface () +{ + methods { + emit_another_conflicted { + } + } + events { + conflicted: void; + } +} diff --git a/src/tests/efl_mono/test_child.eo b/src/tests/efl_mono/dummy_child.eo similarity index 66% rename from src/tests/efl_mono/test_child.eo rename to src/tests/efl_mono/dummy_child.eo index 0d37c19346..e3e1a7cd75 100644 --- a/src/tests/efl_mono/test_child.eo +++ b/src/tests/efl_mono/dummy_child.eo @@ -1,6 +1,6 @@ import eina_types; -class Test.Child extends Test.Testing { +class Dummy.Child extends Dummy.Test_Object { implements { class.constructor; diff --git a/src/tests/efl_mono/test_numberwrapper.eo b/src/tests/efl_mono/dummy_numberwrapper.eo similarity index 76% rename from src/tests/efl_mono/test_numberwrapper.eo rename to src/tests/efl_mono/dummy_numberwrapper.eo index 6f749f9c34..98b265233c 100644 --- a/src/tests/efl_mono/test_numberwrapper.eo +++ b/src/tests/efl_mono/dummy_numberwrapper.eo @@ -1,4 +1,4 @@ -class Test.Numberwrapper extends Efl.Object { +class Dummy.Numberwrapper extends Efl.Object { methods { @property number { get { diff --git a/src/tests/efl_mono/dummy_test_iface.eo b/src/tests/efl_mono/dummy_test_iface.eo new file mode 100644 index 0000000000..f7295e719e --- /dev/null +++ b/src/tests/efl_mono/dummy_test_iface.eo @@ -0,0 +1,13 @@ +interface Dummy.Test_Iface () +{ + methods { + emit_test_conflicted { + } + emit_nonconflicted { + } + } + events { + conflicted: void; + nonconflicted: void; + } +} diff --git a/src/tests/efl_mono/test_testing.eo b/src/tests/efl_mono/dummy_test_object.eo similarity index 81% rename from src/tests/efl_mono/test_testing.eo rename to src/tests/efl_mono/dummy_test_object.eo index c46963e5c7..a72e13ace3 100644 --- a/src/tests/efl_mono/test_testing.eo +++ b/src/tests/efl_mono/dummy_test_object.eo @@ -1,8 +1,8 @@ import eina_types; -type Test.MyInt: int; +type Dummy.MyInt: int; -enum Test.SampleEnum { +enum Dummy.SampleEnum { v0, v1, v2, @@ -10,7 +10,7 @@ enum Test.SampleEnum { v4, } -struct Test.StructSimple +struct Dummy.StructSimple { fbyte: byte; fubyte: ubyte; @@ -40,7 +40,7 @@ struct Test.StructSimple fdouble: double; fbool: bool; fvoid_ptr: void_ptr; - fenum: Test.SampleEnum; + fenum: Dummy.SampleEnum; // fboolptr: ptr(bool); // TODO // fbyteptr: ptr(byte); // fubyteptr: ptr(ubyte); @@ -55,14 +55,14 @@ struct Test.StructSimple // ffloatptr: ptr(float); // fdoubleptr: ptr(double); // fvoid_ptrptr: ptr(void_ptr); - // fenumptr: ptr(Test.SampleEnum); + // fenumptr: ptr(Dummy.SampleEnum); fstring: string; fmstring: mstring; fstringshare: stringshare; - fmyint: Test.MyInt; + fmyint: Dummy.MyInt; } -struct Test.StructComplex { +struct Dummy.StructComplex { farray: array; finarray: inarray; flist: list; @@ -74,32 +74,32 @@ struct Test.StructComplex { fbinbuf: ptr(Eina.Binbuf); fslice: Eina.Slice; // fslice: ptr(Eina.Slice); // TODO - fobj: Test.Numberwrapper; + fobj: Dummy.Numberwrapper; } -function Test.SimpleCb { +function Dummy.SimpleCb { params { a: int; } return: int; }; -function Test.FormatCb { +function Dummy.FormatCb { params { @in str: strbuf; @in value: const(any_value); } }; -class Test.Testing extends Efl.Object implements Efl.Part { +class Dummy.Test_Object extends Efl.Object implements Efl.Part, Dummy.Test_Iface, Dummy.Another_Iface { parts { - part1: Test.Testing; [[ Part number one. ]] - part2: Test.Testing; [[ Part number two. ]] + part_one: Dummy.Test_Object; [[ Part number one. ]] + part_two: Dummy.Test_Object; [[ Part number two. ]] } methods { return_object { - return: Test.Testing; + return: Dummy.Test_Object; } int_out { @@ -451,14 +451,14 @@ class Test.Testing extends Efl.Object implements Efl.Part { /* Object */ eina_array_obj_in { params { - @in arr: array; + @in arr: array; } return: bool; } eina_array_obj_in_own { params { - @in arr: array @owned; + @in arr: array @owned; } return: bool; } @@ -468,7 +468,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_array_obj_out { params { - @out arr: array; + @out arr: array; } return: bool; } @@ -478,27 +478,27 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_array_obj_out_own { params { - @out arr: array @owned; + @out arr: array @owned; } return: bool; } eina_array_obj_return { - return: array; + return: array; } check_eina_array_obj_return { return: bool; } eina_array_obj_return_own { - return: array @owned; + return: array @owned; } eina_array_obj_return_in { params { - @in arr: array; + @in arr: array; } - return: array; + return: array; } /* Eina Inarray */ @@ -598,14 +598,14 @@ class Test.Testing extends Efl.Object implements Efl.Part { /* Object */ eina_inarray_obj_in { params { - @in arr: inarray; + @in arr: inarray; } return: bool; } eina_inarray_obj_in_own { params { - @in arr: inarray @owned; + @in arr: inarray @owned; } return: bool; } @@ -615,7 +615,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_inarray_obj_out { params { - @out arr: inarray; + @out arr: inarray; } return: bool; } @@ -625,27 +625,27 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_inarray_obj_out_own { params { - @out arr: inarray @owned; + @out arr: inarray @owned; } return: bool; } eina_inarray_obj_return { - return: inarray; + return: inarray; } check_eina_inarray_obj_return { return: bool; } eina_inarray_obj_return_own { - return: inarray @owned; + return: inarray @owned; } eina_inarray_obj_return_in { params { - @in arr: inarray; + @in arr: inarray; } - return: inarray; + return: inarray; } /* Eina List */ @@ -745,14 +745,14 @@ class Test.Testing extends Efl.Object implements Efl.Part { /* Object */ eina_list_obj_in { params { - @in lst: list; + @in lst: list; } return: bool; } eina_list_obj_in_own { params { - @in lst: list @owned; + @in lst: list @owned; } return: bool; } @@ -762,7 +762,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_list_obj_out { params { - @out lst: list; + @out lst: list; } return: bool; } @@ -772,27 +772,27 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_list_obj_out_own { params { - @out lst: list @owned; + @out lst: list @owned; } return: bool; } eina_list_obj_return { - return: list; + return: list; } check_eina_list_obj_return { return: bool; } eina_list_obj_return_own { - return: list @owned; + return: list @owned; } eina_list_obj_return_in { params { - @in lst: list; + @in lst: list; } - return: list; + return: list; } /* Eina Inlist */ @@ -892,14 +892,14 @@ class Test.Testing extends Efl.Object implements Efl.Part { /* Object */ eina_inlist_obj_in { params { - @in lst: inlist; + @in lst: inlist; } return: bool; } eina_inlist_obj_in_own { params { - @in lst: inlist @owned; + @in lst: inlist @owned; } return: bool; } @@ -909,7 +909,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_inlist_obj_out { params { - @out lst: inlist; + @out lst: inlist; } return: bool; } @@ -919,27 +919,27 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_inlist_obj_out_own { params { - @out lst: inlist @owned; + @out lst: inlist @owned; } return: bool; } eina_inlist_obj_return { - return: inlist; + return: inlist; } check_eina_inlist_obj_return { return: bool; } eina_inlist_obj_return_own { - return: inlist @owned; + return: inlist @owned; } eina_inlist_obj_return_in { params { - @in lst: inlist; + @in lst: inlist; } - return: inlist; + return: inlist; } @@ -1052,58 +1052,58 @@ class Test.Testing extends Efl.Object implements Efl.Part { // Object // eina_hash_obj_in { params { - @in hsh: hash; - @in nwk1: Test.Numberwrapper; - @in nwv1: Test.Numberwrapper; - @out nwk2: Test.Numberwrapper; - @out nwv2: Test.Numberwrapper; + @in hsh: hash; + @in nwk1: Dummy.Numberwrapper; + @in nwv1: Dummy.Numberwrapper; + @out nwk2: Dummy.Numberwrapper; + @out nwv2: Dummy.Numberwrapper; } return: bool; } eina_hash_obj_in_own { params { - @in hsh: hash @owned; - @in nwk1: Test.Numberwrapper; - @in nwv1: Test.Numberwrapper; - @out nwk2: Test.Numberwrapper; - @out nwv2: Test.Numberwrapper; + @in hsh: hash @owned; + @in nwk1: Dummy.Numberwrapper; + @in nwv1: Dummy.Numberwrapper; + @out nwk2: Dummy.Numberwrapper; + @out nwv2: Dummy.Numberwrapper; } return: bool; } check_eina_hash_obj_in_own { params { - @in nwk1: Test.Numberwrapper; - @in nwv1: Test.Numberwrapper; - @in nwk2: Test.Numberwrapper; - @in nwv2: Test.Numberwrapper; + @in nwk1: Dummy.Numberwrapper; + @in nwv1: Dummy.Numberwrapper; + @in nwk2: Dummy.Numberwrapper; + @in nwv2: Dummy.Numberwrapper; } return: bool; } eina_hash_obj_out { params { - @out hsh: hash; - @out nwk: Test.Numberwrapper; - @out nwv: Test.Numberwrapper; + @out hsh: hash; + @out nwk: Dummy.Numberwrapper; + @out nwv: Dummy.Numberwrapper; } return: bool; } check_eina_hash_obj_out { params { - @in nwk1: Test.Numberwrapper; - @in nwv1: Test.Numberwrapper; - @in nwk2: Test.Numberwrapper; - @in nwv2: Test.Numberwrapper; + @in nwk1: Dummy.Numberwrapper; + @in nwv1: Dummy.Numberwrapper; + @in nwk2: Dummy.Numberwrapper; + @in nwv2: Dummy.Numberwrapper; } return: bool; } eina_hash_obj_out_own { params { - @out hsh: hash @owned; - @out nwk: Test.Numberwrapper; - @out nwv: Test.Numberwrapper; + @out hsh: hash @owned; + @out nwk: Dummy.Numberwrapper; + @out nwv: Dummy.Numberwrapper; } return: bool; } @@ -1113,27 +1113,27 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_hash_obj_return { params { - @out nwk: Test.Numberwrapper; - @out nwv: Test.Numberwrapper; + @out nwk: Dummy.Numberwrapper; + @out nwv: Dummy.Numberwrapper; } - return: hash; + return: hash; } check_eina_hash_obj_return { params { - @in nwk1: Test.Numberwrapper; - @in nwv1: Test.Numberwrapper; - @in nwk2: Test.Numberwrapper; - @in nwv2: Test.Numberwrapper; + @in nwk1: Dummy.Numberwrapper; + @in nwv1: Dummy.Numberwrapper; + @in nwk2: Dummy.Numberwrapper; + @in nwv2: Dummy.Numberwrapper; } return: bool; } eina_hash_obj_return_own { params { - @out nwk: Test.Numberwrapper; - @out nwv: Test.Numberwrapper; + @out nwk: Dummy.Numberwrapper; + @out nwv: Dummy.Numberwrapper; } - return: hash @owned; + return: hash @owned; } check_eina_hash_obj_return_own { return: bool; @@ -1236,14 +1236,14 @@ class Test.Testing extends Efl.Object implements Efl.Part { /* Object */ eina_iterator_obj_in { params { - @in itr: iterator; + @in itr: iterator; } return: bool; } eina_iterator_obj_in_own { params { - @in itr: iterator @owned; + @in itr: iterator @owned; } return: bool; } @@ -1253,7 +1253,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_iterator_obj_out { params { - @out itr: iterator; + @out itr: iterator; } return: bool; } @@ -1263,27 +1263,27 @@ class Test.Testing extends Efl.Object implements Efl.Part { eina_iterator_obj_out_own { params { - @out itr: iterator @owned; + @out itr: iterator @owned; } return: bool; } eina_iterator_obj_return { - return: iterator; + return: iterator; } check_eina_iterator_obj_return { return: bool; } eina_iterator_obj_return_own { - return: iterator @owned; + return: iterator @owned; } /* Function Pointer */ set_callback { params { - cb: Test.SimpleCb; + cb: Dummy.SimpleCb; } } @@ -1385,158 +1385,158 @@ class Test.Testing extends Efl.Object implements Efl.Part { struct_simple_in { params { - @in simple: Test.StructSimple; + @in simple: Dummy.StructSimple; } return: bool; } struct_simple_ptr_in { params { - @in simple: ptr(Test.StructSimple); + @in simple: ptr(Dummy.StructSimple); } return: bool; } struct_simple_ptr_in_own { params { - @in simple: ptr(Test.StructSimple) @owned; + @in simple: ptr(Dummy.StructSimple) @owned; } - return: Test.StructSimple; + return: Dummy.StructSimple; } struct_simple_out { params { - @out simple: Test.StructSimple; + @out simple: Dummy.StructSimple; } return: bool; } struct_simple_ptr_out { params { - @out simple: ptr(Test.StructSimple); + @out simple: ptr(Dummy.StructSimple); } - return: Test.StructSimple; + return: Dummy.StructSimple; } struct_simple_ptr_out_own { params { - @out simple: ptr(Test.StructSimple) @owned; + @out simple: ptr(Dummy.StructSimple) @owned; } - return: Test.StructSimple; + return: Dummy.StructSimple; } struct_simple_return { - return: Test.StructSimple; + return: Dummy.StructSimple; } struct_simple_ptr_return { - return: ptr(Test.StructSimple); + return: ptr(Dummy.StructSimple); } struct_simple_ptr_return_own { - return: ptr(Test.StructSimple) @owned; + return: ptr(Dummy.StructSimple) @owned; } call_struct_simple_in { params { - @in simple: Test.StructSimple; + @in simple: Dummy.StructSimple; } } call_struct_simple_ptr_in { params { - @in simple: ptr(Test.StructSimple); + @in simple: ptr(Dummy.StructSimple); } } call_struct_simple_ptr_in_own { params { - @in simple: ptr(Test.StructSimple) @owned; + @in simple: ptr(Dummy.StructSimple) @owned; } } call_struct_simple_out { params { - @out simple: Test.StructSimple; + @out simple: Dummy.StructSimple; } } call_struct_simple_ptr_out { params { - @out simple: ptr(Test.StructSimple); + @out simple: ptr(Dummy.StructSimple); } } call_struct_simple_ptr_out_own { params { - @out simple: ptr(Test.StructSimple) @owned; + @out simple: ptr(Dummy.StructSimple) @owned; } } call_struct_simple_return { - return: Test.StructSimple; + return: Dummy.StructSimple; } call_struct_simple_ptr_return { - return: ptr(Test.StructSimple); + return: ptr(Dummy.StructSimple); } call_struct_simple_ptr_return_own { - return: ptr(Test.StructSimple) @owned; + return: ptr(Dummy.StructSimple) @owned; } struct_complex_in { params { - @in complex: Test.StructComplex; + @in complex: Dummy.StructComplex; } return: bool; } struct_complex_ptr_in { params { - @in complex: ptr(Test.StructComplex); + @in complex: ptr(Dummy.StructComplex); } return: bool; } struct_complex_ptr_in_own { params { - @in complex: ptr(Test.StructComplex) @owned; + @in complex: ptr(Dummy.StructComplex) @owned; } return: bool; } struct_complex_out { params { - @out complex: Test.StructComplex; + @out complex: Dummy.StructComplex; } return: bool; } // struct_complex_ptr_out { // params { - // @out complex: ptr(Test.StructComplex); + // @out complex: ptr(Dummy.StructComplex); // } // return: bool; // } // // struct_complex_ptr_out_own { // params { - // @out complex: ptr(Test.StructComplex) @owned; + // @out complex: ptr(Dummy.StructComplex) @owned; // } // return: bool; // } struct_complex_return { - return: Test.StructComplex; + return: Dummy.StructComplex; } // struct_complex_ptr_return { - // return: ptr(Test.StructComplex); + // return: ptr(Dummy.StructComplex); // } // // struct_complex_ptr_return_own { - // return: ptr(Test.StructComplex) @owned; + // return: ptr(Dummy.StructComplex) @owned; // } emit_event_with_string { @@ -1561,7 +1561,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { } emit_event_with_obj { params { - @in data: Test.Testing; + @in data: Dummy.Test_Object; } } @@ -1573,7 +1573,7 @@ class Test.Testing extends Efl.Object implements Efl.Part { emit_event_with_struct { params { - @in data: Test.StructSimple; + @in data: Dummy.StructSimple; } } @@ -1595,17 +1595,17 @@ class Test.Testing extends Efl.Object implements Efl.Part { params { @in str: strbuf; @in value: const(any_value); - @in func: Test.FormatCb; + @in func: Dummy.FormatCb; } } bypass_typedef { params { - @in data: Test.MyInt; - @out receiver: Test.MyInt; + @in data: Dummy.MyInt; + @out receiver: Dummy.MyInt; } - return: Test.MyInt; + return: Dummy.MyInt; } @property klass_prop @class { @@ -1647,14 +1647,17 @@ class Test.Testing extends Efl.Object implements Efl.Part { class.destructor; Efl.Object.constructor; Efl.Part.part_get; + Dummy.Test_Iface.emit_test_conflicted; + Dummy.Test_Iface.emit_nonconflicted; + Dummy.Another_Iface.emit_another_conflicted; } events { evt,with,string @hot: string; evt,with,bool: bool; evt,with,int @hot: int; evt,with,uint @hot: uint; - evt,with,obj @hot: Test.Testing; + evt,with,obj @hot: Dummy.Test_Object; evt,with,error @hot: Eina.Error; - evt,with,struct @hot: Test.StructSimple; + evt,with,struct @hot: Dummy.StructSimple; } } diff --git a/src/tests/efl_mono/libefl_mono_native_test.c b/src/tests/efl_mono/libefl_mono_native_test.c index 6a746abb92..8a4592e35b 100644 --- a/src/tests/efl_mono/libefl_mono_native_test.c +++ b/src/tests/efl_mono/libefl_mono_native_test.c @@ -34,33 +34,35 @@ # endif #endif -#include "test_numberwrapper.eo.h" -#include "test_testing.eo.h" +#include "dummy_numberwrapper.eo.h" +#include "dummy_test_object.eo.h" +#include "dummy_test_iface.eo.h" +#include "dummy_another_iface.eo.h" #include #define EQUAL(a, b) ((a) == (b) ? 1 : (fprintf(stderr, "NOT EQUAL! %s:%i (%s)", __FILE__, __LINE__, __FUNCTION__), fflush(stderr), 0)) #define STR_EQUAL(a, b) (strcmp((a), (b)) == 0 ? 1 : (fprintf(stderr, "NOT EQUAL! %s:%i (%s) '%s' != '%s'", __FILE__, __LINE__, __FUNCTION__, (a), (b)), fflush(stderr), 0)) -typedef struct Test_Testing_Data +typedef struct Dummy_Test_Object_Data { - Test_SimpleCb cb; + Dummy_SimpleCb cb; void *cb_data; Eina_Free_Cb free_cb; Eina_Error error_code; Eina_Value *stored_value; - Test_StructSimple stored_struct; + Dummy_StructSimple stored_struct; int stored_int; - Eo *part1; - Eo *part2; + Eo *part_one; + Eo *part_two; Eina_Promise *promise; Eina_List *list_for_accessor; -} Test_Testing_Data; +} Dummy_Test_Object_Data; -typedef struct Test_Numberwrapper_Data +typedef struct Dummy_Numberwrapper_Data { int number; -} Test_Numberwrapper_Data; +} Dummy_Numberwrapper_Data; static @@ -88,15 +90,15 @@ char **_new_str_ref(const char* str) } static -Test_Numberwrapper *_new_obj(int n) +Dummy_Numberwrapper *_new_obj(int n) { - return efl_add_ref(TEST_NUMBERWRAPPER_CLASS, NULL, test_numberwrapper_number_set(efl_added, n)); + return efl_add_ref(DUMMY_NUMBERWRAPPER_CLASS, NULL, dummy_numberwrapper_number_set(efl_added, n)); } static -Test_Numberwrapper **_new_obj_ref(int n) +Dummy_Numberwrapper **_new_obj_ref(int n) { - static Test_Numberwrapper *r; + static Dummy_Numberwrapper *r; r = _new_obj(n); return &r; } @@ -106,43 +108,43 @@ Test_Numberwrapper **_new_obj_ref(int n) // ############ // static Efl_Object* -_test_testing_efl_object_constructor(Eo *obj, Test_Testing_Data *pd) +_dummy_test_object_efl_object_constructor(Eo *obj, Dummy_Test_Object_Data *pd) { - efl_constructor(efl_super(obj, TEST_TESTING_CLASS)); + efl_constructor(efl_super(obj, DUMMY_TEST_OBJECT_CLASS)); // To avoid an infinite loop calling the same constructor if (!efl_parent_get(obj)) { - pd->part1 = efl_add(TEST_TESTING_CLASS, obj, efl_name_set(efl_added, "part1")); - pd->part2 = efl_add(TEST_TESTING_CLASS, obj, efl_name_set(efl_added, "part2")); + pd->part_one = efl_add(DUMMY_TEST_OBJECT_CLASS, obj, efl_name_set(efl_added, "part_one")); + pd->part_two = efl_add(DUMMY_TEST_OBJECT_CLASS, obj, efl_name_set(efl_added, "part_two")); } return obj; } -Efl_Object *_test_testing_return_object(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Efl_Object *_dummy_test_object_return_object(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return obj; } -void _test_testing_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, int x, int *y) +void _dummy_test_object_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, int x, int *y) { *y = -x; } -void _test_testing_int_ptr_out(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, int x, int **y) +void _dummy_test_object_int_ptr_out(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, int x, int **y) { pd->stored_int = x * 2; *y = &pd->stored_int; } -const char *_test_testing_in_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char *str) +const char *_dummy_test_object_in_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char *str) { const char *ret = malloc(sizeof(char)*(strlen(str) + 1)); return strcpy((char*)ret, str); } -char *_test_testing_in_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, char *str) +char *_dummy_test_object_in_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, char *str) { char *ret = malloc(sizeof(char)*(strlen(str) + 1)); strcpy(ret, str); @@ -150,130 +152,130 @@ char *_test_testing_in_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_ return ret; } -Eina_Stringshare *_test_testing_return_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Stringshare *_dummy_test_object_return_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Stringshare *str = eina_stringshare_add("stringshare"); return str; } -Eina_Stringshare *_test_testing_return_own_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Stringshare *_dummy_test_object_return_own_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Stringshare *str = eina_stringshare_add("own_stringshare"); return str; } -const char *_test_testing_return_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +const char *_dummy_test_object_return_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return "string"; } -const char *_test_testing_return_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +const char *_dummy_test_object_return_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { static const char* reference = "own_string"; const char *ret = malloc(sizeof(char)*(strlen(reference) + 1)); return strcpy((char*)ret, reference); } -void _test_testing_out_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char**str) +void _dummy_test_object_out_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char**str) { *str = "out_string"; } -void _test_testing_out_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char**str) +void _dummy_test_object_out_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char**str) { static const char* reference = "out_own_string"; *str = malloc(sizeof(char)*(strlen(reference) + 1)); strcpy((char*)*str, reference); } -void _test_testing_call_in_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char *str) +void _dummy_test_object_call_in_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char *str) { - test_testing_in_string(obj, str); + dummy_test_object_in_string(obj, str); } -void _test_testing_call_in_own_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, char *str) +void _dummy_test_object_call_in_own_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, char *str) { - test_testing_in_own_string(obj, str); + dummy_test_object_in_own_string(obj, str); } -const char *_test_testing_call_return_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +const char *_dummy_test_object_call_return_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_return_string(obj); + return dummy_test_object_return_string(obj); } -const char *_test_testing_call_return_own_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +const char *_dummy_test_object_call_return_own_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_return_own_string(obj); + return dummy_test_object_return_own_string(obj); } -const char *_test_testing_call_out_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +const char *_dummy_test_object_call_out_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { const char *ret = NULL; - test_testing_out_string(obj, &ret); + dummy_test_object_out_string(obj, &ret); return ret; } -const char *_test_testing_call_out_own_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +const char *_dummy_test_object_call_out_own_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { const char *ret = NULL; - test_testing_out_own_string(obj, &ret); + dummy_test_object_out_own_string(obj, &ret); return ret; } // Stringshare virtual test helpers -void _test_testing_call_in_stringshare(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Stringshare *str) +void _dummy_test_object_call_in_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Stringshare *str) { - test_testing_in_stringshare(obj, str); + dummy_test_object_in_stringshare(obj, str); } -void _test_testing_call_in_own_stringshare(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Stringshare *str) +void _dummy_test_object_call_in_own_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Stringshare *str) { - str = test_testing_in_own_stringshare(obj, str); + str = dummy_test_object_in_own_stringshare(obj, str); eina_stringshare_del(str); } -Eina_Stringshare *_test_testing_in_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Stringshare *str) +Eina_Stringshare *_dummy_test_object_in_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Stringshare *str) { return eina_stringshare_add(str); } -Eina_Stringshare *_test_testing_in_own_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Stringshare *str) +Eina_Stringshare *_dummy_test_object_in_own_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Stringshare *str) { return str; } -void _test_testing_out_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char**str) +void _dummy_test_object_out_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char**str) { // Returning simple string but the binding shouldn't del it as it is not owned by the caller *str = "out_stringshare"; } -void _test_testing_out_own_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char**str) +void _dummy_test_object_out_own_stringshare(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char**str) { *str = eina_stringshare_add("out_own_stringshare"); } -Eina_Stringshare *_test_testing_call_return_stringshare(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Stringshare *_dummy_test_object_call_return_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_return_stringshare(obj); + return dummy_test_object_return_stringshare(obj); } -Eina_Stringshare *_test_testing_call_return_own_stringshare(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Stringshare *_dummy_test_object_call_return_own_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_return_own_stringshare(obj); + return dummy_test_object_return_own_stringshare(obj); } -Eina_Stringshare *_test_testing_call_out_stringshare(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Stringshare *_dummy_test_object_call_out_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Stringshare *ret = NULL; - test_testing_out_stringshare(obj, &ret); + dummy_test_object_out_stringshare(obj, &ret); return ret; } -Eina_Stringshare *_test_testing_call_out_own_stringshare(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Stringshare *_dummy_test_object_call_out_own_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Stringshare *ret = NULL; - test_testing_out_own_stringshare(obj, &ret); + dummy_test_object_out_own_stringshare(obj, &ret); return ret; } @@ -288,14 +290,14 @@ static void *memdup(const void* mem, size_t size) return out; } -Eina_Bool _test_testing_eina_slice_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Slice slice) +Eina_Bool _dummy_test_object_eina_slice_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Slice slice) { uint8_t *buf = memdup(slice.mem, slice.len); free(buf); return 0 == memcmp(slice.mem, base_seq, slice.len); } -Eina_Bool _test_testing_eina_rw_slice_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Rw_Slice slice) +Eina_Bool _dummy_test_object_eina_rw_slice_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Rw_Slice slice) { Eina_Bool r = (0 == memcmp(slice.mem, base_seq, slice.len)); unsigned char *buf = memdup(slice.mem, slice.len); @@ -305,7 +307,7 @@ Eina_Bool _test_testing_eina_rw_slice_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_T return r; } -Eina_Bool _test_testing_eina_slice_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Slice *slice) +Eina_Bool _dummy_test_object_eina_slice_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Slice *slice) { if (!slice) return EINA_FALSE; static const Eina_Slice slc = EINA_SLICE_ARRAY(base_seq); @@ -314,7 +316,7 @@ Eina_Bool _test_testing_eina_slice_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Tes return EINA_TRUE; } -Eina_Bool _test_testing_eina_rw_slice_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Rw_Slice *slice) +Eina_Bool _dummy_test_object_eina_rw_slice_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Rw_Slice *slice) { if (!slice) return EINA_FALSE; slice->len = 3; @@ -322,19 +324,19 @@ Eina_Bool _test_testing_eina_rw_slice_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ return EINA_TRUE; } -Eina_Slice _test_testing_eina_slice_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Slice _dummy_test_object_eina_slice_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Slice slc = EINA_SLICE_ARRAY(base_seq); return slc; } -Eina_Rw_Slice _test_testing_eina_rw_slice_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Rw_Slice _dummy_test_object_eina_rw_slice_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Rw_Slice slc = { .len = 3, .mem = memdup(base_seq, 3) }; return slc; } -Eina_Bool _test_testing_eina_binbuf_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) +Eina_Bool _dummy_test_object_eina_binbuf_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Binbuf *binbuf) { Eina_Bool r = (0 == memcmp(eina_binbuf_string_get(binbuf), base_seq, eina_binbuf_length_get(binbuf))); eina_binbuf_insert_char(binbuf, 42, 0); @@ -343,14 +345,14 @@ Eina_Bool _test_testing_eina_binbuf_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Tes return r; } -Eina_Bool _test_testing_call_eina_binbuf_in(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) +Eina_Bool _dummy_test_object_call_eina_binbuf_in(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Binbuf *binbuf) { - return test_testing_eina_binbuf_in(obj, binbuf); + return dummy_test_object_eina_binbuf_in(obj, binbuf); } Eina_Binbuf *_binbuf_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) +Eina_Bool _dummy_test_object_eina_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Binbuf *binbuf) { Eina_Bool r = (0 == memcmp(eina_binbuf_string_get(binbuf), base_seq, eina_binbuf_length_get(binbuf))); eina_binbuf_insert_char(binbuf, 42, 0); @@ -360,12 +362,12 @@ Eina_Bool _test_testing_eina_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test return r; } -Eina_Bool _test_testing_call_eina_binbuf_in_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) +Eina_Bool _dummy_test_object_call_eina_binbuf_in_own(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Binbuf *binbuf) { - return test_testing_eina_binbuf_in_own(obj, binbuf); + return dummy_test_object_eina_binbuf_in_own(obj, binbuf); } -Eina_Bool _test_testing_check_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_binbuf_in_own_to_check) return EINA_FALSE; const uint8_t mod_seq[] = {43,42,0x0,0x2A,0x42,33}; @@ -376,7 +378,7 @@ Eina_Bool _test_testing_check_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Tes Eina_Binbuf *_binbuf_out_to_check = NULL; -Eina_Bool _test_testing_eina_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf **binbuf) +Eina_Bool _dummy_test_object_eina_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Binbuf **binbuf) { if (!binbuf) return EINA_FALSE; *binbuf = eina_binbuf_new(); @@ -385,20 +387,20 @@ Eina_Bool _test_testing_eina_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Te return EINA_TRUE; } -Eina_Binbuf *_test_testing_call_eina_binbuf_out(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Binbuf *_dummy_test_object_call_eina_binbuf_out(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Binbuf *binbuf = NULL; - test_testing_eina_binbuf_out(obj, &binbuf); + dummy_test_object_eina_binbuf_out(obj, &binbuf); return binbuf; } -Eina_Bool _test_testing_check_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_binbuf_out_to_check) return EINA_FALSE; return 0 == memcmp(eina_binbuf_string_get(_binbuf_out_to_check), base_seq, eina_binbuf_length_get(_binbuf_out_to_check)); } -Eina_Bool _test_testing_eina_binbuf_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf **binbuf) +Eina_Bool _dummy_test_object_eina_binbuf_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Binbuf **binbuf) { if (!binbuf) return EINA_FALSE; *binbuf = eina_binbuf_new(); @@ -406,16 +408,16 @@ Eina_Bool _test_testing_eina_binbuf_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Tes return EINA_TRUE; } -Eina_Binbuf *_test_testing_call_eina_binbuf_out_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Binbuf *_dummy_test_object_call_eina_binbuf_out_own(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Binbuf *binbuf = NULL; - test_testing_eina_binbuf_out_own(obj, &binbuf); + dummy_test_object_eina_binbuf_out_own(obj, &binbuf); return binbuf; } Eina_Binbuf *_binbuf_return_to_check = NULL; -Eina_Binbuf *_test_testing_eina_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Binbuf *_dummy_test_object_eina_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Binbuf *binbuf = eina_binbuf_new(); eina_binbuf_append_char(binbuf, 33); @@ -423,27 +425,27 @@ Eina_Binbuf *_test_testing_eina_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED T return binbuf; } -Eina_Binbuf *_test_testing_call_eina_binbuf_return(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Binbuf *_dummy_test_object_call_eina_binbuf_return(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_eina_binbuf_return(obj); + return dummy_test_object_eina_binbuf_return(obj); } -Eina_Bool _test_testing_check_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_binbuf_return_to_check) return EINA_FALSE; return 0 == memcmp(eina_binbuf_string_get(_binbuf_return_to_check), base_seq, eina_binbuf_length_get(_binbuf_return_to_check)); } -Eina_Binbuf *_test_testing_eina_binbuf_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Binbuf *_dummy_test_object_eina_binbuf_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Binbuf *binbuf = eina_binbuf_new(); eina_binbuf_append_char(binbuf, 33); return binbuf; } -Eina_Binbuf *_test_testing_call_eina_binbuf_return_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Binbuf *_dummy_test_object_call_eina_binbuf_return_own(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_eina_binbuf_return_own(obj); + return dummy_test_object_eina_binbuf_return_own(obj); } @@ -457,9 +459,9 @@ static const unsigned int base_seq_str_size = EINA_C_ARRAY_LENGTH(base_seq_str); static const char * const modified_seq_str[] = {"0x0","0x2A","0x42","42","43","33"}; static const unsigned int modified_seq_str_size = EINA_C_ARRAY_LENGTH(modified_seq_str); -static const Test_Numberwrapper *base_seq_obj[] = {NULL,NULL,NULL}; +static const Dummy_Numberwrapper *base_seq_obj[] = {NULL,NULL,NULL}; static const unsigned int base_seq_obj_size = EINA_C_ARRAY_LENGTH(base_seq_str); -static const Test_Numberwrapper *modified_seq_obj[] = {NULL,NULL,NULL,NULL,NULL,NULL}; +static const Dummy_Numberwrapper *modified_seq_obj[] = {NULL,NULL,NULL,NULL,NULL,NULL}; static const unsigned int modified_seq_obj_size = EINA_C_ARRAY_LENGTH(modified_seq_str); // // @@ -482,7 +484,7 @@ Eina_Bool _array_int_equal(const Eina_Array *arr, const int base[], unsigned int return EINA_TRUE; } -Eina_Bool _test_testing_eina_array_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Bool _dummy_test_object_eina_array_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { Eina_Bool r = _array_int_equal(arr, base_seq_int, base_seq_int_size); eina_array_push(arr, _new_int(42)); @@ -493,7 +495,7 @@ Eina_Bool _test_testing_eina_array_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ static Eina_Array *_array_int_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_array_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Bool _dummy_test_object_eina_array_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { Eina_Bool r = _array_int_equal(arr, base_seq_int, base_seq_int_size); eina_array_push(arr, _new_int(42)); @@ -503,7 +505,7 @@ Eina_Bool _test_testing_eina_array_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED T return r; } -Eina_Bool _test_testing_check_eina_array_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_int_in_own_to_check) return EINA_FALSE; @@ -522,7 +524,7 @@ Eina_Bool _test_testing_check_eina_array_int_in_own(EINA_UNUSED Eo *obj, EINA_UN Eina_Array *_array_int_out_to_check = NULL; -Eina_Bool _test_testing_eina_array_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array **arr) +Eina_Bool _dummy_test_object_eina_array_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array **arr) { if (!arr) return EINA_FALSE; *arr = eina_array_new(default_step); @@ -532,7 +534,7 @@ Eina_Bool _test_testing_eina_array_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test _array_int_out_to_check = *arr; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_array_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_int_out_to_check) return EINA_FALSE; @@ -549,7 +551,7 @@ Eina_Bool _test_testing_check_eina_array_int_out(EINA_UNUSED Eo *obj, EINA_UNUSE return r; } -Eina_Bool _test_testing_eina_array_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array **arr) +Eina_Bool _dummy_test_object_eina_array_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array **arr) { if (!arr) return EINA_FALSE; *arr = eina_array_new(default_step); @@ -561,7 +563,7 @@ Eina_Bool _test_testing_eina_array_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Eina_Array *_array_int_return_to_check = NULL; -Eina_Array *_test_testing_eina_array_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Array *_dummy_test_object_eina_array_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = eina_array_new(default_step); eina_array_push(arr, _new_int(0x0)); @@ -570,7 +572,7 @@ Eina_Array *_test_testing_eina_array_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED _array_int_return_to_check = arr; return arr; } -Eina_Bool _test_testing_check_eina_array_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_int_return_to_check) return EINA_FALSE; @@ -587,7 +589,7 @@ Eina_Bool _test_testing_check_eina_array_int_return(EINA_UNUSED Eo *obj, EINA_UN return r; } -Eina_Array *_test_testing_eina_array_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Array *_dummy_test_object_eina_array_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = eina_array_new(default_step); eina_array_push(arr, _new_int(0x0)); @@ -610,7 +612,7 @@ Eina_Bool _array_str_equal(const Eina_Array *arr, const char * const base[], uns return EINA_TRUE; } -Eina_Bool _test_testing_eina_array_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Bool _dummy_test_object_eina_array_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { Eina_Bool r = _array_str_equal(arr, base_seq_str, base_seq_str_size); eina_array_push(arr, strdup("42")); @@ -621,7 +623,7 @@ Eina_Bool _test_testing_eina_array_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ static Eina_Array *_array_str_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_array_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Bool _dummy_test_object_eina_array_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { Eina_Bool r = _array_str_equal(arr, base_seq_str, base_seq_str_size); eina_array_push(arr, strdup("42")); @@ -631,7 +633,7 @@ Eina_Bool _test_testing_eina_array_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED T return r; } -Eina_Bool _test_testing_check_eina_array_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_str_in_own_to_check) return EINA_FALSE; @@ -650,7 +652,7 @@ Eina_Bool _test_testing_check_eina_array_str_in_own(EINA_UNUSED Eo *obj, EINA_UN Eina_Array *_array_str_out_to_check = NULL; -Eina_Bool _test_testing_eina_array_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array **arr) +Eina_Bool _dummy_test_object_eina_array_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array **arr) { if (!arr) return EINA_FALSE; *arr = eina_array_new(default_step); @@ -660,7 +662,7 @@ Eina_Bool _test_testing_eina_array_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test _array_str_out_to_check = *arr; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_array_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_str_out_to_check) return EINA_FALSE; @@ -677,7 +679,7 @@ Eina_Bool _test_testing_check_eina_array_str_out(EINA_UNUSED Eo *obj, EINA_UNUSE return r; } -Eina_Bool _test_testing_eina_array_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array **arr) +Eina_Bool _dummy_test_object_eina_array_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array **arr) { if (!arr) return EINA_FALSE; *arr = eina_array_new(default_step); @@ -689,7 +691,7 @@ Eina_Bool _test_testing_eina_array_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Eina_Array *_array_str_return_to_check = NULL; -Eina_Array *_test_testing_eina_array_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Array *_dummy_test_object_eina_array_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = eina_array_new(default_step); eina_array_push(arr, strdup("0x0")); @@ -698,7 +700,7 @@ Eina_Array *_test_testing_eina_array_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED _array_str_return_to_check = arr; return arr; } -Eina_Bool _test_testing_check_eina_array_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_str_return_to_check) return EINA_FALSE; @@ -715,7 +717,7 @@ Eina_Bool _test_testing_check_eina_array_str_return(EINA_UNUSED Eo *obj, EINA_UN return r; } -Eina_Array *_test_testing_eina_array_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Array *_dummy_test_object_eina_array_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = eina_array_new(default_step); eina_array_push(arr, strdup("0x0")); @@ -726,22 +728,22 @@ Eina_Array *_test_testing_eina_array_str_return_own(EINA_UNUSED Eo *obj, EINA_UN // Object -Eina_Bool _array_obj_equal(const Eina_Array *arr, const Test_Numberwrapper * const base[], unsigned int len) +Eina_Bool _array_obj_equal(const Eina_Array *arr, const Dummy_Numberwrapper * const base[], unsigned int len) { if (eina_array_count(arr) != len) return EINA_FALSE; for (unsigned int i = 0; i < len; ++i) { - const Test_Numberwrapper *eo = eina_array_data_get(arr, i); - int a = test_numberwrapper_number_get(eo); - int b = test_numberwrapper_number_get(base[i]); + const Dummy_Numberwrapper *eo = eina_array_data_get(arr, i); + int a = dummy_numberwrapper_number_get(eo); + int b = dummy_numberwrapper_number_get(base[i]); if (a != b) return EINA_FALSE; } return EINA_TRUE; } -Eina_Bool _test_testing_eina_array_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Bool _dummy_test_object_eina_array_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { Eina_Bool r = _array_obj_equal(arr, base_seq_obj, base_seq_obj_size); if (!r) return r; @@ -753,7 +755,7 @@ Eina_Bool _test_testing_eina_array_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ static Eina_Array *_array_obj_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Bool _dummy_test_object_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { Eina_Bool r = _array_obj_equal(arr, base_seq_obj, base_seq_obj_size); if (!r) return r; @@ -764,7 +766,7 @@ Eina_Bool _test_testing_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED T return r; } -Eina_Bool _test_testing_check_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_obj_in_own_to_check) return EINA_FALSE; @@ -772,7 +774,7 @@ Eina_Bool _test_testing_check_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UN if (!r) return r; unsigned int i; - Test_Numberwrapper *ele; + Dummy_Numberwrapper *ele; Eina_Array_Iterator it; EINA_ARRAY_ITER_NEXT(_array_obj_in_own_to_check, i, ele, it) efl_unref(ele); @@ -784,7 +786,7 @@ Eina_Bool _test_testing_check_eina_array_obj_in_own(EINA_UNUSED Eo *obj, EINA_UN Eina_Array *_array_obj_out_to_check = NULL; -Eina_Bool _test_testing_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array **arr) +Eina_Bool _dummy_test_object_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array **arr) { if (!arr) return EINA_FALSE; *arr = eina_array_new(default_step); @@ -794,7 +796,7 @@ Eina_Bool _test_testing_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test _array_obj_out_to_check = *arr; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_obj_out_to_check) return EINA_FALSE; @@ -802,7 +804,7 @@ Eina_Bool _test_testing_check_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSE if (!r) return r; unsigned int i; - Test_Numberwrapper *ele; + Dummy_Numberwrapper *ele; Eina_Array_Iterator it; EINA_ARRAY_ITER_NEXT(_array_obj_out_to_check, i, ele, it) efl_unref(ele); @@ -812,7 +814,7 @@ Eina_Bool _test_testing_check_eina_array_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSE return r; } -Eina_Bool _test_testing_eina_array_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array **arr) +Eina_Bool _dummy_test_object_eina_array_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array **arr) { if (!arr) return EINA_FALSE; *arr = eina_array_new(default_step); @@ -824,7 +826,7 @@ Eina_Bool _test_testing_eina_array_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Eina_Array *_array_obj_return_to_check = NULL; -Eina_Array *_test_testing_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Array *_dummy_test_object_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = eina_array_new(default_step); eina_array_push(arr, _new_obj(0x0)); @@ -833,7 +835,7 @@ Eina_Array *_test_testing_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED _array_obj_return_to_check = arr; return arr; } -Eina_Bool _test_testing_check_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_array_obj_return_to_check) return EINA_FALSE; @@ -841,7 +843,7 @@ Eina_Bool _test_testing_check_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UN if (!r) return r; unsigned int i; - Test_Numberwrapper *ele; + Dummy_Numberwrapper *ele; Eina_Array_Iterator it; EINA_ARRAY_ITER_NEXT(_array_obj_return_to_check, i, ele, it) efl_unref(ele); @@ -851,7 +853,7 @@ Eina_Bool _test_testing_check_eina_array_obj_return(EINA_UNUSED Eo *obj, EINA_UN return r; } -Eina_Array *_test_testing_eina_array_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Array *_dummy_test_object_eina_array_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = eina_array_new(default_step); eina_array_push(arr, _new_obj(0x0)); @@ -860,7 +862,7 @@ Eina_Array *_test_testing_eina_array_obj_return_own(EINA_UNUSED Eo *obj, EINA_UN return arr; } -Eina_Array *_test_testing_eina_array_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Array *arr) +Eina_Array *_dummy_test_object_eina_array_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Array *arr) { return arr; } @@ -883,7 +885,7 @@ Eina_Bool _inarray_int_equal(const Eina_Inarray *arr, const int base[], unsigned return EINA_TRUE; } -Eina_Bool _test_testing_eina_inarray_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Bool _dummy_test_object_eina_inarray_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { Eina_Bool r = _inarray_int_equal(arr, base_seq_int, base_seq_int_size); eina_inarray_push(arr, _int_ref(42)); @@ -894,7 +896,7 @@ Eina_Bool _test_testing_eina_inarray_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Tes static Eina_Inarray *_inarray_int_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_inarray_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Bool _dummy_test_object_eina_inarray_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { Eina_Bool r = _inarray_int_equal(arr, base_seq_int, base_seq_int_size); eina_inarray_push(arr, _int_ref(42)); @@ -903,7 +905,7 @@ Eina_Bool _test_testing_eina_inarray_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED _inarray_int_in_own_to_check = arr; return r; } -Eina_Bool _test_testing_check_eina_inarray_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_int_in_own_to_check) return EINA_FALSE; @@ -916,7 +918,7 @@ Eina_Bool _test_testing_check_eina_inarray_int_in_own(EINA_UNUSED Eo *obj, EINA_ Eina_Inarray *_inarray_int_out_to_check = NULL; -Eina_Bool _test_testing_eina_inarray_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray **arr) +Eina_Bool _dummy_test_object_eina_inarray_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray **arr) { if (!arr) return EINA_FALSE; *arr = eina_inarray_new(sizeof(int), 0); @@ -926,7 +928,7 @@ Eina_Bool _test_testing_eina_inarray_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Te _inarray_int_out_to_check = *arr; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_inarray_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_int_out_to_check) return EINA_FALSE; @@ -937,7 +939,7 @@ Eina_Bool _test_testing_check_eina_inarray_int_out(EINA_UNUSED Eo *obj, EINA_UNU return r; } -Eina_Bool _test_testing_eina_inarray_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray **arr) +Eina_Bool _dummy_test_object_eina_inarray_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray **arr) { if (!arr) return EINA_FALSE; *arr = eina_inarray_new(sizeof(int), 0); @@ -949,7 +951,7 @@ Eina_Bool _test_testing_eina_inarray_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSE Eina_Inarray *_inarray_int_return_to_check = NULL; -Eina_Inarray *_test_testing_eina_inarray_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inarray *_dummy_test_object_eina_inarray_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inarray *arr = eina_inarray_new(sizeof(int), 0); eina_inarray_push(arr, _int_ref(0x0)); @@ -958,7 +960,7 @@ Eina_Inarray *_test_testing_eina_inarray_int_return(EINA_UNUSED Eo *obj, EINA_UN _inarray_int_return_to_check = arr; return arr; } -Eina_Bool _test_testing_check_eina_inarray_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_int_return_to_check) return EINA_FALSE; @@ -969,7 +971,7 @@ Eina_Bool _test_testing_check_eina_inarray_int_return(EINA_UNUSED Eo *obj, EINA_ return r; } -Eina_Inarray *_test_testing_eina_inarray_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inarray *_dummy_test_object_eina_inarray_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inarray *arr = eina_inarray_new(sizeof(int), 0); eina_inarray_push(arr, _int_ref(0x0)); @@ -992,7 +994,7 @@ Eina_Bool _inarray_str_equal(const Eina_Inarray *arr, const char * const base[], return EINA_TRUE; } -Eina_Bool _test_testing_eina_inarray_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Bool _dummy_test_object_eina_inarray_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { Eina_Bool r = _inarray_str_equal(arr, base_seq_str, base_seq_str_size); eina_inarray_push(arr, _new_str_ref("42")); @@ -1003,7 +1005,7 @@ Eina_Bool _test_testing_eina_inarray_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Tes static Eina_Inarray *_inarray_str_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_inarray_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Bool _dummy_test_object_eina_inarray_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { Eina_Bool r = _inarray_str_equal(arr, base_seq_str, base_seq_str_size); eina_inarray_push(arr, _new_str_ref("42")); @@ -1013,7 +1015,7 @@ Eina_Bool _test_testing_eina_inarray_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_check_eina_inarray_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_str_in_own_to_check) return EINA_FALSE; @@ -1030,7 +1032,7 @@ Eina_Bool _test_testing_check_eina_inarray_str_in_own(EINA_UNUSED Eo *obj, EINA_ Eina_Inarray *_inarray_str_out_to_check = NULL; -Eina_Bool _test_testing_eina_inarray_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray **arr) +Eina_Bool _dummy_test_object_eina_inarray_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray **arr) { if (!arr) return EINA_FALSE; *arr = eina_inarray_new(sizeof(char*), 0); @@ -1040,7 +1042,7 @@ Eina_Bool _test_testing_eina_inarray_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Te _inarray_str_out_to_check = *arr; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_inarray_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_str_out_to_check) return EINA_FALSE; @@ -1055,7 +1057,7 @@ Eina_Bool _test_testing_check_eina_inarray_str_out(EINA_UNUSED Eo *obj, EINA_UNU return r; } -Eina_Bool _test_testing_eina_inarray_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray **arr) +Eina_Bool _dummy_test_object_eina_inarray_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray **arr) { if (!arr) return EINA_FALSE; *arr = eina_inarray_new(sizeof(char*), 0); @@ -1067,7 +1069,7 @@ Eina_Bool _test_testing_eina_inarray_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSE Eina_Inarray *_inarray_str_return_to_check = NULL; -Eina_Inarray *_test_testing_eina_inarray_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inarray *_dummy_test_object_eina_inarray_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inarray *arr = eina_inarray_new(sizeof(char*), 0); eina_inarray_push(arr, _new_str_ref("0x0")); @@ -1076,7 +1078,7 @@ Eina_Inarray *_test_testing_eina_inarray_str_return(EINA_UNUSED Eo *obj, EINA_UN _inarray_str_return_to_check = arr; return arr; } -Eina_Bool _test_testing_check_eina_inarray_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_str_return_to_check) return EINA_FALSE; @@ -1091,7 +1093,7 @@ Eina_Bool _test_testing_check_eina_inarray_str_return(EINA_UNUSED Eo *obj, EINA_ return r; } -Eina_Inarray *_test_testing_eina_inarray_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inarray *_dummy_test_object_eina_inarray_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inarray *arr = eina_inarray_new(sizeof(char*), 0); eina_inarray_push(arr, _new_str_ref("0x0")); @@ -1102,22 +1104,22 @@ Eina_Inarray *_test_testing_eina_inarray_str_return_own(EINA_UNUSED Eo *obj, EIN // Object -Eina_Bool _inarray_obj_equal(const Eina_Inarray *arr, const Test_Numberwrapper * const base[], unsigned int len) +Eina_Bool _inarray_obj_equal(const Eina_Inarray *arr, const Dummy_Numberwrapper * const base[], unsigned int len) { if (eina_inarray_count(arr) != len) return EINA_FALSE; for (unsigned int i = 0; i < len; ++i) { - const Test_Numberwrapper **eo = eina_inarray_nth(arr, i); - int a = test_numberwrapper_number_get(*eo); - int b = test_numberwrapper_number_get(base[i]); + const Dummy_Numberwrapper **eo = eina_inarray_nth(arr, i); + int a = dummy_numberwrapper_number_get(*eo); + int b = dummy_numberwrapper_number_get(base[i]); if (a != b) return EINA_FALSE; } return EINA_TRUE; } -Eina_Bool _test_testing_eina_inarray_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Bool _dummy_test_object_eina_inarray_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { Eina_Bool r = _inarray_obj_equal(arr, base_seq_obj, base_seq_obj_size); if (!r) return r; @@ -1129,7 +1131,7 @@ Eina_Bool _test_testing_eina_inarray_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Tes static Eina_Inarray *_inarray_obj_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_inarray_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Bool _dummy_test_object_eina_inarray_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { Eina_Bool r = _inarray_obj_equal(arr, base_seq_obj, base_seq_obj_size); if (!r) return r; @@ -1139,14 +1141,14 @@ Eina_Bool _test_testing_eina_inarray_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED _inarray_obj_in_own_to_check = arr; return r; } -Eina_Bool _test_testing_check_eina_inarray_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_obj_in_own_to_check) return EINA_FALSE; Eina_Bool r = _inarray_obj_equal(_inarray_obj_in_own_to_check, modified_seq_obj, modified_seq_obj_size); if (!r) return r; - Test_Numberwrapper **ele; + Dummy_Numberwrapper **ele; EINA_INARRAY_FOREACH(_inarray_obj_in_own_to_check, ele) efl_unref(*ele); @@ -1157,7 +1159,7 @@ Eina_Bool _test_testing_check_eina_inarray_obj_in_own(EINA_UNUSED Eo *obj, EINA_ Eina_Inarray *_inarray_obj_out_to_check = NULL; -Eina_Bool _test_testing_eina_inarray_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray **arr) +Eina_Bool _dummy_test_object_eina_inarray_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray **arr) { if (!arr) return EINA_FALSE; *arr = eina_inarray_new(sizeof(Eo*), 0); @@ -1167,14 +1169,14 @@ Eina_Bool _test_testing_eina_inarray_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Te _inarray_obj_out_to_check = *arr; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_inarray_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_obj_out_to_check) return EINA_FALSE; Eina_Bool r = _inarray_obj_equal(_inarray_obj_out_to_check, modified_seq_obj, modified_seq_obj_size); if (!r) return r; - Test_Numberwrapper **ele; + Dummy_Numberwrapper **ele; EINA_INARRAY_FOREACH(_inarray_obj_out_to_check, ele) efl_unref(*ele); @@ -1183,7 +1185,7 @@ Eina_Bool _test_testing_check_eina_inarray_obj_out(EINA_UNUSED Eo *obj, EINA_UNU return r; } -Eina_Bool _test_testing_eina_inarray_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray **arr) +Eina_Bool _dummy_test_object_eina_inarray_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray **arr) { if (!arr) return EINA_FALSE; *arr = eina_inarray_new(sizeof(Eo*), 0); @@ -1195,7 +1197,7 @@ Eina_Bool _test_testing_eina_inarray_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSE Eina_Inarray *_inarray_obj_return_to_check = NULL; -Eina_Inarray *_test_testing_eina_inarray_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inarray *_dummy_test_object_eina_inarray_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inarray *arr = eina_inarray_new(sizeof(Eo*), 0); eina_inarray_push(arr, _new_obj_ref(0x0)); @@ -1204,14 +1206,14 @@ Eina_Inarray *_test_testing_eina_inarray_obj_return(EINA_UNUSED Eo *obj, EINA_UN _inarray_obj_return_to_check = arr; return arr; } -Eina_Bool _test_testing_check_eina_inarray_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inarray_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_inarray_obj_return_to_check) return EINA_FALSE; Eina_Bool r = _inarray_obj_equal(_inarray_obj_return_to_check, modified_seq_obj, modified_seq_obj_size); if (!r) return r; - Test_Numberwrapper **ele; + Dummy_Numberwrapper **ele; EINA_INARRAY_FOREACH(_inarray_obj_return_to_check, ele) efl_unref(*ele); @@ -1220,7 +1222,7 @@ Eina_Bool _test_testing_check_eina_inarray_obj_return(EINA_UNUSED Eo *obj, EINA_ return r; } -Eina_Inarray *_test_testing_eina_inarray_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inarray *_dummy_test_object_eina_inarray_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inarray *arr = eina_inarray_new(sizeof(Eo*), 0); eina_inarray_push(arr, _new_obj_ref(0x0)); @@ -1229,7 +1231,7 @@ Eina_Inarray *_test_testing_eina_inarray_obj_return_own(EINA_UNUSED Eo *obj, EIN return arr; } -Eina_Inarray *_test_testing_eina_inarray_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inarray *arr) +Eina_Inarray *_dummy_test_object_eina_inarray_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inarray *arr) { return arr; } @@ -1257,7 +1259,7 @@ Eina_Bool _list_int_equal(const Eina_List *lst, const int base[], unsigned int l return EINA_TRUE; } -Eina_Bool _test_testing_eina_list_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_Bool _dummy_test_object_eina_list_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { Eina_Bool r = _list_int_equal(lst, base_seq_int, base_seq_int_size); return r; @@ -1265,7 +1267,7 @@ Eina_Bool _test_testing_eina_list_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_T static Eina_List *_list_int_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_list_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_Bool _dummy_test_object_eina_list_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { Eina_Bool r = _list_int_equal(lst, base_seq_int, base_seq_int_size); if (!r) return r; @@ -1277,7 +1279,7 @@ Eina_Bool _test_testing_eina_list_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Te return r; } -Eina_Bool _test_testing_check_eina_list_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_int_in_own_to_check) return EINA_FALSE; @@ -1293,7 +1295,7 @@ Eina_Bool _test_testing_check_eina_list_int_in_own(EINA_UNUSED Eo *obj, EINA_UNU Eina_List *_list_int_out_to_check = NULL; -Eina_Bool _test_testing_eina_list_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List **lst) +Eina_Bool _dummy_test_object_eina_list_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List **lst) { if (!lst) return EINA_FALSE; *lst = eina_list_append(*lst, _new_int(0x0)); @@ -1302,7 +1304,7 @@ Eina_Bool _test_testing_eina_list_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ _list_int_out_to_check = *lst; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_list_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_int_out_to_check) return EINA_FALSE; @@ -1317,7 +1319,7 @@ Eina_Bool _test_testing_check_eina_list_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_eina_list_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List **lst) +Eina_Bool _dummy_test_object_eina_list_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List **lst) { if (!lst) return EINA_FALSE; *lst = eina_list_append(*lst, _new_int(0x0)); @@ -1328,7 +1330,7 @@ Eina_Bool _test_testing_eina_list_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED T Eina_List *_list_int_return_to_check = NULL; -Eina_List *_test_testing_eina_list_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_List *_dummy_test_object_eina_list_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_List *lst = NULL; lst = eina_list_append(lst, _new_int(0x0)); @@ -1337,7 +1339,7 @@ Eina_List *_test_testing_eina_list_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED T _list_int_return_to_check = lst; return lst; } -Eina_Bool _test_testing_check_eina_list_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_int_return_to_check) return EINA_FALSE; @@ -1352,7 +1354,7 @@ Eina_Bool _test_testing_check_eina_list_int_return(EINA_UNUSED Eo *obj, EINA_UNU return r; } -Eina_List *_test_testing_eina_list_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_List *_dummy_test_object_eina_list_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_List *lst = NULL; lst = eina_list_append(lst, _new_int(0x0)); @@ -1380,7 +1382,7 @@ Eina_Bool _list_str_equal(const Eina_List *lst, const char * const base[], unsig return EINA_TRUE; } -Eina_Bool _test_testing_eina_list_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_Bool _dummy_test_object_eina_list_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { Eina_Bool r = _list_str_equal(lst, base_seq_str, base_seq_str_size); return r; @@ -1388,7 +1390,7 @@ Eina_Bool _test_testing_eina_list_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_T static Eina_List *_list_str_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_list_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_Bool _dummy_test_object_eina_list_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { Eina_Bool r = _list_str_equal(lst, base_seq_str, base_seq_str_size); if (!r) return r; @@ -1399,7 +1401,7 @@ Eina_Bool _test_testing_eina_list_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Te return r; } -Eina_Bool _test_testing_check_eina_list_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_str_in_own_to_check) return EINA_FALSE; @@ -1416,7 +1418,7 @@ Eina_Bool _test_testing_check_eina_list_str_in_own(EINA_UNUSED Eo *obj, EINA_UNU Eina_List *_list_str_out_to_check = NULL; -Eina_Bool _test_testing_eina_list_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List **lst) +Eina_Bool _dummy_test_object_eina_list_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List **lst) { if (!lst) return EINA_FALSE; *lst = eina_list_append(*lst, strdup("0x0")); @@ -1425,7 +1427,7 @@ Eina_Bool _test_testing_eina_list_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ _list_str_out_to_check = *lst; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_list_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_str_out_to_check) return EINA_FALSE; @@ -1440,7 +1442,7 @@ Eina_Bool _test_testing_check_eina_list_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_eina_list_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List **lst) +Eina_Bool _dummy_test_object_eina_list_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List **lst) { if (!lst) return EINA_FALSE; *lst = eina_list_append(*lst, strdup("0x0")); @@ -1451,7 +1453,7 @@ Eina_Bool _test_testing_eina_list_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED T Eina_List *_list_str_return_to_check = NULL; -Eina_List *_test_testing_eina_list_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_List *_dummy_test_object_eina_list_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_List *lst = NULL; lst = eina_list_append(lst, strdup("0x0")); @@ -1460,7 +1462,7 @@ Eina_List *_test_testing_eina_list_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED T _list_str_return_to_check = lst; return lst; } -Eina_Bool _test_testing_check_eina_list_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_str_return_to_check) return EINA_FALSE; @@ -1475,7 +1477,7 @@ Eina_Bool _test_testing_check_eina_list_str_return(EINA_UNUSED Eo *obj, EINA_UNU return r; } -Eina_List *_test_testing_eina_list_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_List *_dummy_test_object_eina_list_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_List *lst = NULL; lst = eina_list_append(lst, strdup("0x0")); @@ -1486,18 +1488,18 @@ Eina_List *_test_testing_eina_list_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUS // Object -Eina_Bool _list_obj_equal(const Eina_List *lst, const Test_Numberwrapper * const base[], unsigned int len) +Eina_Bool _list_obj_equal(const Eina_List *lst, const Dummy_Numberwrapper * const base[], unsigned int len) { if (eina_list_count(lst) != len) return EINA_FALSE; const Eina_List *l; - Test_Numberwrapper *eo; + Dummy_Numberwrapper *eo; int i = 0; EINA_LIST_FOREACH(lst, l, eo) { - int a = test_numberwrapper_number_get(eo); - int b = test_numberwrapper_number_get(base[i]); + int a = dummy_numberwrapper_number_get(eo); + int b = dummy_numberwrapper_number_get(base[i]); if (a != b) return EINA_FALSE; ++i; @@ -1505,7 +1507,7 @@ Eina_Bool _list_obj_equal(const Eina_List *lst, const Test_Numberwrapper * const return EINA_TRUE; } -Eina_Bool _test_testing_eina_list_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_Bool _dummy_test_object_eina_list_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { Eina_Bool r = _list_obj_equal(lst, base_seq_obj, base_seq_obj_size); return r; @@ -1513,7 +1515,7 @@ Eina_Bool _test_testing_eina_list_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_T static Eina_List *_list_obj_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_list_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_Bool _dummy_test_object_eina_list_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { Eina_Bool r = _list_obj_equal(lst, base_seq_obj, base_seq_obj_size); if (!r) return r; @@ -1524,14 +1526,14 @@ Eina_Bool _test_testing_eina_list_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Te return r; } -Eina_Bool _test_testing_check_eina_list_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_obj_in_own_to_check) return EINA_FALSE; Eina_Bool r = _list_obj_equal(_list_obj_in_own_to_check, modified_seq_obj, modified_seq_obj_size); if (!r) return r; - Test_Numberwrapper *ele; + Dummy_Numberwrapper *ele; EINA_LIST_FREE(_list_obj_in_own_to_check, ele) efl_unref(ele); @@ -1541,7 +1543,7 @@ Eina_Bool _test_testing_check_eina_list_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNU Eina_List *_list_obj_out_to_check = NULL; -Eina_Bool _test_testing_eina_list_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List **lst) +Eina_Bool _dummy_test_object_eina_list_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List **lst) { if (!lst) return EINA_FALSE; *lst = eina_list_append(*lst, _new_obj(0x0)); @@ -1550,14 +1552,14 @@ Eina_Bool _test_testing_eina_list_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ _list_obj_out_to_check = *lst; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_list_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_obj_out_to_check) return EINA_FALSE; Eina_Bool r = _list_obj_equal(_list_obj_out_to_check, base_seq_obj, base_seq_obj_size); if (!r) return r; - Test_Numberwrapper *ele; + Dummy_Numberwrapper *ele; EINA_LIST_FREE(_list_obj_out_to_check, ele) efl_unref(ele); @@ -1565,7 +1567,7 @@ Eina_Bool _test_testing_check_eina_list_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_eina_list_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List **lst) +Eina_Bool _dummy_test_object_eina_list_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List **lst) { if (!lst) return EINA_FALSE; *lst = eina_list_append(*lst, _new_obj(0x0)); @@ -1576,7 +1578,7 @@ Eina_Bool _test_testing_eina_list_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED T Eina_List *_list_obj_return_to_check = NULL; -Eina_List *_test_testing_eina_list_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_List *_dummy_test_object_eina_list_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_List *lst = NULL; lst = eina_list_append(lst, _new_obj(0x0)); @@ -1585,14 +1587,14 @@ Eina_List *_test_testing_eina_list_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED T _list_obj_return_to_check = lst; return lst; } -Eina_Bool _test_testing_check_eina_list_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_list_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_list_obj_return_to_check) return EINA_FALSE; Eina_Bool r = _list_obj_equal(_list_obj_return_to_check, base_seq_obj, base_seq_obj_size); if (!r) return r; - Test_Numberwrapper *ele; + Dummy_Numberwrapper *ele; EINA_LIST_FREE(_list_obj_return_to_check, ele) efl_unref(ele); @@ -1600,7 +1602,7 @@ Eina_Bool _test_testing_check_eina_list_obj_return(EINA_UNUSED Eo *obj, EINA_UNU return r; } -Eina_List *_test_testing_eina_list_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_List *_dummy_test_object_eina_list_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_List *lst = NULL; lst = eina_list_append(lst, _new_obj(0x0)); @@ -1609,7 +1611,7 @@ Eina_List *_test_testing_eina_list_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUS return lst; } -Eina_List *_test_testing_eina_list_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_List *lst) +Eina_List *_dummy_test_object_eina_list_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_List *lst) { return lst; } @@ -1621,16 +1623,16 @@ Eina_List *_test_testing_eina_list_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSE // Integer -typedef struct _Test_Inlist_Node_Int +typedef struct _Dummy_Inlist_Node_Int { EINA_INLIST; int val; -} Test_Inlist_Node_Int; +} Dummy_Inlist_Node_Int; Eina_Inlist *_new_inlist_int(int v) { - Test_Inlist_Node_Int *node = malloc(sizeof(Test_Inlist_Node_Int)); + Dummy_Inlist_Node_Int *node = malloc(sizeof(Dummy_Inlist_Node_Int)); node->val = v; return EINA_INLIST_GET(node); } @@ -1640,7 +1642,7 @@ Eina_Bool _inlist_int_equal(const Eina_Inlist *lst, const int base[], unsigned i if (eina_inlist_count(lst) != len) return EINA_FALSE; - const Test_Inlist_Node_Int *node; + const Dummy_Inlist_Node_Int *node; int i = 0; EINA_INLIST_FOREACH(lst, node) { @@ -1652,7 +1654,7 @@ Eina_Bool _inlist_int_equal(const Eina_Inlist *lst, const int base[], unsigned i return EINA_TRUE; } -Eina_Bool _test_testing_eina_inlist_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Bool _dummy_test_object_eina_inlist_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { Eina_Bool r = _inlist_int_equal(lst, base_seq_int, base_seq_int_size); return r; @@ -1660,7 +1662,7 @@ Eina_Bool _test_testing_eina_inlist_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test static Eina_Inlist *_inlist_int_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Bool _dummy_test_object_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { Eina_Bool r = _inlist_int_equal(lst, base_seq_int, base_seq_int_size); if (!r) return r; @@ -1672,7 +1674,7 @@ Eina_Bool _test_testing_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_check_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_int_in_own_to_check; if (!lst) return EINA_FALSE; @@ -1681,7 +1683,7 @@ Eina_Bool _test_testing_check_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_U Eina_Bool r = _inlist_int_equal(lst, modified_seq_int, modified_seq_int_size); if (!r) return r; - Test_Inlist_Node_Int *node; + Dummy_Inlist_Node_Int *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1692,7 +1694,7 @@ Eina_Bool _test_testing_check_eina_inlist_int_in_own(EINA_UNUSED Eo *obj, EINA_U Eina_Inlist *_inlist_int_out_to_check = NULL; -Eina_Bool _test_testing_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist **lst) +Eina_Bool _dummy_test_object_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist **lst) { if (!lst) return EINA_FALSE; *lst = eina_inlist_append(*lst, _new_inlist_int(0x0)); @@ -1701,7 +1703,7 @@ Eina_Bool _test_testing_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Tes _inlist_int_out_to_check = *lst; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_int_out_to_check; if (!lst) return EINA_FALSE; @@ -1710,7 +1712,7 @@ Eina_Bool _test_testing_check_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUS Eina_Bool r = _inlist_int_equal(lst, base_seq_int, base_seq_int_size); if (!r) return r; - Test_Inlist_Node_Int *node; + Dummy_Inlist_Node_Int *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1720,7 +1722,7 @@ Eina_Bool _test_testing_check_eina_inlist_int_out(EINA_UNUSED Eo *obj, EINA_UNUS return r; } -Eina_Bool _test_testing_eina_inlist_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist **lst) +Eina_Bool _dummy_test_object_eina_inlist_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist **lst) { if (!lst) return EINA_FALSE; *lst = eina_inlist_append(*lst, _new_inlist_int(0x0)); @@ -1731,7 +1733,7 @@ Eina_Bool _test_testing_eina_inlist_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Eina_Inlist *_inlist_int_return_to_check = NULL; -Eina_Inlist *_test_testing_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inlist *_dummy_test_object_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = NULL; lst = eina_inlist_append(lst, _new_inlist_int(0x0)); @@ -1740,7 +1742,7 @@ Eina_Inlist *_test_testing_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_UNUS _inlist_int_return_to_check = lst; return lst; } -Eina_Bool _test_testing_check_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_int_return_to_check; if (!lst) return EINA_FALSE; @@ -1749,7 +1751,7 @@ Eina_Bool _test_testing_check_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_U Eina_Bool r = _inlist_int_equal(lst, base_seq_int, base_seq_int_size); if (!r) return r; - Test_Inlist_Node_Int *node; + Dummy_Inlist_Node_Int *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1759,7 +1761,7 @@ Eina_Bool _test_testing_check_eina_inlist_int_return(EINA_UNUSED Eo *obj, EINA_U return r; } -Eina_Inlist *_test_testing_eina_inlist_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inlist *_dummy_test_object_eina_inlist_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = NULL; lst = eina_inlist_append(lst, _new_inlist_int(0x0)); @@ -1770,16 +1772,16 @@ Eina_Inlist *_test_testing_eina_inlist_int_return_own(EINA_UNUSED Eo *obj, EINA_ // String -typedef struct _Test_Inlist_Node_Str +typedef struct _Dummy_Inlist_Node_Str { EINA_INLIST; char *val; -} Test_Inlist_Node_Str; +} Dummy_Inlist_Node_Str; Eina_Inlist *_new_inlist_str(const char *v) { - Test_Inlist_Node_Str *node = malloc(sizeof(Test_Inlist_Node_Str)); + Dummy_Inlist_Node_Str *node = malloc(sizeof(Dummy_Inlist_Node_Str)); node->val = strdup(v); return EINA_INLIST_GET(node); } @@ -1789,7 +1791,7 @@ Eina_Bool _inlist_str_equal(const Eina_Inlist *lst, const char * const base[], u if (eina_inlist_count(lst) != len) return EINA_FALSE; - const Test_Inlist_Node_Str *node; + const Dummy_Inlist_Node_Str *node; int i = 0; EINA_INLIST_FOREACH(lst, node) { @@ -1800,7 +1802,7 @@ Eina_Bool _inlist_str_equal(const Eina_Inlist *lst, const char * const base[], u return EINA_TRUE; } -Eina_Bool _test_testing_eina_inlist_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Bool _dummy_test_object_eina_inlist_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { Eina_Bool r = _inlist_str_equal(lst, base_seq_str, base_seq_str_size); return r; @@ -1808,7 +1810,7 @@ Eina_Bool _test_testing_eina_inlist_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test static Eina_Inlist *_inlist_str_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Bool _dummy_test_object_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { Eina_Bool r = _inlist_str_equal(lst, base_seq_str, base_seq_str_size); if (!r) return r; @@ -1819,7 +1821,7 @@ Eina_Bool _test_testing_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_check_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_str_in_own_to_check; if (!lst) return EINA_FALSE; @@ -1828,7 +1830,7 @@ Eina_Bool _test_testing_check_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_U Eina_Bool r = _inlist_str_equal(lst, modified_seq_str, modified_seq_str_size); if (!r) return r; - Test_Inlist_Node_Str *node; + Dummy_Inlist_Node_Str *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1841,7 +1843,7 @@ Eina_Bool _test_testing_check_eina_inlist_str_in_own(EINA_UNUSED Eo *obj, EINA_U Eina_Inlist *_inlist_str_out_to_check = NULL; -Eina_Bool _test_testing_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist **lst) +Eina_Bool _dummy_test_object_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist **lst) { if (!lst) return EINA_FALSE; *lst = eina_inlist_append(*lst, _new_inlist_str("0x0")); @@ -1850,7 +1852,7 @@ Eina_Bool _test_testing_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Tes _inlist_str_out_to_check = *lst; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_str_out_to_check; if (!lst) return EINA_FALSE; @@ -1859,7 +1861,7 @@ Eina_Bool _test_testing_check_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUS Eina_Bool r = _inlist_str_equal(lst, base_seq_str, base_seq_str_size); if (!r) return r; - Test_Inlist_Node_Str *node; + Dummy_Inlist_Node_Str *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1870,7 +1872,7 @@ Eina_Bool _test_testing_check_eina_inlist_str_out(EINA_UNUSED Eo *obj, EINA_UNUS return r; } -Eina_Bool _test_testing_eina_inlist_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist **lst) +Eina_Bool _dummy_test_object_eina_inlist_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist **lst) { if (!lst) return EINA_FALSE; *lst = eina_inlist_append(*lst, _new_inlist_str("0x0")); @@ -1881,7 +1883,7 @@ Eina_Bool _test_testing_eina_inlist_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Eina_Inlist *_inlist_str_return_to_check = NULL; -Eina_Inlist *_test_testing_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inlist *_dummy_test_object_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = NULL; lst = eina_inlist_append(lst, _new_inlist_str("0x0")); @@ -1890,7 +1892,7 @@ Eina_Inlist *_test_testing_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_UNUS _inlist_str_return_to_check = lst; return lst; } -Eina_Bool _test_testing_check_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_str_return_to_check; if (!lst) return EINA_FALSE; @@ -1899,7 +1901,7 @@ Eina_Bool _test_testing_check_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_U Eina_Bool r = _inlist_str_equal(lst, base_seq_str, base_seq_str_size); if (!r) return r; - Test_Inlist_Node_Str *node; + Dummy_Inlist_Node_Str *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1910,7 +1912,7 @@ Eina_Bool _test_testing_check_eina_inlist_str_return(EINA_UNUSED Eo *obj, EINA_U return r; } -Eina_Inlist *_test_testing_eina_inlist_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inlist *_dummy_test_object_eina_inlist_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = NULL; lst = eina_inlist_append(lst, _new_inlist_str("0x0")); @@ -1921,31 +1923,31 @@ Eina_Inlist *_test_testing_eina_inlist_str_return_own(EINA_UNUSED Eo *obj, EINA_ // Object -typedef struct _Test_Inlist_Node_Obj +typedef struct _Dummy_Inlist_Node_Obj { EINA_INLIST; - Test_Numberwrapper *val; -} Test_Inlist_Node_Obj; + Dummy_Numberwrapper *val; +} Dummy_Inlist_Node_Obj; Eina_Inlist *_new_inlist_obj(int v) { - Test_Inlist_Node_Obj *node = malloc(sizeof(Test_Inlist_Node_Obj)); + Dummy_Inlist_Node_Obj *node = malloc(sizeof(Dummy_Inlist_Node_Obj)); node->val = _new_obj(v); return EINA_INLIST_GET(node); } -Eina_Bool _inlist_obj_equal(const Eina_Inlist *lst, const Test_Numberwrapper * const base[], unsigned int len) +Eina_Bool _inlist_obj_equal(const Eina_Inlist *lst, const Dummy_Numberwrapper * const base[], unsigned int len) { if (eina_inlist_count(lst) != len) return EINA_FALSE; - const Test_Inlist_Node_Obj *node; + const Dummy_Inlist_Node_Obj *node; int i = 0; EINA_INLIST_FOREACH(lst, node) { - int a = test_numberwrapper_number_get(node->val); - int b = test_numberwrapper_number_get(base[i]); + int a = dummy_numberwrapper_number_get(node->val); + int b = dummy_numberwrapper_number_get(base[i]); if (a != b) return EINA_FALSE; ++i; @@ -1953,7 +1955,7 @@ Eina_Bool _inlist_obj_equal(const Eina_Inlist *lst, const Test_Numberwrapper * c return EINA_TRUE; } -Eina_Bool _test_testing_eina_inlist_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Bool _dummy_test_object_eina_inlist_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { Eina_Bool r = _inlist_obj_equal(lst, base_seq_obj, base_seq_obj_size); return r; @@ -1961,7 +1963,7 @@ Eina_Bool _test_testing_eina_inlist_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test static Eina_Inlist *_inlist_obj_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Bool _dummy_test_object_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { Eina_Bool r = _inlist_obj_equal(lst, base_seq_obj, base_seq_obj_size); if (!r) return r; @@ -1972,7 +1974,7 @@ Eina_Bool _test_testing_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED return r; } -Eina_Bool _test_testing_check_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_obj_in_own_to_check; if (!lst) return EINA_FALSE; @@ -1981,7 +1983,7 @@ Eina_Bool _test_testing_check_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_U Eina_Bool r = _inlist_obj_equal(lst, modified_seq_obj, modified_seq_obj_size); if (!r) return r; - Test_Inlist_Node_Obj *node; + Dummy_Inlist_Node_Obj *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -1994,7 +1996,7 @@ Eina_Bool _test_testing_check_eina_inlist_obj_in_own(EINA_UNUSED Eo *obj, EINA_U Eina_Inlist *_inlist_obj_out_to_check = NULL; -Eina_Bool _test_testing_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist **lst) +Eina_Bool _dummy_test_object_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist **lst) { if (!lst) return EINA_FALSE; *lst = eina_inlist_append(*lst, _new_inlist_obj(0x0)); @@ -2003,7 +2005,7 @@ Eina_Bool _test_testing_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Tes _inlist_obj_out_to_check = *lst; return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_obj_out_to_check; if (!lst) return EINA_FALSE; @@ -2012,7 +2014,7 @@ Eina_Bool _test_testing_check_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUS Eina_Bool r = _inlist_obj_equal(lst, base_seq_obj, base_seq_obj_size); if (!r) return r; - Test_Inlist_Node_Obj *node; + Dummy_Inlist_Node_Obj *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -2023,7 +2025,7 @@ Eina_Bool _test_testing_check_eina_inlist_obj_out(EINA_UNUSED Eo *obj, EINA_UNUS return r; } -Eina_Bool _test_testing_eina_inlist_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist **lst) +Eina_Bool _dummy_test_object_eina_inlist_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist **lst) { if (!lst) return EINA_FALSE; *lst = eina_inlist_append(*lst, _new_inlist_obj(0x0)); @@ -2034,7 +2036,7 @@ Eina_Bool _test_testing_eina_inlist_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Eina_Inlist *_inlist_obj_return_to_check = NULL; -Eina_Inlist *_test_testing_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inlist *_dummy_test_object_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = NULL; lst = eina_inlist_append(lst, _new_inlist_obj(0x0)); @@ -2043,7 +2045,7 @@ Eina_Inlist *_test_testing_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_UNUS _inlist_obj_return_to_check = lst; return lst; } -Eina_Bool _test_testing_check_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = _inlist_obj_return_to_check; if (!lst) return EINA_FALSE; @@ -2052,7 +2054,7 @@ Eina_Bool _test_testing_check_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_U Eina_Bool r = _inlist_obj_equal(lst, base_seq_obj, base_seq_obj_size); if (!r) return r; - Test_Inlist_Node_Obj *node; + Dummy_Inlist_Node_Obj *node; EINA_INLIST_FREE(lst, node) { lst = eina_inlist_remove(lst, EINA_INLIST_GET(node)); @@ -2063,7 +2065,7 @@ Eina_Bool _test_testing_check_eina_inlist_obj_return(EINA_UNUSED Eo *obj, EINA_U return r; } -Eina_Inlist *_test_testing_eina_inlist_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Inlist *_dummy_test_object_eina_inlist_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Inlist *lst = NULL; lst = eina_inlist_append(lst, _new_inlist_obj(0x0)); @@ -2072,7 +2074,7 @@ Eina_Inlist *_test_testing_eina_inlist_obj_return_own(EINA_UNUSED Eo *obj, EINA_ return lst; } -Eina_Inlist *_test_testing_eina_inlist_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Inlist *lst) +Eina_Inlist *_dummy_test_object_eina_inlist_obj_return_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Inlist *lst) { return lst; } @@ -2093,7 +2095,7 @@ Eina_Bool _hash_int_check(const Eina_Hash *hsh, int key, int expected_val) // int in -Eina_Bool _test_testing_eina_hash_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash *hsh) +Eina_Bool _dummy_test_object_eina_hash_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash *hsh) { if (!_hash_int_check(hsh, 22, 222)) return EINA_FALSE; @@ -2113,7 +2115,7 @@ static void _hash_int_in_own_free_cb(void *data) } static Eina_Hash *_hash_int_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_hash_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash *hsh) +Eina_Bool _dummy_test_object_eina_hash_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash *hsh) { eina_hash_free_cb_set(hsh, _hash_int_in_own_free_cb); @@ -2125,7 +2127,7 @@ Eina_Bool _test_testing_eina_hash_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Te int key = 44; return eina_hash_add(hsh, &key, _new_int(444)); } -Eina_Bool _test_testing_check_eina_hash_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_hash_int_in_own_to_check) return EINA_FALSE; @@ -2152,7 +2154,7 @@ static void _hash_int_out_free_cb(void *data) } Eina_Hash *_hash_int_out_to_check = NULL; -Eina_Bool _test_testing_eina_hash_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash **hsh) +Eina_Bool _dummy_test_object_eina_hash_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash **hsh) { if (!hsh) return EINA_FALSE; @@ -2163,7 +2165,7 @@ Eina_Bool _test_testing_eina_hash_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ int key = 22; return eina_hash_add(*hsh, &key, _new_int(222)); } -Eina_Bool _test_testing_check_eina_hash_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_hash_int_out_to_check) return EINA_FALSE; @@ -2188,7 +2190,7 @@ static void _hash_int_out_own_free_cb(void *data) _hash_int_out_own_free_flag = EINA_TRUE; free(data); } -Eina_Bool _test_testing_eina_hash_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash **hsh) +Eina_Bool _dummy_test_object_eina_hash_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash **hsh) { if (!hsh) return EINA_FALSE; @@ -2197,7 +2199,7 @@ Eina_Bool _test_testing_eina_hash_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED T int key = 22; return eina_hash_add(*hsh, &key, _new_int(222)); } -Eina_Bool _test_testing_check_eina_hash_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return !_hash_int_out_own_free_flag; } @@ -2213,7 +2215,7 @@ static void _hash_int_return_free_cb(void *data) } Eina_Hash *_hash_int_return_to_check = NULL; -Eina_Hash *_test_testing_eina_hash_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Hash *_dummy_test_object_eina_hash_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Hash *hsh = eina_hash_int32_new(_hash_int_return_free_cb); @@ -2224,7 +2226,7 @@ Eina_Hash *_test_testing_eina_hash_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED T return hsh; } -Eina_Bool _test_testing_check_eina_hash_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_hash_int_return_to_check) return EINA_FALSE; @@ -2249,7 +2251,7 @@ static void _hash_int_return_own_free_cb(void *data) _hash_int_return_own_free_flag = EINA_TRUE; free(data); } -Eina_Hash *_test_testing_eina_hash_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Hash *_dummy_test_object_eina_hash_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Hash *hsh = eina_hash_int32_new(_hash_int_return_own_free_cb); @@ -2258,7 +2260,7 @@ Eina_Hash *_test_testing_eina_hash_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUS return hsh; } -Eina_Bool _test_testing_check_eina_hash_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return !_hash_int_return_own_free_flag; } @@ -2275,7 +2277,7 @@ Eina_Bool _hash_str_check(const Eina_Hash *hsh, const char *key, const char *exp // str in -Eina_Bool _test_testing_eina_hash_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash *hsh) +Eina_Bool _dummy_test_object_eina_hash_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash *hsh) { if (!_hash_str_check(hsh, "aa", "aaa")) return EINA_FALSE; @@ -2294,7 +2296,7 @@ static void _hash_str_in_own_free_cb(void *data) } static Eina_Hash *_hash_str_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_hash_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash *hsh) +Eina_Bool _dummy_test_object_eina_hash_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash *hsh) { eina_hash_free_cb_set(hsh, _hash_str_in_own_free_cb); @@ -2305,7 +2307,7 @@ Eina_Bool _test_testing_eina_hash_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Te return eina_hash_add(hsh, "bb", strdup("bbb")); } -Eina_Bool _test_testing_check_eina_hash_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_hash_str_in_own_to_check) return EINA_FALSE; @@ -2332,7 +2334,7 @@ static void _hash_str_out_free_cb(void *data) } Eina_Hash *_hash_str_out_to_check = NULL; -Eina_Bool _test_testing_eina_hash_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash **hsh) +Eina_Bool _dummy_test_object_eina_hash_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash **hsh) { if (!hsh) return EINA_FALSE; @@ -2342,7 +2344,7 @@ Eina_Bool _test_testing_eina_hash_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ return eina_hash_add(*hsh, "aa", strdup("aaa")); } -Eina_Bool _test_testing_check_eina_hash_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_hash_str_out_to_check) return EINA_FALSE; @@ -2367,7 +2369,7 @@ static void _hash_str_out_own_free_cb(void *data) _hash_str_out_own_free_flag = EINA_TRUE; free(data); } -Eina_Bool _test_testing_eina_hash_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash **hsh) +Eina_Bool _dummy_test_object_eina_hash_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash **hsh) { if (!hsh) return EINA_FALSE; @@ -2375,7 +2377,7 @@ Eina_Bool _test_testing_eina_hash_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED T return eina_hash_add(*hsh, "aa", strdup("aaa")); } -Eina_Bool _test_testing_check_eina_hash_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return !_hash_str_out_own_free_flag; } @@ -2391,7 +2393,7 @@ static void _hash_str_return_free_cb(void *data) } Eina_Hash *_hash_str_return_to_check = NULL; -Eina_Hash *_test_testing_eina_hash_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Hash *_dummy_test_object_eina_hash_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Hash *hsh = eina_hash_string_superfast_new(_hash_str_return_free_cb); @@ -2401,7 +2403,7 @@ Eina_Hash *_test_testing_eina_hash_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED T return hsh; } -Eina_Bool _test_testing_check_eina_hash_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { if (!_hash_str_return_to_check) return EINA_FALSE; @@ -2426,7 +2428,7 @@ static void _hash_str_return_own_free_cb(void *data) _hash_str_return_own_free_flag = EINA_TRUE; free(data); } -Eina_Hash *_test_testing_eina_hash_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Hash *_dummy_test_object_eina_hash_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Hash *hsh = eina_hash_string_superfast_new(_hash_str_return_own_free_cb); @@ -2434,7 +2436,7 @@ Eina_Hash *_test_testing_eina_hash_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUS return hsh; } -Eina_Bool _test_testing_check_eina_hash_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return !_hash_str_return_own_free_flag; } @@ -2442,16 +2444,16 @@ Eina_Bool _test_testing_check_eina_hash_str_return_own(EINA_UNUSED Eo *obj, EINA // Object // -Eina_Bool _hash_obj_check(const Eina_Hash *hsh, Test_Numberwrapper *key, Test_Numberwrapper *expected_val, int knum, int vnum) +Eina_Bool _hash_obj_check(const Eina_Hash *hsh, Dummy_Numberwrapper *key, Dummy_Numberwrapper *expected_val, int knum, int vnum) { - Test_Numberwrapper *val = eina_hash_find(hsh, &key); - return val && (val == expected_val) && (test_numberwrapper_number_get(key) == knum) && (test_numberwrapper_number_get(val) == vnum); + Dummy_Numberwrapper *val = eina_hash_find(hsh, &key); + return val && (val == expected_val) && (dummy_numberwrapper_number_get(key) == knum) && (dummy_numberwrapper_number_get(val) == vnum); } // obj in -Eina_Bool _test_testing_eina_hash_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash *hsh, Test_Numberwrapper *nwk1, Test_Numberwrapper *nwv1, Test_Numberwrapper **nwk2, Test_Numberwrapper **nwv2) +Eina_Bool _dummy_test_object_eina_hash_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash *hsh, Dummy_Numberwrapper *nwk1, Dummy_Numberwrapper *nwv1, Dummy_Numberwrapper **nwk2, Dummy_Numberwrapper **nwv2) { if (!_hash_obj_check(hsh, nwk1, nwv1, 22, 222)) return EINA_FALSE; @@ -2473,7 +2475,7 @@ static void _hash_obj_in_own_free_cb(void *data) } static Eina_Hash *_hash_obj_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_hash_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash *hsh, Test_Numberwrapper *nwk1, Test_Numberwrapper *nwv1, Test_Numberwrapper **nwk2, Test_Numberwrapper **nwv2) +Eina_Bool _dummy_test_object_eina_hash_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash *hsh, Dummy_Numberwrapper *nwk1, Dummy_Numberwrapper *nwv1, Dummy_Numberwrapper **nwk2, Dummy_Numberwrapper **nwv2) { eina_hash_free_cb_set(hsh, _hash_obj_in_own_free_cb); @@ -2487,7 +2489,7 @@ Eina_Bool _test_testing_eina_hash_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Te return eina_hash_add(hsh, nwk2, *nwv2); } -Eina_Bool _test_testing_check_eina_hash_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_Numberwrapper *nwk1, Test_Numberwrapper *nwv1, Test_Numberwrapper *nwk2, Test_Numberwrapper *nwv2) +Eina_Bool _dummy_test_object_check_eina_hash_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_Numberwrapper *nwk1, Dummy_Numberwrapper *nwv1, Dummy_Numberwrapper *nwk2, Dummy_Numberwrapper *nwv2) { if (!_hash_obj_in_own_to_check) return EINA_FALSE; @@ -2513,7 +2515,7 @@ static void _hash_obj_out_free_cb(void *data) } Eina_Hash *_hash_obj_out_to_check = NULL; -Eina_Bool _test_testing_eina_hash_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash **hsh, Test_Numberwrapper **nwk, Test_Numberwrapper **nwv) +Eina_Bool _dummy_test_object_eina_hash_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash **hsh, Dummy_Numberwrapper **nwk, Dummy_Numberwrapper **nwv) { if (!hsh) return EINA_FALSE; @@ -2525,7 +2527,7 @@ Eina_Bool _test_testing_eina_hash_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ *nwv = _new_obj(222); return eina_hash_add(*hsh, nwk, *nwv); } -Eina_Bool _test_testing_check_eina_hash_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_Numberwrapper *nwk1, Test_Numberwrapper *nwv1, Test_Numberwrapper *nwk2, Test_Numberwrapper *nwv2) +Eina_Bool _dummy_test_object_check_eina_hash_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_Numberwrapper *nwk1, Dummy_Numberwrapper *nwv1, Dummy_Numberwrapper *nwk2, Dummy_Numberwrapper *nwv2) { if (!_hash_obj_out_to_check) return EINA_FALSE; @@ -2550,7 +2552,7 @@ static void _hash_obj_out_own_free_cb(void *data) _hash_obj_out_own_free_flag = EINA_TRUE; efl_unref(data); } -Eina_Bool _test_testing_eina_hash_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Hash **hsh, Test_Numberwrapper **nwk, Test_Numberwrapper **nwv) +Eina_Bool _dummy_test_object_eina_hash_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Hash **hsh, Dummy_Numberwrapper **nwk, Dummy_Numberwrapper **nwv) { if (!hsh) return EINA_FALSE; @@ -2560,7 +2562,7 @@ Eina_Bool _test_testing_eina_hash_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED T *nwv = _new_obj(222); return eina_hash_add(*hsh, nwk, *nwv); } -Eina_Bool _test_testing_check_eina_hash_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return !_hash_obj_out_own_free_flag; } @@ -2576,7 +2578,7 @@ static void _hash_obj_return_free_cb(void *data) } Eina_Hash *_hash_obj_return_to_check = NULL; -Eina_Hash *_test_testing_eina_hash_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_Numberwrapper **nwk, Test_Numberwrapper **nwv) +Eina_Hash *_dummy_test_object_eina_hash_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_Numberwrapper **nwk, Dummy_Numberwrapper **nwv) { Eina_Hash *hsh = eina_hash_pointer_new(_hash_obj_return_free_cb); @@ -2589,7 +2591,7 @@ Eina_Hash *_test_testing_eina_hash_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED T return hsh; } -Eina_Bool _test_testing_check_eina_hash_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_Numberwrapper *nwk1, Test_Numberwrapper *nwv1, Test_Numberwrapper *nwk2, Test_Numberwrapper *nwv2) +Eina_Bool _dummy_test_object_check_eina_hash_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_Numberwrapper *nwk1, Dummy_Numberwrapper *nwv1, Dummy_Numberwrapper *nwk2, Dummy_Numberwrapper *nwv2) { if (!_hash_obj_return_to_check) return EINA_FALSE; @@ -2614,7 +2616,7 @@ static void _hash_obj_return_own_free_cb(void *data) _hash_obj_return_own_free_flag = EINA_TRUE; efl_unref(data); } -Eina_Hash *_test_testing_eina_hash_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_Numberwrapper **nwk, Test_Numberwrapper **nwv) +Eina_Hash *_dummy_test_object_eina_hash_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_Numberwrapper **nwk, Dummy_Numberwrapper **nwv) { Eina_Hash *hsh = eina_hash_pointer_new(_hash_obj_return_own_free_cb); @@ -2624,7 +2626,7 @@ Eina_Hash *_test_testing_eina_hash_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUS return hsh; } -Eina_Bool _test_testing_check_eina_hash_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_hash_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { return !_hash_obj_return_own_free_flag; } @@ -2685,7 +2687,7 @@ Eina_Bool _iterator_int_test_array(Eina_Array *arr) // in -Eina_Bool _test_testing_eina_iterator_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator *itr) +Eina_Bool _dummy_test_object_eina_iterator_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator *itr) { Eina_Bool r = _iterator_int_equal(itr, base_seq_int, base_seq_int_size, EINA_FALSE); return r; @@ -2695,13 +2697,13 @@ Eina_Bool _test_testing_eina_iterator_int_in(EINA_UNUSED Eo *obj, EINA_UNUSED Te static Eina_Iterator *_iterator_int_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_iterator_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator *itr) +Eina_Bool _dummy_test_object_eina_iterator_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator *itr) { Eina_Bool r = _iterator_int_equal(itr, base_seq_int, base_seq_int_size, EINA_TRUE); _iterator_int_in_own_to_check = itr; return r; } -Eina_Bool _test_testing_check_eina_iterator_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_int_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { eina_iterator_free(_iterator_int_in_own_to_check); _iterator_int_in_own_to_check = NULL; @@ -2713,7 +2715,7 @@ Eina_Bool _test_testing_check_eina_iterator_int_in_own(EINA_UNUSED Eo *obj, EINA Eina_Iterator *_iterator_int_out_to_check = NULL; Eina_Array *_iterator_int_out_array = NULL; -Eina_Bool _test_testing_eina_iterator_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator **itr) +Eina_Bool _dummy_test_object_eina_iterator_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator **itr) { if (!itr) return EINA_FALSE; @@ -2724,7 +2726,7 @@ Eina_Bool _test_testing_eina_iterator_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED T return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_iterator_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_int_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Iterator *itr = _iterator_int_out_to_check; if (!itr) return EINA_FALSE; @@ -2744,7 +2746,7 @@ Eina_Bool _test_testing_check_eina_iterator_int_out(EINA_UNUSED Eo *obj, EINA_UN // out own -Eina_Bool _test_testing_eina_iterator_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator **itr) +Eina_Bool _dummy_test_object_eina_iterator_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator **itr) { if (!itr) return EINA_FALSE; @@ -2760,13 +2762,13 @@ Eina_Bool _test_testing_eina_iterator_int_out_own(EINA_UNUSED Eo *obj, EINA_UNUS Eina_Iterator *_iterator_int_return_to_check = NULL; Eina_Array *_iterator_int_return_array = NULL; -Eina_Iterator *_test_testing_eina_iterator_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Iterator *_dummy_test_object_eina_iterator_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { _iterator_int_return_array = _iterator_int_eina_array_new(); _iterator_int_return_to_check = eina_array_iterator_new(_iterator_int_return_array); return _iterator_int_return_to_check; } -Eina_Bool _test_testing_check_eina_iterator_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_int_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Iterator *itr = _iterator_int_return_to_check; if (!itr) return EINA_FALSE; @@ -2786,7 +2788,7 @@ Eina_Bool _test_testing_check_eina_iterator_int_return(EINA_UNUSED Eo *obj, EINA // return own -Eina_Iterator *_test_testing_eina_iterator_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Iterator *_dummy_test_object_eina_iterator_int_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = _iterator_int_eina_array_new(); return eina_array_iterator_new(arr); @@ -2843,7 +2845,7 @@ Eina_Bool _iterator_str_test_array(Eina_Array *arr) // in -Eina_Bool _test_testing_eina_iterator_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator *itr) +Eina_Bool _dummy_test_object_eina_iterator_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator *itr) { Eina_Bool r = _iterator_str_equal(itr, base_seq_str, base_seq_str_size, EINA_FALSE); return r; @@ -2853,13 +2855,13 @@ Eina_Bool _test_testing_eina_iterator_str_in(EINA_UNUSED Eo *obj, EINA_UNUSED Te static Eina_Iterator *_iterator_str_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_iterator_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator *itr) +Eina_Bool _dummy_test_object_eina_iterator_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator *itr) { Eina_Bool r = _iterator_str_equal(itr, base_seq_str, base_seq_str_size, EINA_TRUE); _iterator_str_in_own_to_check = itr; return r; } -Eina_Bool _test_testing_check_eina_iterator_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_str_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { eina_iterator_free(_iterator_str_in_own_to_check); _iterator_str_in_own_to_check = NULL; @@ -2871,7 +2873,7 @@ Eina_Bool _test_testing_check_eina_iterator_str_in_own(EINA_UNUSED Eo *obj, EINA Eina_Iterator *_iterator_str_out_to_check = NULL; Eina_Array *_iterator_str_out_array = NULL; -Eina_Bool _test_testing_eina_iterator_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator **itr) +Eina_Bool _dummy_test_object_eina_iterator_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator **itr) { if (!itr) return EINA_FALSE; @@ -2882,7 +2884,7 @@ Eina_Bool _test_testing_eina_iterator_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED T return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_iterator_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_str_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Iterator *itr = _iterator_str_out_to_check; if (!itr) return EINA_FALSE; @@ -2902,7 +2904,7 @@ Eina_Bool _test_testing_check_eina_iterator_str_out(EINA_UNUSED Eo *obj, EINA_UN // out own -Eina_Bool _test_testing_eina_iterator_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator **itr) +Eina_Bool _dummy_test_object_eina_iterator_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator **itr) { if (!itr) return EINA_FALSE; @@ -2918,13 +2920,13 @@ Eina_Bool _test_testing_eina_iterator_str_out_own(EINA_UNUSED Eo *obj, EINA_UNUS Eina_Iterator *_iterator_str_return_to_check = NULL; Eina_Array *_iterator_str_return_array = NULL; -Eina_Iterator *_test_testing_eina_iterator_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Iterator *_dummy_test_object_eina_iterator_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { _iterator_str_return_array = _iterator_str_eina_array_new(); _iterator_str_return_to_check = eina_array_iterator_new(_iterator_str_return_array); return _iterator_str_return_to_check; } -Eina_Bool _test_testing_check_eina_iterator_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_str_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Iterator *itr = _iterator_str_return_to_check; if (!itr) return EINA_FALSE; @@ -2944,7 +2946,7 @@ Eina_Bool _test_testing_check_eina_iterator_str_return(EINA_UNUSED Eo *obj, EINA // return own -Eina_Iterator *_test_testing_eina_iterator_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Iterator *_dummy_test_object_eina_iterator_str_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = _iterator_str_eina_array_new(); return eina_array_iterator_new(arr); @@ -2952,14 +2954,14 @@ Eina_Iterator *_test_testing_eina_iterator_str_return_own(EINA_UNUSED Eo *obj, E // Object // -Eina_Bool _iterator_obj_equal(Eina_Iterator *itr, const Test_Numberwrapper * const base[], unsigned int len, Eina_Bool release) +Eina_Bool _iterator_obj_equal(Eina_Iterator *itr, const Dummy_Numberwrapper * const base[], unsigned int len, Eina_Bool release) { - Test_Numberwrapper *data; + Dummy_Numberwrapper *data; unsigned i = 0; EINA_ITERATOR_FOREACH(itr, data) { - int a = test_numberwrapper_number_get(data); - int b = test_numberwrapper_number_get(base[i]); + int a = dummy_numberwrapper_number_get(data); + int b = dummy_numberwrapper_number_get(base[i]); if (a != b) return EINA_FALSE; if (release) @@ -2978,7 +2980,7 @@ Eina_Array *_iterator_obj_eina_array_new() Eina_Array *arr = eina_array_new(32); for (unsigned i = 0; i < base_seq_obj_size; ++i) { - eina_array_push(arr, _new_obj(test_numberwrapper_number_get(base_seq_obj[i]))); + eina_array_push(arr, _new_obj(dummy_numberwrapper_number_get(base_seq_obj[i]))); } return arr; } @@ -2990,9 +2992,9 @@ Eina_Bool _iterator_obj_test_array(Eina_Array *arr) for (unsigned i = 0; i < base_seq_obj_size; ++i) { - Test_Numberwrapper *data = eina_array_data_get(arr, i); - int a = test_numberwrapper_number_get(data); - int b = test_numberwrapper_number_get(base_seq_obj[i]); + Dummy_Numberwrapper *data = eina_array_data_get(arr, i); + int a = dummy_numberwrapper_number_get(data); + int b = dummy_numberwrapper_number_get(base_seq_obj[i]); if (a != b) return EINA_FALSE; efl_unref(data); @@ -3005,7 +3007,7 @@ Eina_Bool _iterator_obj_test_array(Eina_Array *arr) // in -Eina_Bool _test_testing_eina_iterator_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator *itr) +Eina_Bool _dummy_test_object_eina_iterator_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator *itr) { Eina_Bool r = _iterator_obj_equal(itr, base_seq_obj, base_seq_obj_size, EINA_FALSE); return r; @@ -3015,13 +3017,13 @@ Eina_Bool _test_testing_eina_iterator_obj_in(EINA_UNUSED Eo *obj, EINA_UNUSED Te static Eina_Iterator *_iterator_obj_in_own_to_check = NULL; -Eina_Bool _test_testing_eina_iterator_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator *itr) +Eina_Bool _dummy_test_object_eina_iterator_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator *itr) { Eina_Bool r = _iterator_obj_equal(itr, base_seq_obj, base_seq_obj_size, EINA_TRUE); _iterator_obj_in_own_to_check = itr; return r; } -Eina_Bool _test_testing_check_eina_iterator_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_obj_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { eina_iterator_free(_iterator_obj_in_own_to_check); _iterator_obj_in_own_to_check = NULL; @@ -3033,7 +3035,7 @@ Eina_Bool _test_testing_check_eina_iterator_obj_in_own(EINA_UNUSED Eo *obj, EINA Eina_Iterator *_iterator_obj_out_to_check = NULL; Eina_Array *_iterator_obj_out_array = NULL; -Eina_Bool _test_testing_eina_iterator_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator **itr) +Eina_Bool _dummy_test_object_eina_iterator_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator **itr) { if (!itr) return EINA_FALSE; @@ -3044,7 +3046,7 @@ Eina_Bool _test_testing_eina_iterator_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED T return EINA_TRUE; } -Eina_Bool _test_testing_check_eina_iterator_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_obj_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Iterator *itr = _iterator_obj_out_to_check; if (!itr) return EINA_FALSE; @@ -3064,7 +3066,7 @@ Eina_Bool _test_testing_check_eina_iterator_obj_out(EINA_UNUSED Eo *obj, EINA_UN // out own -Eina_Bool _test_testing_eina_iterator_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Iterator **itr) +Eina_Bool _dummy_test_object_eina_iterator_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Iterator **itr) { if (!itr) return EINA_FALSE; @@ -3080,13 +3082,13 @@ Eina_Bool _test_testing_eina_iterator_obj_out_own(EINA_UNUSED Eo *obj, EINA_UNUS Eina_Iterator *_iterator_obj_return_to_check = NULL; Eina_Array *_iterator_obj_return_array = NULL; -Eina_Iterator *_test_testing_eina_iterator_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Iterator *_dummy_test_object_eina_iterator_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { _iterator_obj_return_array = _iterator_obj_eina_array_new(); _iterator_obj_return_to_check = eina_array_iterator_new(_iterator_obj_return_array); return _iterator_obj_return_to_check; } -Eina_Bool _test_testing_check_eina_iterator_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Bool _dummy_test_object_check_eina_iterator_obj_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Iterator *itr = _iterator_obj_return_to_check; if (!itr) return EINA_FALSE; @@ -3106,7 +3108,7 @@ Eina_Bool _test_testing_check_eina_iterator_obj_return(EINA_UNUSED Eo *obj, EINA // return own -Eina_Iterator *_test_testing_eina_iterator_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Eina_Iterator *_dummy_test_object_eina_iterator_obj_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { Eina_Array *arr = _iterator_obj_eina_array_new(); return eina_array_iterator_new(arr); @@ -3116,7 +3118,7 @@ Eina_Iterator *_test_testing_eina_iterator_obj_return_own(EINA_UNUSED Eo *obj, E // Callbacks and Function Pointers // // // -void _test_testing_set_callback(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, void *cb_data, Test_SimpleCb cb, Eina_Free_Cb cb_free_cb) +void _dummy_test_object_set_callback(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, void *cb_data, Dummy_SimpleCb cb, Eina_Free_Cb cb_free_cb) { if (!pd) { @@ -3132,7 +3134,7 @@ void _test_testing_set_callback(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, void pd->free_cb = cb_free_cb; } -int _test_testing_call_callback(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, int a) +int _dummy_test_object_call_callback(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, int a) { if (!pd->cb) { @@ -3167,32 +3169,32 @@ int _wrapper_cb(EINA_UNUSED void *data, int a) return a * 3; } -void _test_testing_call_set_callback(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +void _dummy_test_object_call_set_callback(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - test_testing_set_callback(obj, efl_ref(obj), _wrapper_cb, _free_callback); + dummy_test_object_set_callback(obj, efl_ref(obj), _wrapper_cb, _free_callback); } -void _test_testing_raises_eina_error(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +void _dummy_test_object_raises_eina_error(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { eina_error_set(EIO); } -void _test_testing_children_raise_error(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +void _dummy_test_object_children_raise_error(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { // Native method shouldn't throw any error. Children must raise it. } -void _test_testing_call_children_raise_error(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +void _dummy_test_object_call_children_raise_error(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - test_testing_children_raise_error(obj); + dummy_test_object_children_raise_error(obj); } -void _test_testing_error_ret_set(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Error error) +void _dummy_test_object_error_ret_set(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Error error) { pd->error_code = error; } -Eina_Error _test_testing_returns_error(EINA_UNUSED Eo *obj, Test_Testing_Data *pd) +Eina_Error _dummy_test_object_returns_error(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd) { return pd->error_code; } @@ -3204,7 +3206,7 @@ Eina_Error _test_testing_returns_error(EINA_UNUSED Eo *obj, Test_Testing_Data *p // auxiliary functions static -void struct_simple_with_values(Test_StructSimple *simple) +void struct_simple_with_values(Dummy_StructSimple *simple) { simple->fbyte = -126; simple->fubyte = 254u; @@ -3233,14 +3235,14 @@ void struct_simple_with_values(Test_StructSimple *simple) simple->fdouble = -9007199254740992.0; simple->fbool = EINA_TRUE; simple->fvoid_ptr = (void*) 0xFE; - simple->fenum = TEST_SAMPLEENUM_V2; + simple->fenum = DUMMY_SAMPLEENUM_V2; simple->fstring = "test/string"; simple->fmstring = strdup("test/mstring"); simple->fstringshare = eina_stringshare_add("test/stringshare"); } static -Eina_Bool check_and_modify_struct_simple(Test_StructSimple *simple) +Eina_Bool check_and_modify_struct_simple(Dummy_StructSimple *simple) { Eina_Bool ret = EQUAL(simple->fbyte, -126) @@ -3270,7 +3272,7 @@ Eina_Bool check_and_modify_struct_simple(Test_StructSimple *simple) && EQUAL(simple->fdouble, -9007199254740992.0) && EQUAL(simple->fbool, EINA_TRUE) && EQUAL(simple->fvoid_ptr, (void*) 0xFE) - && EQUAL(simple->fenum, TEST_SAMPLEENUM_V2) + && EQUAL(simple->fenum, DUMMY_SAMPLEENUM_V2) && STR_EQUAL(simple->fstring, "test/string") && STR_EQUAL(simple->fmstring, "test/mstring") && STR_EQUAL(simple->fstringshare, "test/stringshare") @@ -3284,7 +3286,7 @@ Eina_Bool check_and_modify_struct_simple(Test_StructSimple *simple) } static -void struct_complex_with_values(Test_StructComplex *complex) +void struct_complex_with_values(Dummy_StructComplex *complex) { complex->farray = eina_array_new(4); eina_array_push(complex->farray, _new_int(0x0)); @@ -3328,7 +3330,7 @@ void struct_complex_with_values(Test_StructComplex *complex) } static -Eina_Bool check_and_modify_struct_complex(Test_StructComplex *complex) +Eina_Bool check_and_modify_struct_complex(Dummy_StructComplex *complex) { if (!_array_int_equal(complex->farray, base_seq_int, base_seq_int_size)) return EINA_FALSE; @@ -3364,7 +3366,7 @@ Eina_Bool check_and_modify_struct_complex(Test_StructComplex *complex) if (complex->fslice.len != 1 || *(char*)complex->fslice.mem != 125) return EINA_FALSE; - if (complex->fobj == NULL || test_numberwrapper_number_get(complex->fobj) != 42) + if (complex->fobj == NULL || dummy_numberwrapper_number_get(complex->fobj) != 42) return EINA_FALSE; return EINA_TRUE; @@ -3373,7 +3375,7 @@ Eina_Bool check_and_modify_struct_complex(Test_StructComplex *complex) // with simple types EOLIAN -Eina_Bool _test_testing_struct_simple_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple simple) +Eina_Bool _dummy_test_object_struct_simple_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple simple) { return check_and_modify_struct_simple(&simple); } @@ -3391,7 +3393,7 @@ static void _reverse_string(char *str) } EOLIAN -Eina_Bool _test_testing_struct_simple_ptr_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple *simple) +Eina_Bool _dummy_test_object_struct_simple_ptr_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple *simple) { simple->fint = -simple->fint; _reverse_string(simple->fmstring); @@ -3399,9 +3401,9 @@ Eina_Bool _test_testing_struct_simple_ptr_in(EINA_UNUSED Eo *obj, EINA_UNUSED Te } EOLIAN -Test_StructSimple _test_testing_struct_simple_ptr_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple *simple) +Dummy_StructSimple _dummy_test_object_struct_simple_ptr_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple *simple) { - Test_StructSimple ret = *simple; + Dummy_StructSimple ret = *simple; free(simple); ret.fint = -ret.fint; _reverse_string(ret.fmstring); @@ -3409,7 +3411,7 @@ Test_StructSimple _test_testing_struct_simple_ptr_in_own(EINA_UNUSED Eo *obj, EI } EOLIAN -Eina_Bool _test_testing_struct_simple_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple *simple) +Eina_Bool _dummy_test_object_struct_simple_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple *simple) { if (!simple) { @@ -3423,7 +3425,7 @@ Eina_Bool _test_testing_struct_simple_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_ } EOLIAN -Test_StructSimple _test_testing_struct_simple_ptr_out(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Test_StructSimple **simple) +Dummy_StructSimple _dummy_test_object_struct_simple_ptr_out(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Dummy_StructSimple **simple) { struct_simple_with_values(&pd->stored_struct); *simple = &pd->stored_struct; @@ -3431,24 +3433,24 @@ Test_StructSimple _test_testing_struct_simple_ptr_out(EINA_UNUSED Eo *obj, Test_ } EOLIAN -Test_StructSimple _test_testing_struct_simple_ptr_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple **simple) +Dummy_StructSimple _dummy_test_object_struct_simple_ptr_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple **simple) { - *simple = malloc(sizeof(Test_StructSimple)); + *simple = malloc(sizeof(Dummy_StructSimple)); struct_simple_with_values(*simple); (*simple)->fstring = "Ptr Out Own"; return **simple; } EOLIAN -Test_StructSimple _test_testing_struct_simple_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructSimple _dummy_test_object_struct_simple_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - Test_StructSimple simple = {0,}; + Dummy_StructSimple simple = {0,}; struct_simple_with_values(&simple); return simple; } EOLIAN -Test_StructSimple *_test_testing_struct_simple_ptr_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructSimple *_dummy_test_object_struct_simple_ptr_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { struct_simple_with_values(&pd->stored_struct); pd->stored_struct.fstring = "Ret Ptr"; @@ -3456,78 +3458,78 @@ Test_StructSimple *_test_testing_struct_simple_ptr_return(EINA_UNUSED Eo *obj, E } EOLIAN -Test_StructSimple *_test_testing_struct_simple_ptr_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructSimple *_dummy_test_object_struct_simple_ptr_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - Test_StructSimple *ret = malloc(sizeof(Test_StructSimple)); + Dummy_StructSimple *ret = malloc(sizeof(Dummy_StructSimple)); struct_simple_with_values(ret); ret->fstring = "Ret Ptr Own"; return ret; } EOLIAN -void _test_testing_call_struct_simple_in(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple simple) +void _dummy_test_object_call_struct_simple_in(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple simple) { - test_testing_struct_simple_in(obj, simple); + dummy_test_object_struct_simple_in(obj, simple); } EOLIAN -void _test_testing_call_struct_simple_ptr_in(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple *simple) +void _dummy_test_object_call_struct_simple_ptr_in(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple *simple) { - test_testing_struct_simple_ptr_in(obj, simple); + dummy_test_object_struct_simple_ptr_in(obj, simple); } EOLIAN -void _test_testing_call_struct_simple_ptr_in_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple *simple) +void _dummy_test_object_call_struct_simple_ptr_in_own(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple *simple) { - test_testing_struct_simple_ptr_in_own(obj, simple); + dummy_test_object_struct_simple_ptr_in_own(obj, simple); } EOLIAN -void _test_testing_call_struct_simple_out(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple *simple) +void _dummy_test_object_call_struct_simple_out(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple *simple) { - test_testing_struct_simple_out(obj, simple); + dummy_test_object_struct_simple_out(obj, simple); } EOLIAN -void _test_testing_call_struct_simple_ptr_out(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple **simple) +void _dummy_test_object_call_struct_simple_ptr_out(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple **simple) { - test_testing_struct_simple_ptr_out(obj, simple); + dummy_test_object_struct_simple_ptr_out(obj, simple); } EOLIAN -void _test_testing_call_struct_simple_ptr_out_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple **simple) +void _dummy_test_object_call_struct_simple_ptr_out_own(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple **simple) { - test_testing_struct_simple_ptr_out_own(obj, simple); + dummy_test_object_struct_simple_ptr_out_own(obj, simple); } EOLIAN -Test_StructSimple _test_testing_call_struct_simple_return(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructSimple _dummy_test_object_call_struct_simple_return(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_struct_simple_return(obj); + return dummy_test_object_struct_simple_return(obj); } EOLIAN -Test_StructSimple *_test_testing_call_struct_simple_ptr_return(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructSimple *_dummy_test_object_call_struct_simple_ptr_return(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_struct_simple_ptr_return(obj); + return dummy_test_object_struct_simple_ptr_return(obj); } EOLIAN -Test_StructSimple *_test_testing_call_struct_simple_ptr_return_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructSimple *_dummy_test_object_call_struct_simple_ptr_return_own(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - return test_testing_struct_simple_ptr_return_own(obj); + return dummy_test_object_struct_simple_ptr_return_own(obj); } // with complex types EOLIAN -Eina_Bool _test_testing_struct_complex_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructComplex complex) +Eina_Bool _dummy_test_object_struct_complex_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructComplex complex) { return check_and_modify_struct_complex(&complex); } EOLIAN -Eina_Bool _test_testing_struct_complex_ptr_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructComplex *complex) +Eina_Bool _dummy_test_object_struct_complex_ptr_in(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructComplex *complex) { (void) complex; EINA_LOG_ERR("Not implemented!"); @@ -3535,7 +3537,7 @@ Eina_Bool _test_testing_struct_complex_ptr_in(EINA_UNUSED Eo *obj, EINA_UNUSED T } EOLIAN -Eina_Bool _test_testing_struct_complex_ptr_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructComplex *complex) +Eina_Bool _dummy_test_object_struct_complex_ptr_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructComplex *complex) { (void) complex; EINA_LOG_ERR("Not implemented!"); @@ -3543,7 +3545,7 @@ Eina_Bool _test_testing_struct_complex_ptr_in_own(EINA_UNUSED Eo *obj, EINA_UNUS } EOLIAN -Eina_Bool _test_testing_struct_complex_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructComplex *complex) +Eina_Bool _dummy_test_object_struct_complex_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructComplex *complex) { if (!complex) { @@ -3557,7 +3559,7 @@ Eina_Bool _test_testing_struct_complex_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test } EOLIAN -Eina_Bool _test_testing_struct_complex_ptr_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructComplex **complex) +Eina_Bool _dummy_test_object_struct_complex_ptr_out(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructComplex **complex) { (void) complex; EINA_LOG_ERR("Not implemented!"); @@ -3565,7 +3567,7 @@ Eina_Bool _test_testing_struct_complex_ptr_out(EINA_UNUSED Eo *obj, EINA_UNUSED } EOLIAN -Eina_Bool _test_testing_struct_complex_ptr_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructComplex **complex) +Eina_Bool _dummy_test_object_struct_complex_ptr_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructComplex **complex) { (void) complex; EINA_LOG_ERR("Not implemented!"); @@ -3573,22 +3575,22 @@ Eina_Bool _test_testing_struct_complex_ptr_out_own(EINA_UNUSED Eo *obj, EINA_UNU } EOLIAN -Test_StructComplex _test_testing_struct_complex_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructComplex _dummy_test_object_struct_complex_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { - Test_StructComplex complex = {0,}; + Dummy_StructComplex complex = {0,}; struct_complex_with_values(&complex); return complex; } EOLIAN -Test_StructComplex* _test_testing_struct_complex_ptr_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructComplex* _dummy_test_object_struct_complex_ptr_return(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { EINA_LOG_ERR("Not implemented!"); return NULL; } EOLIAN -Test_StructComplex* _test_testing_struct_complex_ptr_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) +Dummy_StructComplex* _dummy_test_object_struct_complex_ptr_return_own(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) { EINA_LOG_ERR("Not implemented!"); return NULL; @@ -3598,7 +3600,7 @@ Test_StructComplex* _test_testing_struct_complex_ptr_return_own(EINA_UNUSED Eo * // Class constructor // // EOLIAN static void -_test_testing_class_constructor(Efl_Class *klass) +_dummy_test_object_class_constructor(Efl_Class *klass) { (void)klass; modified_seq_obj[0] = base_seq_obj[0] = _new_obj(0x0); @@ -3610,7 +3612,7 @@ _test_testing_class_constructor(Efl_Class *klass) } EOLIAN static void -_test_testing_class_destructor(Efl_Class *klass) +_dummy_test_object_class_destructor(Efl_Class *klass) { (void)klass; for (unsigned i = 0; i < base_seq_obj_size; ++i) @@ -3625,17 +3627,17 @@ _test_testing_class_destructor(Efl_Class *klass) // ################## // -void _test_numberwrapper_number_set(EINA_UNUSED Eo *obj, Test_Numberwrapper_Data *pd, int n) +void _dummy_numberwrapper_number_set(EINA_UNUSED Eo *obj, Dummy_Numberwrapper_Data *pd, int n) { pd->number = n; } -int _test_numberwrapper_number_get(EINA_UNUSED const Eo *obj, Test_Numberwrapper_Data *pd) +int _dummy_numberwrapper_number_get(EINA_UNUSED const Eo *obj, Dummy_Numberwrapper_Data *pd) { return pd->number; } -void _test_testing_set_value_ptr(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Value *value) +void _dummy_test_object_set_value_ptr(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value *value) { if (pd->stored_value) { eina_value_free(pd->stored_value); @@ -3647,7 +3649,7 @@ void _test_testing_set_value_ptr(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Ein eina_value_copy(value, pd->stored_value); } -void _test_testing_set_value_ptr_own(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Value *value) +void _dummy_test_object_set_value_ptr_own(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value *value) { if (pd->stored_value) { eina_value_free(pd->stored_value); @@ -3657,7 +3659,7 @@ void _test_testing_set_value_ptr_own(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, pd->stored_value = value; } -void _test_testing_set_value(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Value value) +void _dummy_test_object_set_value(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value value) { if (pd->stored_value) { eina_value_free(pd->stored_value); @@ -3667,24 +3669,24 @@ void _test_testing_set_value(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Va eina_value_copy(&value, pd->stored_value); } -void _test_testing_call_set_value(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const Eina_Value v) +void _dummy_test_object_call_set_value(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const Eina_Value v) { - test_testing_set_value(obj, v); + dummy_test_object_set_value(obj, v); } -Eina_Value *_test_testing_get_value_ptr_own(EINA_UNUSED Eo *obj, Test_Testing_Data *pd) +Eina_Value *_dummy_test_object_get_value_ptr_own(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd) { Eina_Value *val = pd->stored_value; pd->stored_value = NULL; return val; } -Eina_Value *_test_testing_get_value_ptr(EINA_UNUSED Eo *obj, Test_Testing_Data *pd) +Eina_Value *_dummy_test_object_get_value_ptr(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd) { return pd->stored_value; } -void _test_testing_clear_value(EINA_UNUSED Eo *obj, Test_Testing_Data *pd) +void _dummy_test_object_clear_value(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd) { if (pd->stored_value) { eina_value_free(pd->stored_value); @@ -3692,124 +3694,124 @@ void _test_testing_clear_value(EINA_UNUSED Eo *obj, Test_Testing_Data *pd) } } -void _test_testing_out_value_ptr(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Value **value) +void _dummy_test_object_out_value_ptr(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value **value) { *value = pd->stored_value; } -void _test_testing_out_value_ptr_own(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Value **value) +void _dummy_test_object_out_value_ptr_own(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value **value) { *value = pd->stored_value; pd->stored_value = NULL; } -void _test_testing_out_value(EINA_UNUSED Eo *obj, Test_Testing_Data *pd, Eina_Value *value) +void _dummy_test_object_out_value(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd, Eina_Value *value) { *value = *pd->stored_value; } -void _test_testing_emit_event_with_string(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, const char *data) +void _dummy_test_object_emit_event_with_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char *data) { char *ptr = strdup(data); - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_STRING, ptr); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_STRING, ptr); free(ptr); } -void _test_testing_emit_event_with_bool(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Bool data) +void _dummy_test_object_emit_event_with_bool(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Bool data) { - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_BOOL, (void *) (uintptr_t) data); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_BOOL, (void *) (uintptr_t) data); } -void _test_testing_emit_event_with_int(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, int data) +void _dummy_test_object_emit_event_with_int(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, int data) { - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_INT, (void *) (uintptr_t) data); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_INT, (void *) (uintptr_t) data); } -void _test_testing_emit_event_with_uint(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, unsigned int data) +void _dummy_test_object_emit_event_with_uint(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, unsigned int data) { - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_UINT, (void *) (uintptr_t) data); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_UINT, (void *) (uintptr_t) data); } -void _test_testing_emit_event_with_obj(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eo *data) +void _dummy_test_object_emit_event_with_obj(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eo *data) { - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_OBJ, data); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_OBJ, data); } -void _test_testing_emit_event_with_error(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Error data) +void _dummy_test_object_emit_event_with_error(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Error data) { - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_ERROR, &data); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_ERROR, &data); } -void _test_testing_emit_event_with_struct(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_StructSimple data) +void _dummy_test_object_emit_event_with_struct(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_StructSimple data) { - efl_event_callback_legacy_call(obj, TEST_TESTING_EVENT_EVT_WITH_STRUCT, &data); + efl_event_callback_legacy_call(obj, DUMMY_TEST_OBJECT_EVENT_EVT_WITH_STRUCT, &data); } -Efl_Object *_test_testing_efl_part_part_get(EINA_UNUSED const Eo *obj, Test_Testing_Data *pd, const char *name) +Efl_Object *_dummy_test_object_efl_part_part_get(EINA_UNUSED const Eo *obj, Dummy_Test_Object_Data *pd, const char *name) { - if (!strcmp(name, "part1")) - return pd->part1; - else if (!strcmp(name, "part2")) - return pd->part2; + if (!strcmp(name, "part_one")) + return pd->part_one; + else if (!strcmp(name, "part_two")) + return pd->part_two; else return NULL; } -void _test_testing_append_to_strbuf(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Strbuf *buf, const char *str) +void _dummy_test_object_append_to_strbuf(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Strbuf *buf, const char *str) { eina_strbuf_append(buf, str); } -void _test_testing_call_append_to_strbuf(Eo * obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Strbuf *buf, const char *str) +void _dummy_test_object_call_append_to_strbuf(Eo * obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Strbuf *buf, const char *str) { - test_testing_append_to_strbuf(obj, buf, str); + dummy_test_object_append_to_strbuf(obj, buf, str); } -void _test_testing_call_format_cb(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Strbuf *buf, const Eina_Value value, - void *func_data, Test_FormatCb func, Eina_Free_Cb func_free_cb) +void _dummy_test_object_call_format_cb(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Strbuf *buf, const Eina_Value value, + void *func_data, Dummy_FormatCb func, Eina_Free_Cb func_free_cb) { func(func_data, buf, value); func_free_cb(func_data); } -Test_MyInt _test_testing_bypass_typedef(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Test_MyInt data, Test_MyInt *receiver) +Dummy_MyInt _dummy_test_object_bypass_typedef(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Dummy_MyInt data, Dummy_MyInt *receiver) { *receiver = data; return data; } /* Class Properties */ -static int _test_testing_klass_prop = 0; +static int _dummy_test_object_klass_prop = 0; -int _test_testing_klass_prop_get(const Eo *klass, EINA_UNUSED void *pd) +int _dummy_test_object_klass_prop_get(const Eo *klass, EINA_UNUSED void *pd) { EINA_LOG_ERR("FAIL on GET"); - if (klass != test_testing_class_get()) + if (klass != dummy_test_object_class_get()) { eina_error_set(EINVAL); return -1; } - return _test_testing_klass_prop; + return _dummy_test_object_klass_prop; } -void _test_testing_klass_prop_set(Eo *klass, EINA_UNUSED void *pd, int value) +void _dummy_test_object_klass_prop_set(Eo *klass, EINA_UNUSED void *pd, int value) { EINA_LOG_ERR("FAIL on SET"); - if (klass != test_testing_class_get()) + if (klass != dummy_test_object_class_get()) { eina_error_set(EINVAL); } - _test_testing_klass_prop = value; + _dummy_test_object_klass_prop = value; } static void _promise_cancelled(void *data, EINA_UNUSED const Eina_Promise *p) { - Test_Testing_Data *pd = data; + Dummy_Test_Object_Data *pd = data; pd->promise = NULL; } -Eina_Future* _test_testing_get_future(EINA_UNUSED Eo *obj, Test_Testing_Data *pd) +Eina_Future* _dummy_test_object_get_future(EINA_UNUSED Eo *obj, Dummy_Test_Object_Data *pd) { if (pd->promise == NULL) { @@ -3820,7 +3822,7 @@ Eina_Future* _test_testing_get_future(EINA_UNUSED Eo *obj, Test_Testing_Data *pd return eina_future_new(pd->promise); } -void _test_testing_fulfill_promise(Eo *obj, Test_Testing_Data *pd, int data) +void _dummy_test_object_fulfill_promise(Eo *obj, Dummy_Test_Object_Data *pd, int data) { if (pd->promise == NULL) { @@ -3833,7 +3835,7 @@ void _test_testing_fulfill_promise(Eo *obj, Test_Testing_Data *pd, int data) eina_promise_resolve(pd->promise, v); } -void _test_testing_reject_promise(Eo *obj, Test_Testing_Data *pd, Eina_Error err) +void _dummy_test_object_reject_promise(Eo *obj, Dummy_Test_Object_Data *pd, Eina_Error err) { if (pd->promise == NULL) { @@ -3844,7 +3846,7 @@ void _test_testing_reject_promise(Eo *obj, Test_Testing_Data *pd, Eina_Error err eina_promise_reject(pd->promise, err); } -Eina_Accessor *_test_testing_clone_accessor(Eo *obj, Test_Testing_Data *pd, Eina_Accessor *acc) +Eina_Accessor *_dummy_test_object_clone_accessor(Eo *obj, Dummy_Test_Object_Data *pd, Eina_Accessor *acc) { if (pd->list_for_accessor) eina_list_free(pd->list_for_accessor); @@ -3859,6 +3861,25 @@ Eina_Accessor *_test_testing_clone_accessor(Eo *obj, Test_Testing_Data *pd, Eina return eina_list_accessor_new(pd->list_for_accessor); } -#include "test_testing.eo.c" -#include "test_numberwrapper.eo.c" +void _dummy_test_object_dummy_test_iface_emit_test_conflicted(Eo *obj, Dummy_Test_Object_Data *pd) +{ + efl_event_callback_legacy_call(obj, DUMMY_TEST_IFACE_EVENT_CONFLICTED, NULL); +} + +void _dummy_test_object_dummy_test_iface_emit_nonconflicted(Eo *obj, Dummy_Test_Object_Data *pd) +{ + efl_event_callback_legacy_call(obj, DUMMY_TEST_IFACE_EVENT_NONCONFLICTED, NULL); +} + +void _dummy_test_object_dummy_another_iface_emit_another_conflicted(Eo *obj, Dummy_Test_Object_Data *pd) +{ + efl_event_callback_legacy_call(obj, DUMMY_ANOTHER_IFACE_EVENT_CONFLICTED, NULL); +} + + + +#include "dummy_test_object.eo.c" +#include "dummy_numberwrapper.eo.c" +#include "dummy_test_iface.eo.c" +#include "dummy_another_iface.eo.c" diff --git a/src/tests/efl_mono/meson.build b/src/tests/efl_mono/meson.build index 9d0b7187cc..975bb868e4 100644 --- a/src/tests/efl_mono/meson.build +++ b/src/tests/efl_mono/meson.build @@ -1,4 +1,4 @@ -eo_files = ['test_child.eo', 'test_numberwrapper.eo', 'test_testing.eo'] +eo_files = ['dummy_child.eo', 'dummy_numberwrapper.eo', 'dummy_test_object.eo', 'dummy_test_iface.eo', 'dummy_another_iface.eo'] eo_file_targets = [] From edd15560c390ac6ba336b3ec73725fe5adb03993 Mon Sep 17 00:00:00 2001 From: Vitor Sousa Date: Tue, 6 Nov 2018 10:10:13 -0200 Subject: [PATCH 09/86] ecore: fix efl_model_container_private.h include guards --- src/lib/ecore/efl_model_container_private.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore/efl_model_container_private.h b/src/lib/ecore/efl_model_container_private.h index 993a2ac45a..b1fe4c2245 100644 --- a/src/lib/ecore/efl_model_container_private.h +++ b/src/lib/ecore/efl_model_container_private.h @@ -1,5 +1,5 @@ -#ifndef EFL_MODEL_PRIVATE_H__ -# define EFL_MODEL_PRIVATE_H__ +#ifndef EFL_MODEL_CONTAINER_PRIVATE_H__ +#define EFL_MODEL_CONTAINER_PRIVATE_H__ typedef struct _Child_Property_Data Child_Property_Data; struct _Child_Property_Data From 5ac5ca9af6b7e52f33fa0c99a276df9ce7038d11 Mon Sep 17 00:00:00 2001 From: Vitor Sousa Date: Tue, 6 Nov 2018 10:42:11 -0200 Subject: [PATCH 10/86] ecore: forward internal Efl.Model events to Efl.Model.Composite --- src/lib/ecore/efl_model_composite.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore/efl_model_composite.c b/src/lib/ecore/efl_model_composite.c index dfb3019cbd..225f83d647 100644 --- a/src/lib/ecore/efl_model_composite.c +++ b/src/lib/ecore/efl_model_composite.c @@ -20,8 +20,16 @@ struct _Efl_Model_Composite_Data static void _efl_model_composite_efl_object_destructor(Eo *obj, Efl_Model_Composite_Data *pd) { - efl_unref(pd->source); - pd->source = NULL; + if (pd->source) + { + efl_event_callback_forwarder_del(pd->source, EFL_MODEL_EVENT_CHILD_ADDED, obj); + efl_event_callback_forwarder_del(pd->source, EFL_MODEL_EVENT_CHILD_REMOVED, obj); + efl_event_callback_forwarder_del(pd->source, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, obj); + efl_event_callback_forwarder_del(pd->source, EFL_MODEL_EVENT_PROPERTIES_CHANGED, obj); + + efl_unref(pd->source); + pd->source = NULL; + } efl_destructor(efl_super(obj, EFL_MODEL_COMPOSITE_CLASS)); } @@ -47,6 +55,11 @@ _efl_model_composite_efl_ui_view_model_set(Eo *obj EINA_UNUSED, Efl_Model_Compos return ; } pd->source = efl_ref(model); + + efl_event_callback_forwarder_add(model, EFL_MODEL_EVENT_CHILD_ADDED, obj); + efl_event_callback_forwarder_add(model, EFL_MODEL_EVENT_CHILD_REMOVED, obj); + efl_event_callback_forwarder_add(model, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, obj); + efl_event_callback_forwarder_add(model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, obj); } static Efl_Model * From 03cb1ebae522e4251157609b99750de989d61036 Mon Sep 17 00:00:00 2001 From: Vitor Sousa Date: Tue, 6 Nov 2018 10:42:36 -0200 Subject: [PATCH 11/86] ecore: fix bugs from composite models Fix type error while getting boolean property from Efl.Model_Composite_Boolean. Fix properties_get methods for all composite models. Now properly call property.changed events when it is needed. Use EINA_VALUE_TYPE_BOOL instead of EINA_VALUE_TYPE_UCHAR. Remove some memory leaks. --- src/Makefile_Ecore.am | 1 + src/lib/ecore/efl_model_composite_boolean.c | 34 ++++++++-------- src/lib/ecore/efl_model_composite_private.h | 39 +++++++++++++++++++ src/lib/ecore/efl_model_composite_selection.c | 28 +++++++++++++ .../ecore/efl_model_composite_selection.eo | 1 + .../efl_model_composite_selection_children.eo | 2 + src/lib/ecore/meson.build | 1 + 7 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 src/lib/ecore/efl_model_composite_private.h diff --git a/src/Makefile_Ecore.am b/src/Makefile_Ecore.am index 5b7c664687..ff23d05680 100644 --- a/src/Makefile_Ecore.am +++ b/src/Makefile_Ecore.am @@ -126,6 +126,7 @@ lib/ecore/efl_model_container_private.h \ lib/ecore/efl_model_composite.c \ lib/ecore/efl_model_composite_boolean.c \ lib/ecore/efl_model_composite_selection.c \ +lib/ecore/efl_model_composite_private.h \ lib/ecore/efl_model_accessor_view.c \ lib/ecore/efl_model_accessor_view_private.h \ lib/ecore/efl_linear_interpolator.c \ diff --git a/src/lib/ecore/efl_model_composite_boolean.c b/src/lib/ecore/efl_model_composite_boolean.c index cb52e85328..e710091288 100644 --- a/src/lib/ecore/efl_model_composite_boolean.c +++ b/src/lib/ecore/efl_model_composite_boolean.c @@ -5,6 +5,7 @@ #include #include "efl_model_composite_boolean_children.eo.h" +#include "efl_model_composite_private.h" typedef struct _Efl_Model_Composite_Boolean_Data Efl_Model_Composite_Boolean_Data; typedef struct _Efl_Model_Composite_Boolean_Children_Data Efl_Model_Composite_Boolean_Children_Data; @@ -71,16 +72,11 @@ static Eina_Iterator * _efl_model_composite_boolean_children_efl_model_properties_get(const Eo *obj, Efl_Model_Composite_Boolean_Children_Data *pd) { - Eina_Iterator *its; - Eina_Iterator *itr; - - its = efl_model_properties_get(efl_super(obj, EFL_MODEL_COMPOSITE_BOOLEAN_CHILDREN_CLASS)); - itr = eina_hash_iterator_key_new(pd->parent->values); - - if (!its) return itr; - if (!itr) return its; - - return eina_multi_iterator_new(its, itr); + EFL_MODEL_COMPOSITE_PROPERTIES_SUPER(props, + obj, EFL_MODEL_COMPOSITE_BOOLEAN_CHILDREN_CLASS, + eina_hash_iterator_key_new(pd->parent->values), + "child.index"); + return props; } static Eina_Value * @@ -109,9 +105,9 @@ _efl_model_composite_boolean_children_efl_model_property_get(const Eo *obj, if ((pd->index >> 3) >= v->buffer_count) flag = v->default_value; else - flag = v->buffer[pd->index >> 3] & (1 << pd->index & 0x7); + flag = v->buffer[pd->index >> 3] & (((unsigned char)1) << (pd->index & 0x7)); - return eina_value_uchar_new(!!flag); + return eina_value_bool_new(!!flag); } static Eina_Future * @@ -139,7 +135,7 @@ _efl_model_composite_boolean_children_efl_model_property_set(Eo *obj, return efl_model_property_set(efl_super(obj, EFL_MODEL_COMPOSITE_BOOLEAN_CHILDREN_CLASS), property, value); - eina_value_setup(&b, EINA_VALUE_TYPE_UCHAR); + eina_value_setup(&b, EINA_VALUE_TYPE_BOOL); if (!eina_value_convert(value, &b)) return eina_future_rejected(efl_loop_future_scheduler_get(obj), EFL_MODEL_ERROR_UNKNOWN); @@ -165,12 +161,16 @@ _efl_model_composite_boolean_children_efl_model_property_set(Eo *obj, // It is assumed that during slice get the buffer is properly sized if (flag) - v->buffer[pd->index >> 3] |= 1 << (pd->index & 0x7); + v->buffer[pd->index >> 3] |= ((unsigned char)1) << (pd->index & 0x7); else - v->buffer[pd->index >> 3] &= ~(1 << (pd->index & 0x7)); + v->buffer[pd->index >> 3] &= ~(((unsigned char)1) << (pd->index & 0x7)); + // Calling "properties,changed" event + efl_model_properties_changed(obj, property); + + // Return fulfilled future return eina_future_resolved(efl_loop_future_scheduler_get(obj), - eina_value_uchar_init(!!flag)); + eina_value_bool_init(!!flag)); } /**************** efl_model_composite_boolean **************/ @@ -225,6 +225,8 @@ _boolean_value_free(void *data) free(value->buffer); value->buffer = NULL; value->buffer_count = 0; + + free(value); } static Eo * diff --git a/src/lib/ecore/efl_model_composite_private.h b/src/lib/ecore/efl_model_composite_private.h new file mode 100644 index 0000000000..eb9b07b47c --- /dev/null +++ b/src/lib/ecore/efl_model_composite_private.h @@ -0,0 +1,39 @@ + +#define EFL_MODEL_COMPOSITE_PROPERTIES(name, dyn, sta, ...) \ + EFL_MODEL_COMPOSITE_PROPERTIES_SUPER(name, NULL, NULL, (dyn), sta, ##__VA_ARGS__) + +#define EFL_MODEL_COMPOSITE_PROPERTIES_SUPER(name, obj, klass, dyn, sta, ...) \ + Eina_Iterator *name; \ + do \ + { \ + static const char *static_props__[] = { \ + sta, \ + ##__VA_ARGS__ \ + }; \ + name = _efl_model_composite_properties_mix( \ + ((obj) ? efl_model_properties_get(efl_super((obj), (klass))) : NULL), \ + (dyn), \ + EINA_C_ARRAY_ITERATOR_NEW(static_props__)); \ + } \ + while (0) + + +static inline Eina_Iterator * +_efl_model_composite_properties_mix(Eina_Iterator *super, Eina_Iterator *dyn, Eina_Iterator *sta) +{ + Eina_Iterator *its[3]; + int i = 0; + + if (sta) its[i++] = sta; + if (dyn) its[i++] = dyn; + if (super) its[i++] = super; + + switch (i) + { + case 1: return its[0]; + case 2: return eina_multi_iterator_new(its[0], its[1]); + case 3: return eina_multi_iterator_new(its[0], its[1], its[2]); + default: return NULL; + }; +} + diff --git a/src/lib/ecore/efl_model_composite_selection.c b/src/lib/ecore/efl_model_composite_selection.c index 622d183b60..cb35c0f0ce 100644 --- a/src/lib/ecore/efl_model_composite_selection.c +++ b/src/lib/ecore/efl_model_composite_selection.c @@ -9,6 +9,7 @@ #include "efl_model_composite_selection.eo.h" #include "efl_model_accessor_view_private.h" +#include "efl_model_composite_private.h" typedef struct _Efl_Model_Composite_Selection_Data Efl_Model_Composite_Selection_Data; typedef struct _Efl_Model_Composite_Selection_Children_Data Efl_Model_Composite_Selection_Children_Data; @@ -186,6 +187,17 @@ _unselect_slice_then(void *data EINA_UNUSED, return v; } +static Eina_Iterator * +_efl_model_composite_selection_efl_model_properties_get(const Eo *obj, + Efl_Model_Composite_Selection_Data *pd EINA_UNUSED) +{ + EFL_MODEL_COMPOSITE_PROPERTIES_SUPER(props, + obj, EFL_MODEL_COMPOSITE_SELECTION_CLASS, + NULL, + "selected", "exclusive"); + return props; +} + static Eina_Future * _efl_model_composite_selection_efl_model_property_set(Eo *obj, Efl_Model_Composite_Selection_Data *pd, @@ -196,13 +208,18 @@ _efl_model_composite_selection_efl_model_property_set(Eo *obj, if (!strcmp("exclusive", property)) { Eina_Bool exclusive = pd->exclusive; + Eina_Bool changed; vf = eina_value_bool_init(exclusive); eina_value_convert(value, &vf); eina_value_bool_get(&vf, &exclusive); + changed = (!pd->exclusive != !exclusive); pd->exclusive = !!exclusive; + if (changed) + efl_model_properties_changed(obj, "exclusive"); + return eina_future_resolved(efl_loop_future_scheduler_get(obj), vf); } @@ -291,6 +308,17 @@ _untangle_array(void *data, return va; } +static Eina_Iterator * +_efl_model_composite_selection_children_efl_model_properties_get(const Eo *obj, + Efl_Model_Composite_Selection_Children_Data *pd EINA_UNUSED) +{ + EFL_MODEL_COMPOSITE_PROPERTIES_SUPER(props, + obj, EFL_MODEL_COMPOSITE_SELECTION_CHILDREN_CLASS, + NULL, + "selected"); + return props; +} + static Eina_Future * _efl_model_composite_selection_children_efl_model_property_set(Eo *obj, Efl_Model_Composite_Selection_Children_Data *pd EINA_UNUSED, diff --git a/src/lib/ecore/efl_model_composite_selection.eo b/src/lib/ecore/efl_model_composite_selection.eo index 782a928a64..fca9b9c2ba 100644 --- a/src/lib/ecore/efl_model_composite_selection.eo +++ b/src/lib/ecore/efl_model_composite_selection.eo @@ -5,6 +5,7 @@ class Efl.Model_Composite_Selection (Efl.Model_Composite_Boolean) Efl.Object.constructor; Efl.Model.children_slice_get; Efl.Model.property { get; set; } + Efl.Model.properties { get; } } events { /* FIXME: The object is emitted in the event_info. This is redundant. */ diff --git a/src/lib/ecore/efl_model_composite_selection_children.eo b/src/lib/ecore/efl_model_composite_selection_children.eo index f3a9bd826e..ef2af4d465 100644 --- a/src/lib/ecore/efl_model_composite_selection_children.eo +++ b/src/lib/ecore/efl_model_composite_selection_children.eo @@ -3,5 +3,7 @@ class Efl.Model_Composite_Selection_Children (Efl.Model_Composite_Boolean_Childr [[Efl model composite selection children class]] implements { Efl.Model.property { set; } + Efl.Model.properties { get; } } + /* FIXME: emitting Efl.Model_Composite_Selection.Selected. Use a default selection event! */ } diff --git a/src/lib/ecore/meson.build b/src/lib/ecore/meson.build index 96ad59b98c..cfa6609666 100644 --- a/src/lib/ecore/meson.build +++ b/src/lib/ecore/meson.build @@ -153,6 +153,7 @@ ecore_src = [ 'efl_model_composite.c', 'efl_model_composite_boolean.c', 'efl_model_composite_selection.c', + 'efl_model_composite_private.h', 'efl_model_accessor_view.c', 'efl_model_accessor_view_private.h', 'efl_linear_interpolator.c', From 5a68a63ab7df244cec2e8ac34fa88f7b31150bb9 Mon Sep 17 00:00:00 2001 From: Shinwoo Kim Date: Thu, 23 Aug 2018 05:56:58 +0000 Subject: [PATCH 12/86] evas cache image: compare with cached image file As cache2 knows cached image could be not matched even though hash key is not different. Please refer to the following comment of evas_cache2_image_open. /* image we found doesn't match what's on disk (stat info wise) * so dirty the active cache entry so we never find it again. this * also implicitly guarantees that we only have 1 active copy * of an image at a given key. we wither find it and keep re-reffing * it or we dirty it and get it out */ The hash key is created base on the image file address. If the image file address to find does not equal cached image file address then it means that the cached image is no longer valid. This case could happen with the following step. (1) Call evas_object_image_memfile_set with content data A (2) Call evas_object_image_memfile_set with content data B (3) Add timer with short time (ex: 0.01 sec) (4) Delete A image, and add A image in timer callback (5) Delete B image, and add B image in timer callback Sometimes you could see image of A from the B image, because newly created image at step 5 has same address of setp 1. Reviewed-by: Cedric BAIL Differential Revision: https://phab.enlightenment.org/D6870 --- src/lib/evas/cache/evas_cache_image.c | 46 ++++++++---- src/tests/evas/evas_test_image.c | 103 ++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 16 deletions(-) diff --git a/src/lib/evas/cache/evas_cache_image.c b/src/lib/evas/cache/evas_cache_image.c index 52447df9d0..adc38a86ec 100644 --- a/src/lib/evas/cache/evas_cache_image.c +++ b/src/lib/evas/cache/evas_cache_image.c @@ -796,28 +796,42 @@ evas_cache_image_mmap_request(Evas_Cache_Image *cache, /* find image by key in active mmap hash */ SLKL(engine_lock); im = eina_hash_find(cache->mmap_activ, hkey); - if ((im) && (!im->load_failed)) goto on_ok; - else if ((im) && (im->load_failed)) + if (im) { - _evas_cache_image_dirty_add(im); - im = NULL; + if (im->f != f) + { + /* as active cache find - if we match in lru and its invalid, dirty */ + _evas_cache_image_dirty_add(im); + /* this image never used, so it have to be deleted */ + _evas_cache_image_entry_delete(cache, im); + im = NULL; + } + else if (!im->load_failed) goto on_ok; + else if (im->load_failed) + { + _evas_cache_image_dirty_add(im); + im = NULL; + } } /* find image by key in inactive/lru hash */ im = eina_hash_find(cache->mmap_inactiv, hkey); - if ((im) && (!im->load_failed)) + if (im) { - _evas_cache_image_lru_del(im); - _evas_cache_image_activ_add(im); - goto on_ok; - } - else if ((im) && (im->load_failed)) - { - /* as active cache find - if we match in lru and its invalid, dirty */ - _evas_cache_image_dirty_add(im); - /* this image never used, so it have to be deleted */ - _evas_cache_image_entry_delete(cache, im); - im = NULL; + if (im->f != f) + { + /* as active cache find - if we match in lru and its invalid, dirty */ + _evas_cache_image_dirty_add(im); + /* this image never used, so it have to be deleted */ + _evas_cache_image_entry_delete(cache, im); + im = NULL; + } + else if (!im->load_failed) + { + _evas_cache_image_lru_del(im); + _evas_cache_image_activ_add(im); + goto on_ok; + } } im = _evas_cache_image_entry_new(cache, hkey, NULL, f, NULL, key, lo, error); diff --git a/src/tests/evas/evas_test_image.c b/src/tests/evas/evas_test_image.c index bbe64654af..9e7da26b16 100644 --- a/src/tests/evas/evas_test_image.c +++ b/src/tests/evas/evas_test_image.c @@ -627,6 +627,108 @@ EFL_START_TEST(evas_object_image_partially_load_orientation) } EFL_END_TEST +static int +_file_to_memory(const char *filename, char **result) +{ + int size; + FILE *f; + + f = fopen(filename, "rb"); + if (f == NULL) + { + *result = NULL; + return -1; + } + + fseek(f, 0, SEEK_END); + size = ftell(f); + fseek(f, 0, SEEK_SET); + *result = (char *)malloc(size + 1); + if ((size_t)size != fread(*result, sizeof(char), size, f)) + { + free(*result); + return -1; + } + fclose(f); + (*result)[size] = 0; + return size; +} + +EFL_START_TEST(evas_object_image_cached_data_comparision) +{ + int i; + int size, size2; + char *content, *content2; + int w, h, n_w, n_h; + int w2, h2, n_w2, n_h2; + const uint32_t *d, *n_d; + const uint32_t *d2, *n_d2; + const char *img_path, *img_path2; + Evas_Object *img, *img2; + + Evas *e = _setup_evas(); + + img_path = TESTS_IMG_DIR "/Pic1.png"; + size = _file_to_memory(img_path, &content); + fail_if(size < 0); + + img = evas_object_image_add(e); + evas_object_image_memfile_set(img, content, size, "png", NULL); + evas_object_image_fill_set(img, 0, 0, 250, 250); + evas_object_resize(img, 250, 250); + evas_object_move(img, 0, 0); + evas_object_show(img); + + evas_object_image_size_get(img, &w, &h); + d = evas_object_image_data_get(img, EINA_FALSE); + + img_path2 = TESTS_IMG_DIR "/Pic4.png"; + size2 = _file_to_memory(img_path2, &content2); + + img2 = evas_object_image_add(e); + evas_object_image_memfile_set(img2, content2, size2, "png", NULL); + evas_object_image_fill_set(img2, 0, 0, 250, 250); + evas_object_resize(img2, 250, 250); + evas_object_move(img2, 250, 250); + evas_object_show(img2); + + evas_object_image_size_get(img, &w2, &h2); + d2 = evas_object_image_data_get(img, EINA_FALSE); + + for (i = 0; i < 100; i++) + { + evas_object_del(img); + evas_object_del(img2); + + img = evas_object_image_add(e); + evas_object_image_memfile_set(img, content, size, "png", NULL); + evas_object_image_fill_set(img, 0, 0, 250, 250); + evas_object_resize(img, 250, 250); + evas_object_move(img, 0, 0); + evas_object_show(img); + + evas_object_image_size_get(img, &n_w, &n_h); + n_d = evas_object_image_data_get(img, EINA_FALSE); + + fail_if(w != n_w || h != n_h); + fail_if(memcmp(d, n_d, w * h * 4)); + + img2 = evas_object_image_add(e); + evas_object_image_memfile_set(img2, content2, size2, "png", NULL); + evas_object_image_fill_set(img2, 0, 0, 250, 250); + evas_object_resize(img2, 250, 250); + evas_object_move(img2, 250, 250); + evas_object_show(img2); + + evas_object_image_size_get(img, &n_w2, &n_h2); + n_d2 = evas_object_image_data_get(img, EINA_FALSE); + + fail_if(w2 != n_w2 || h2 != n_h2); + fail_if(memcmp(d2, n_d2, w2 * h2 * 4)); + } +} +EFL_END_TEST + EFL_START_TEST(evas_object_image_defaults) { Evas *e = _setup_evas(); @@ -891,6 +993,7 @@ void evas_test_image_object(TCase *tc) tcase_add_test(tc, evas_object_image_map_unmap); #endif tcase_add_test(tc, evas_object_image_partially_load_orientation); + tcase_add_test(tc, evas_object_image_cached_data_comparision); } From 33b8e5157a25b73a0729055ecd22b17e97781e11 Mon Sep 17 00:00:00 2001 From: Youngbok Shin Date: Wed, 22 Aug 2018 01:53:11 +0000 Subject: [PATCH 13/86] eina: add locale-independent eina_convert_strtod_c function strtod's behavior is changed by system locale. http://man7.org/linux/man-pages/man3/strtod.3.html https://en.wikipedia.org/wiki/Decimal_separator Because of this, strtod(0.5) returns 0.0 in some locales. When a given value string is locale-independent, strtod has to be replaced to eina_convert_strtod_c function. Internally, it calls strtod_l function with "C" locale. @feature Reviewed-by: Cedric BAIL Reviewed-by: Vincent Torri Differential Revision: https://phab.enlightenment.org/D6644 --- src/lib/eina/eina_convert.c | 10 ++++++++++ src/lib/eina/eina_convert.h | 16 ++++++++++++++++ src/lib/eina/eina_main.c | 19 +++++++++++++++++++ src/lib/eina/eina_private.h | 6 ++++++ src/tests/eina/eina_test_convert.c | 21 +++++++++++++++++++++ 5 files changed, 72 insertions(+) diff --git a/src/lib/eina/eina_convert.c b/src/lib/eina/eina_convert.c index 2943b37343..152ef5be4a 100644 --- a/src/lib/eina/eina_convert.c +++ b/src/lib/eina/eina_convert.c @@ -453,6 +453,16 @@ eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) return EINA_TRUE; } +EAPI double +eina_convert_strtod_c(const char *nptr, char **endptr) +{ +#ifdef _WIN32 + return _strtod_l(nptr, endptr, _eina_c_locale_get()); +#else + return strtod_l(nptr, endptr, _eina_c_locale_get()); +#endif +} + /** * @} */ diff --git a/src/lib/eina/eina_convert.h b/src/lib/eina/eina_convert.h index 026fc6c8f6..337cd88ad8 100644 --- a/src/lib/eina/eina_convert.h +++ b/src/lib/eina/eina_convert.h @@ -333,6 +333,22 @@ EAPI Eina_Bool eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3); +/** + * @brief Converts a string to a floating point number. + * + * @param[in] nptr a string to convert. It shouldn't be NULL. + * @param[out] endptr If endptr is not NULL, a pointer to the character after the last + * character used in the conversion is stored in the location referenced + * by endptr. + * @return a double type floating point number. + * + * This function returns converted floating point number with locale-independency. + * Actually, it use "C" locale for strtod_l function internally. If you need strtod + * without locale-dependency, this function can replace strtod. + * For more information, please refer documents of strtod, strtod_l. + */ +EAPI double eina_convert_strtod_c(const char *nptr, char **endptr); + /** * @} */ diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c index 024d1e3eaa..535e4e7611 100644 --- a/src/lib/eina/eina_main.c +++ b/src/lib/eina/eina_main.c @@ -85,6 +85,7 @@ static int _eina_main_count = 0; static int _eina_main_thread_count = 0; #endif static int _eina_log_dom = -1; +static locale_t _eina_c_locale; #ifdef ERR #undef ERR @@ -285,6 +286,12 @@ eina_init(void) if (EINA_LIKELY(_eina_main_count > 0)) return ++_eina_main_count; +#ifdef _WIN32 + _eina_c_locale = _create_locale(LC_ALL, "C"); +#else + _eina_c_locale = newlocale(LC_ALL_MASK, "C", NULL); +#endif + srand(time(NULL)); while (eina_seed == 0) eina_seed = rand(); @@ -348,6 +355,12 @@ eina_init(void) return 1; } +locale_t +_eina_c_locale_get(void) +{ + return _eina_c_locale; +} + EAPI int eina_shutdown(void) { @@ -359,6 +372,12 @@ eina_shutdown(void) _eina_main_count--; if (EINA_UNLIKELY(_eina_main_count == 0)) { +#ifdef _WIN32 + _free_locale(_eina_c_locale); +#else + freelocale(_eina_c_locale); +#endif + eina_log_timing(_eina_log_dom, EINA_LOG_STATE_START, EINA_LOG_STATE_SHUTDOWN); diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h index eab59586c1..be826e0fb0 100644 --- a/src/lib/eina/eina_private.h +++ b/src/lib/eina/eina_private.h @@ -20,6 +20,7 @@ #define EINA_PRIVATE_H_ #include +#include #ifdef _WIN32 # include @@ -151,6 +152,11 @@ Eina_Stringshare *eina_file_sanitize(const char *path); void eina_freeq_main_set(Eina_FreeQ *fq); +#ifdef _WIN32 +typedef _locale_t locale_t; +#endif +locale_t _eina_c_locale_get(void); + #include "eina_inline_private.h" #endif /* EINA_PRIVATE_H_ */ diff --git a/src/tests/eina/eina_test_convert.c b/src/tests/eina/eina_test_convert.c index 1b08a00a19..c8ccfcb772 100644 --- a/src/tests/eina/eina_test_convert.c +++ b/src/tests/eina/eina_test_convert.c @@ -160,10 +160,31 @@ _eina_convert_fp_check(double d, Eina_F32p32 fp, int length) } EFL_END_TEST +static void +_eina_convert_strtod_c_check(const char *str, double expected_result) +{ + double result = eina_convert_strtod_c(str, NULL); + + fail_if(result != expected_result); +} + +EFL_START_TEST(eina_convert_strtod_c_simple) +{ + _eina_convert_strtod_c_check("0.0", 0.0); + _eina_convert_strtod_c_check("0.5", 0.5); + _eina_convert_strtod_c_check("1.0", 1.0); + _eina_convert_strtod_c_check("-0.5", -0.5); + _eina_convert_strtod_c_check("-1.0", -1.0); + _eina_convert_strtod_c_check("3.45e-2", 0.0345); + _eina_convert_strtod_c_check("3.45e+2", 345.0); +} +EFL_END_TEST + void eina_test_convert(TCase *tc) { tcase_add_test(tc, eina_convert_simple); tcase_add_test(tc, eina_convert_double); tcase_add_test(tc, eina_convert_fp); + tcase_add_test(tc, eina_convert_strtod_c_simple); } From b4f9f1b263eca4b71a9b48b16314ee0561378827 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 30 Nov 2018 13:30:15 +0900 Subject: [PATCH 14/86] evas gl: Remove single-line pipe code of gl commands. Summary: GLPIPES is proved to use since it's been used for many years as the default. On the other hand, single-line routine hans't, acutally it's not maintained properly. Even this single-line routine doesn't compileable right moment. This patch is one refactoring to clean up code that's not valuable to maintain. Reviewers: #committers, raster, cedric, ManMower Reviewed By: #committers, ManMower Subscribers: ManMower, cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7328 --- .../evas/engines/gl_common/evas_gl_context.c | 43 +++---------------- 1 file changed, 5 insertions(+), 38 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_context.c b/src/modules/evas/engines/gl_common/evas_gl_context.c index 577d00db9b..2877007f42 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_context.c +++ b/src/modules/evas/engines/gl_common/evas_gl_context.c @@ -8,7 +8,6 @@ #endif #define PRG_INVALID NULL -#define GLPIPES 1 static int tbm_sym_done = 0; int _evas_engine_GL_common_log_dom = -1; @@ -1014,12 +1013,12 @@ evas_gl_common_context_new(void) s = (const char *)glGetString(GL_RENDERER); if (s) { - if (strstr(s, "PowerVR SGX 540")) - shared->info.tune.pipes.max = DEF_PIPES_SGX_540; + if (strstr(s, "PowerVR SGX 540")) + shared->info.tune.pipes.max = DEF_PIPES_SGX_540; else if (strstr(s, "NVIDIA Tegra 3")) - shared->info.tune.pipes.max = DEF_PIPES_TEGRA_3; + shared->info.tune.pipes.max = DEF_PIPES_TEGRA_3; else if (strstr(s, "NVIDIA Tegra")) - shared->info.tune.pipes.max = DEF_PIPES_TEGRA_2; + shared->info.tune.pipes.max = DEF_PIPES_TEGRA_2; } if (!getenv("EVAS_GL_MAPBUFFER")) { @@ -1775,7 +1774,6 @@ _push_mask(Evas_Engine_GL_Context *gc, const int pn, int nm, Evas_GL_Texture *mt _push_mask(gc, pn, nm, mtex, mx, my, mw, mh, msam, nms); \ } while(0) -#ifdef GLPIPES static int pipe_region_intersects(Evas_Engine_GL_Context *gc, int n, int x, int y, int w, int h) @@ -1809,7 +1807,6 @@ pipe_region_intersects(Evas_Engine_GL_Context *gc, int n, } return 0; } -#endif static void pipe_region_expand(Evas_Engine_GL_Context *gc, int n, @@ -1873,12 +1870,10 @@ _evas_gl_common_context_push(Shader_Type rtype, if (tex) current_tex = tex->ptt ? tex->ptt->texture : tex->pt->texture; -#ifdef GLPIPES again: -#endif vertex_array_size_check(gc, gc->state.top_pipe, (rtype == SHD_LINE) ? 2 : 6); pn = gc->state.top_pipe; -#ifdef GLPIPES + if (!((pn == 0) && (gc->pipe[pn].array.num == 0))) { int found = 0; @@ -1927,34 +1922,6 @@ _evas_gl_common_context_push(Shader_Type rtype, goto again; } } -#else - if (!((gc->pipe[pn].region.type == rtype) - && (!tex || gc->pipe[pn].shader.cur_tex == current_tex) - /* && (!texa || gc->pipe[pn].shader.cur_texa == current_texa) */ - && (!texm || ((gc->pipe[i].shader.cur_texm == texm->pt->texture) - && (gc->pipe[i].shader.mask_smooth == mask_smooth))) - && (gc->pipe[pn].shader.prog == prog) - && (gc->pipe[pn].shader.smooth == smooth) - && (gc->pipe[pn].shader.blend == blend) - && (gc->pipe[pn].shader.render_op == gc->dc->render_op) - && (gc->pipe[pn].shader.clip == clip) - && (!clip || ((gc->pipe[pn].shader.cx == cx) - && (gc->pipe[pn].shader.cy == cy) - && (gc->pipe[pn].shader.cw == cw) - && (gc->pipe[pn].shader.ch == ch))))) - { - shader_array_flush(gc); - } - if ((tex) && (((tex->im) && (tex->im->native.data)) || tex->pt->dyn.img)) - { - if (gc->pipe[pn].array.im != tex->im) - { - shader_array_flush(gc); - gc->pipe[pn].array.im = tex->im; - } - } -#endif - return pn; } From 03001ceaca2aa09cc72c3bdcafda4583cea0e27b Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 30 Nov 2018 14:12:15 +0100 Subject: [PATCH 15/86] eolian: add optional warning for regular classes in ext list As per T7240, we intend to disallow multi-class inheritance in Eo at some point. In order to achieve that, it is necessary to find out which classes still use multi-class inheritance and change them accordingly. Eo multi-class inheritance is not actually multi-class, as doing so will simply treat all the other classes as interfaces, which is misleading and poor design on its own. By setting EOLIAN_CLASS_REGULAR_AS_EXT_WARN environment variable, Eolian will now warn about such classes, allowing them to be fixed. Closes T7365. --- src/lib/eolian/database_validate.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index b44fc1221d..a96e389010 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -12,6 +12,7 @@ typedef struct _Validate_State { Eina_Bool warned; Eina_Bool event_redef; + Eina_Bool ext_regular; } Validate_State; static Eina_Bool @@ -848,6 +849,23 @@ _validate_class(Validate_State *vals, Eolian_Class *cl, EINA_LIST_FOREACH(cl->extends, l, icl) { + if (!valid && vals->ext_regular) switch (icl->type) + { + case EOLIAN_CLASS_REGULAR: + case EOLIAN_CLASS_ABSTRACT: + /* regular class in extensions list, forbidden */ + { + char buf[PATH_MAX]; + snprintf(buf, sizeof(buf), "regular classes ('%s') cannot appear in extensions list of '%s'", + icl->base.name, cl->base.name); + _obj_error(&cl->base, buf); + vals->warned = EINA_TRUE; + break; + } + default: + /* it's ok, interfaces are allowed */ + break; + } if (!_validate_class(vals, icl, nhash, ehash, chash)) return EINA_FALSE; } @@ -928,7 +946,8 @@ database_validate(const Eolian_Unit *src) Validate_State vals = { EINA_FALSE, - !!getenv("EOLIAN_EVENT_REDEF_WARN") + !!getenv("EOLIAN_EVENT_REDEF_WARN"), + !!getenv("EOLIAN_CLASS_REGULAR_AS_EXT_WARN") }; /* do an initial pass to refill inherits */ From 1ce65f20f480786ef2a038be49377feb34eb65d3 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 30 Nov 2018 14:35:51 +0100 Subject: [PATCH 16/86] eolian_aux: rename tests classes to avoid autotools conflict Having these files would result in eolian cxx tests failing when building using autotools, as eolian generators by default include entire src directory and eolian cxx already had classes a/b/c. In an ideal case this should not happen as eolian cxx should not scan tests that are not its own, and it already behaves correctly under meson but there is no good way to fix it for autotools, so just rename as a workaround. --- src/tests/eolian/data_aux/{a.eo => aux_a.eo} | 6 ++--- src/tests/eolian/data_aux/aux_b.eo | 2 ++ src/tests/eolian/data_aux/{c.eo => aux_c.eo} | 2 +- src/tests/eolian/data_aux/b.eo | 2 -- src/tests/eolian/eolian_aux.c | 26 ++++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) rename src/tests/eolian/data_aux/{a.eo => aux_a.eo} (62%) create mode 100644 src/tests/eolian/data_aux/aux_b.eo rename src/tests/eolian/data_aux/{c.eo => aux_c.eo} (86%) delete mode 100644 src/tests/eolian/data_aux/b.eo diff --git a/src/tests/eolian/data_aux/a.eo b/src/tests/eolian/data_aux/aux_a.eo similarity index 62% rename from src/tests/eolian/data_aux/a.eo rename to src/tests/eolian/data_aux/aux_a.eo index f610fcb998..2ff081f9d8 100644 --- a/src/tests/eolian/data_aux/a.eo +++ b/src/tests/eolian/data_aux/aux_a.eo @@ -1,4 +1,4 @@ -class A(C) { +class Aux_A(Aux_C) { methods { baz {} } @@ -6,7 +6,7 @@ class A(C) { test2: void; } implements { - C.foo; - C.bar; + Aux_C.foo; + Aux_C.bar; } } diff --git a/src/tests/eolian/data_aux/aux_b.eo b/src/tests/eolian/data_aux/aux_b.eo new file mode 100644 index 0000000000..4c225d3c18 --- /dev/null +++ b/src/tests/eolian/data_aux/aux_b.eo @@ -0,0 +1,2 @@ +class Aux_B(Aux_C) { +} diff --git a/src/tests/eolian/data_aux/c.eo b/src/tests/eolian/data_aux/aux_c.eo similarity index 86% rename from src/tests/eolian/data_aux/c.eo rename to src/tests/eolian/data_aux/aux_c.eo index 999c5cda38..7e67ed547d 100644 --- a/src/tests/eolian/data_aux/c.eo +++ b/src/tests/eolian/data_aux/aux_c.eo @@ -1,4 +1,4 @@ -class C { +class Aux_C { methods { foo {} bar {} diff --git a/src/tests/eolian/data_aux/b.eo b/src/tests/eolian/data_aux/b.eo deleted file mode 100644 index 3b00c23308..0000000000 --- a/src/tests/eolian/data_aux/b.eo +++ /dev/null @@ -1,2 +0,0 @@ -class B(C) { -} diff --git a/src/tests/eolian/eolian_aux.c b/src/tests/eolian/eolian_aux.c index b7f263f483..10f562b301 100644 --- a/src/tests/eolian/eolian_aux.c +++ b/src/tests/eolian/eolian_aux.c @@ -11,19 +11,19 @@ EFL_START_TEST(eolian_aux_children) Eolian_State *eos = eolian_state_new(); fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); - fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); - fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/b.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/aux_a.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/aux_b.eo")); Eina_Hash *chash = eolian_aux_state_class_children_find(eos); fail_if(!chash); - const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "A"); + const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "Aux_A"); fail_if(!acl); - const Eolian_Class *bcl = eolian_state_class_by_name_get(eos, "B"); + const Eolian_Class *bcl = eolian_state_class_by_name_get(eos, "Aux_B"); fail_if(!bcl); - const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "C"); + const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "Aux_C"); fail_if(!ccl); Eina_List *cl = eina_hash_find(chash, &ccl); @@ -48,13 +48,13 @@ EFL_START_TEST(eolian_aux_implements) Eolian_State *eos = eolian_state_new(); fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); - fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); - fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/b.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/aux_a.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/aux_b.eo")); Eina_Hash *chash = eolian_aux_state_class_children_find(eos); fail_if(!chash); - const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "C"); + const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "Aux_C"); fail_if(!ccl); const Eolian_Function *fn = eolian_class_function_by_name_get(ccl, "foo", EOLIAN_METHOD); @@ -75,9 +75,9 @@ EFL_START_TEST(eolian_aux_callables) Eolian_State *eos = eolian_state_new(); fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); - fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/aux_a.eo")); - const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "A"); + const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "Aux_A"); fail_if(!acl); Eina_List *funcs = NULL; @@ -103,12 +103,12 @@ EFL_START_TEST(eolian_aux_implparent) Eolian_State *eos = eolian_state_new(); fail_if(!eolian_state_directory_add(eos, TESTS_SRC_DIR"/data_aux")); - fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/a.eo")); + fail_if(!eolian_state_file_parse(eos, TESTS_SRC_DIR"/data_aux/aux_a.eo")); - const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "A"); + const Eolian_Class *acl = eolian_state_class_by_name_get(eos, "Aux_A"); fail_if(!acl); - const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "C"); + const Eolian_Class *ccl = eolian_state_class_by_name_get(eos, "Aux_C"); fail_if(!ccl); const Eolian_Function *fn = eolian_class_function_by_name_get(ccl, "foo", EOLIAN_METHOD); From 5d04985888e4bf3b55dcbc0afb79cf0e7c8b7c31 Mon Sep 17 00:00:00 2001 From: Stefan Schmidt Date: Fri, 30 Nov 2018 15:30:01 +0100 Subject: [PATCH 17/86] Revert "eina: add locale-independent eina_convert_strtod_c function" This reverts commit bef1c5cc433b89add2cf0292e1098e1bd74ac640. The commit breaks the build on macos. I gave it soem time to get fixed up quickly, but its late Friday night in Korea now and this is unlikely to get fixed until Monday. Revert here until fixed. ./src/lib/eina/eina_private.h:158:1: error: unknown type name 'locale_t' https://travis-ci.org/Enlightenment/efl/jobs/461790674 --- src/lib/eina/eina_convert.c | 10 ---------- src/lib/eina/eina_convert.h | 16 ---------------- src/lib/eina/eina_main.c | 19 ------------------- src/lib/eina/eina_private.h | 6 ------ src/tests/eina/eina_test_convert.c | 21 --------------------- 5 files changed, 72 deletions(-) diff --git a/src/lib/eina/eina_convert.c b/src/lib/eina/eina_convert.c index 152ef5be4a..2943b37343 100644 --- a/src/lib/eina/eina_convert.c +++ b/src/lib/eina/eina_convert.c @@ -453,16 +453,6 @@ eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) return EINA_TRUE; } -EAPI double -eina_convert_strtod_c(const char *nptr, char **endptr) -{ -#ifdef _WIN32 - return _strtod_l(nptr, endptr, _eina_c_locale_get()); -#else - return strtod_l(nptr, endptr, _eina_c_locale_get()); -#endif -} - /** * @} */ diff --git a/src/lib/eina/eina_convert.h b/src/lib/eina/eina_convert.h index 337cd88ad8..026fc6c8f6 100644 --- a/src/lib/eina/eina_convert.h +++ b/src/lib/eina/eina_convert.h @@ -333,22 +333,6 @@ EAPI Eina_Bool eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3); -/** - * @brief Converts a string to a floating point number. - * - * @param[in] nptr a string to convert. It shouldn't be NULL. - * @param[out] endptr If endptr is not NULL, a pointer to the character after the last - * character used in the conversion is stored in the location referenced - * by endptr. - * @return a double type floating point number. - * - * This function returns converted floating point number with locale-independency. - * Actually, it use "C" locale for strtod_l function internally. If you need strtod - * without locale-dependency, this function can replace strtod. - * For more information, please refer documents of strtod, strtod_l. - */ -EAPI double eina_convert_strtod_c(const char *nptr, char **endptr); - /** * @} */ diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c index 535e4e7611..024d1e3eaa 100644 --- a/src/lib/eina/eina_main.c +++ b/src/lib/eina/eina_main.c @@ -85,7 +85,6 @@ static int _eina_main_count = 0; static int _eina_main_thread_count = 0; #endif static int _eina_log_dom = -1; -static locale_t _eina_c_locale; #ifdef ERR #undef ERR @@ -286,12 +285,6 @@ eina_init(void) if (EINA_LIKELY(_eina_main_count > 0)) return ++_eina_main_count; -#ifdef _WIN32 - _eina_c_locale = _create_locale(LC_ALL, "C"); -#else - _eina_c_locale = newlocale(LC_ALL_MASK, "C", NULL); -#endif - srand(time(NULL)); while (eina_seed == 0) eina_seed = rand(); @@ -355,12 +348,6 @@ eina_init(void) return 1; } -locale_t -_eina_c_locale_get(void) -{ - return _eina_c_locale; -} - EAPI int eina_shutdown(void) { @@ -372,12 +359,6 @@ eina_shutdown(void) _eina_main_count--; if (EINA_UNLIKELY(_eina_main_count == 0)) { -#ifdef _WIN32 - _free_locale(_eina_c_locale); -#else - freelocale(_eina_c_locale); -#endif - eina_log_timing(_eina_log_dom, EINA_LOG_STATE_START, EINA_LOG_STATE_SHUTDOWN); diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h index be826e0fb0..eab59586c1 100644 --- a/src/lib/eina/eina_private.h +++ b/src/lib/eina/eina_private.h @@ -20,7 +20,6 @@ #define EINA_PRIVATE_H_ #include -#include #ifdef _WIN32 # include @@ -152,11 +151,6 @@ Eina_Stringshare *eina_file_sanitize(const char *path); void eina_freeq_main_set(Eina_FreeQ *fq); -#ifdef _WIN32 -typedef _locale_t locale_t; -#endif -locale_t _eina_c_locale_get(void); - #include "eina_inline_private.h" #endif /* EINA_PRIVATE_H_ */ diff --git a/src/tests/eina/eina_test_convert.c b/src/tests/eina/eina_test_convert.c index c8ccfcb772..1b08a00a19 100644 --- a/src/tests/eina/eina_test_convert.c +++ b/src/tests/eina/eina_test_convert.c @@ -160,31 +160,10 @@ _eina_convert_fp_check(double d, Eina_F32p32 fp, int length) } EFL_END_TEST -static void -_eina_convert_strtod_c_check(const char *str, double expected_result) -{ - double result = eina_convert_strtod_c(str, NULL); - - fail_if(result != expected_result); -} - -EFL_START_TEST(eina_convert_strtod_c_simple) -{ - _eina_convert_strtod_c_check("0.0", 0.0); - _eina_convert_strtod_c_check("0.5", 0.5); - _eina_convert_strtod_c_check("1.0", 1.0); - _eina_convert_strtod_c_check("-0.5", -0.5); - _eina_convert_strtod_c_check("-1.0", -1.0); - _eina_convert_strtod_c_check("3.45e-2", 0.0345); - _eina_convert_strtod_c_check("3.45e+2", 345.0); -} -EFL_END_TEST - void eina_test_convert(TCase *tc) { tcase_add_test(tc, eina_convert_simple); tcase_add_test(tc, eina_convert_double); tcase_add_test(tc, eina_convert_fp); - tcase_add_test(tc, eina_convert_strtod_c_simple); } From 50ce1338b165a9e733d02748371e4c28dcb781ce Mon Sep 17 00:00:00 2001 From: Vitor Sousa Date: Tue, 6 Nov 2018 11:23:21 -0200 Subject: [PATCH 18/86] elementary: rework Efl.Ui.Layout boolean signal-connection to Models Add new feature to specify signal connection to boolean properties of Models. This also fix some '%v' substitution problems. Parsing EINA_VALUE_TYPE_BOOL as boolean in Efl.Ui.Layout signal updates from Models (instead of EINA_VALUE_TYPE_UCHAR). UCHAR no longer has special handling and falls to the general result of eina_value_to_string() as other types do. Use EINA_VALUE_TYPE_BOOL instead of EINA_VALUE_TYPE_UCHAR to signal selection on click events to the Model. Update examples to make usage of the new property connection feature in order to model selection of items on Views. --- .../elementary/efl_ui_list_view_example_1.c | 14 +++-- src/lib/elementary/efl_ui_layout.c | 57 ++++++++++++++----- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/examples/elementary/efl_ui_list_view_example_1.c b/src/examples/elementary/efl_ui_list_view_example_1.c index f509af12d6..f0a6adcfb8 100644 --- a/src/examples/elementary/efl_ui_list_view_example_1.c +++ b/src/examples/elementary/efl_ui_list_view_example_1.c @@ -71,9 +71,10 @@ _make_model(Evas_Object *win) EAPI_MAIN int elm_main(int argc, char **argv) { - Efl_Ui_Layout_Factory *factory; + Efl_Ui_Factory *factory; Evas_Object *win, *li; Eo *model; + Efl_Model_Composite_Selection *selmodel; win = elm_win_util_standard_add("list_view", "List_View"); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); @@ -81,15 +82,20 @@ elm_main(int argc, char **argv) elm_win_autodel_set(win, EINA_TRUE); model = _make_model(win); + selmodel = efl_add(EFL_MODEL_COMPOSITE_SELECTION_CLASS, efl_main_loop_get() + , efl_ui_view_model_set(efl_added, model) + ); factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win); efl_ui_model_connect(factory, "signal/elm,state,%v", "odd_style"); + efl_ui_model_connect(factory, "signal/efl,state,%{selected;unselected}", "selected"); efl_ui_model_connect(factory, "efl.text", "name"); efl_ui_layout_factory_theme_config(factory, "list_item", NULL, "default"); - li = efl_add(EFL_UI_LIST_VIEW_CLASS, win); - efl_ui_list_view_layout_factory_set(li, factory); - efl_ui_view_model_set(li, model); + li = efl_add(EFL_UI_LIST_VIEW_CLASS, win + , efl_ui_list_view_layout_factory_set(efl_added, factory) + , efl_ui_view_model_set(efl_added, selmodel) + ); efl_event_callback_add(li, EFL_UI_LIST_VIEW_EVENT_ITEM_REALIZED, _realized_cb, NULL); // efl_event_callback_add(li, EFL_UI_LIST_VIEW_EVENT_ITEM_UNREALIZED, _unrealized_cb, NULL); diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c index 0b46b4ee34..0e42c88d21 100644 --- a/src/lib/elementary/efl_ui_layout.c +++ b/src/lib/elementary/efl_ui_layout.c @@ -1964,7 +1964,9 @@ _efl_ui_layout_view_model_signal_update(Efl_Ui_Layout_Data *pd, const char *sign { Eina_Value *v = NULL; Eina_Strbuf *buf; - char *value; + char *value = NULL; + Eina_Bool eval = EINA_FALSE; + Eina_Bool is_bool = EINA_FALSE; v = efl_model_property_get(pd->connect.model, fetch); if (!v) return; @@ -1978,26 +1980,55 @@ _efl_ui_layout_view_model_signal_update(Efl_Ui_Layout_Data *pd, const char *sign return; } - // FIXME: previous implementation would just do that for signal/part == "selected" - if (eina_value_type_get(v) == EINA_VALUE_TYPE_UCHAR) + is_bool = (eina_value_type_get(v) == EINA_VALUE_TYPE_BOOL); + if (is_bool) { - Eina_Bool bl; - - eina_value_bool_get(v, &bl); - if (bl) value = strdup("selected"); - else value = strdup("unselected"); - } - else - { - value = eina_value_to_string(v); + eina_value_bool_get(v, &eval); } + value = eina_value_to_string(v); buf = eina_strbuf_new(); // FIXME: is it really the form of signal we want to send ? - eina_strbuf_append_printf(buf, "%s%s", signal, value); + const char *ini = signal; + for (;;) + { + const char *last = ini; + ini = strstr(last, "%{"); + if (!ini) + { + eina_strbuf_append(buf, last); + break; + } + if (!is_bool) + { + ERR("Using signal connection `%%{;}' with a property that is not boolean. Signal: `%s'; Property: `%s'.", signal, fetch); + goto on_error; + } + eina_strbuf_append_length(buf, last, (size_t)(ini-last)); + const char *sep = strchr(ini+2, ';'); + if (!sep) + { + ERR("Could not find separator `;'."); + goto on_error; + } + const char *fin = strchr(sep+1, '}'); + if (!fin) + { + ERR("Could not find terminator `}'."); + goto on_error; + } + if (eval) + eina_strbuf_append_length(buf, ini+2, (size_t)(sep-(ini+2))); + else + eina_strbuf_append_length(buf, sep+1, (size_t)(fin-(sep+1))); + ini = fin+1; + } + eina_strbuf_replace_all(buf, "%v", value); + elm_layout_signal_emit(pd->obj, eina_strbuf_string_get(buf), elm_widget_is_legacy(pd->obj) ? "elm" : "efl"); +on_error: eina_strbuf_free(buf); eina_value_free(v); free(value); From db579aad3bab6d7d8c36d2aa024e5e0dbe098b85 Mon Sep 17 00:00:00 2001 From: Larry Lira Date: Thu, 29 Nov 2018 15:11:51 -0200 Subject: [PATCH 19/86] Efl.Ui.List.View: fixed MVVM life-cycle Fix bugs on Views and Model related with null items and proper ownership and life-cycle of components. Configure default theme for default factory on finalize. --- .../elementary/efl_ui_list_view_example_1.c | 5 +- .../elementary/efl_ui_list_view_example_2.c | 2 +- .../elementary/efl_ui_list_view_example_3.c | 16 ++-- src/lib/ecore/efl_model_container.c | 6 +- src/lib/ecore/efl_model_item.c | 9 +-- src/lib/elementary/efl_ui_layout.c | 16 ++-- src/lib/elementary/efl_ui_layout_factory.c | 59 +++++++-------- src/lib/elementary/efl_ui_list_view.c | 73 ++++++++++--------- .../efl_ui_list_view_precise_layouter.c | 47 +++++++----- .../elementary/efl_ui_list_view_seg_array.c | 9 ++- 10 files changed, 118 insertions(+), 124 deletions(-) diff --git a/src/examples/elementary/efl_ui_list_view_example_1.c b/src/examples/elementary/efl_ui_list_view_example_1.c index f0a6adcfb8..dc300264aa 100644 --- a/src/examples/elementary/efl_ui_list_view_example_1.c +++ b/src/examples/elementary/efl_ui_list_view_example_1.c @@ -22,7 +22,7 @@ const char *styles[] = { char edj_path[PATH_MAX]; static void -_realized_cb(void *data, const Efl_Event *event) +_realized_cb(void *data EINA_UNUSED, const Efl_Event *event) { Efl_Ui_List_View_Item_Event *ie = event->info; if (!ie->layout) return; @@ -69,7 +69,7 @@ _make_model(Evas_Object *win) } EAPI_MAIN int -elm_main(int argc, char **argv) +elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) { Efl_Ui_Factory *factory; Evas_Object *win, *li; @@ -110,7 +110,6 @@ elm_main(int argc, char **argv) evas_object_show(win); elm_run(); - efl_unref(model); return 0; } diff --git a/src/examples/elementary/efl_ui_list_view_example_2.c b/src/examples/elementary/efl_ui_list_view_example_2.c index c624cade19..ca56f37d33 100644 --- a/src/examples/elementary/efl_ui_list_view_example_2.c +++ b/src/examples/elementary/efl_ui_list_view_example_2.c @@ -15,7 +15,7 @@ #define EFL_MODEL_TEST_FILENAME_PATH "/tmp" EAPI_MAIN int -elm_main(int argc, char **argv) +elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) { Efl_Ui_Layout_Factory *factory; Efl_Ui_Image_Factory *imgf; diff --git a/src/examples/elementary/efl_ui_list_view_example_3.c b/src/examples/elementary/efl_ui_list_view_example_3.c index 46d5ca5813..eaf5dc975a 100644 --- a/src/examples/elementary/efl_ui_list_view_example_3.c +++ b/src/examples/elementary/efl_ui_list_view_example_3.c @@ -66,7 +66,7 @@ _focused(void *data, const Efl_Event *event) } static void -_bt_add_clicked(void *data, Evas_Object *obj, void *event_info) +_bt_add_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Priv_Data *priv = (Priv_Data*)data; Eina_Value vtext, value; @@ -90,7 +90,7 @@ _bt_add_clicked(void *data, Evas_Object *obj, void *event_info) } static void -_bt_del_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_bt_del_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Priv_Data *priv = (Priv_Data*)data; Eo *child = NULL; @@ -110,35 +110,35 @@ _bt_del_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) } static void -_bt_none_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_bt_none_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *li = data; efl_ui_list_view_select_mode_set(li, ELM_OBJECT_SELECT_MODE_NONE); } static void -_bt_donly_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_bt_donly_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *li = data; efl_ui_list_view_select_mode_set(li, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); } static void -_bt_default_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_bt_default_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *li = data; efl_ui_list_view_select_mode_set(li, ELM_OBJECT_SELECT_MODE_DEFAULT); } static void -_bt_set_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_bt_set_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Priv_Data *priv = data; efl_ui_view_model_set(priv->list2, priv->model); } static void -_bt_unset_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +_bt_unset_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *li = data; efl_ui_view_model_set(li, NULL); @@ -201,7 +201,7 @@ _make_model() } EAPI_MAIN int -elm_main(int argc, char **argv) +elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) { Priv_Data *priv; Evas_Object *win, *bx, *vbx, *bt; diff --git a/src/lib/ecore/efl_model_container.c b/src/lib/ecore/efl_model_container.c index 5449ae4307..ce5dc493aa 100644 --- a/src/lib/ecore/efl_model_container.c +++ b/src/lib/ecore/efl_model_container.c @@ -84,12 +84,8 @@ _efl_model_container_efl_object_destructor(Eo *obj, { Eina_Stringshare *key; Eina_Iterator *it; - Efl_Model *child; - EINA_LIST_FREE(sd->childrens, child) - { - if (child) efl_parent_set(child, NULL); - } + eina_list_free(sd->childrens); it = eina_hash_iterator_key_new(sd->properties); EINA_ITERATOR_FOREACH(it, key) diff --git a/src/lib/ecore/efl_model_item.c b/src/lib/ecore/efl_model_item.c index 104125a705..13f60292c9 100644 --- a/src/lib/ecore/efl_model_item.c +++ b/src/lib/ecore/efl_model_item.c @@ -44,14 +44,7 @@ _efl_model_item_efl_object_constructor(Eo *obj, Efl_Model_Item_Data *sd) static void _efl_model_item_efl_object_destructor(Eo *obj, Efl_Model_Item_Data *sd) { - Efl_Model *child; - - EINA_LIST_FREE(sd->childrens, child) - { - if (child) - efl_parent_set(child, NULL); - } - + eina_list_free(sd->childrens); eina_hash_foreach(sd->properties, _stringshared_keys_free, NULL); eina_hash_free(sd->properties); diff --git a/src/lib/elementary/efl_ui_layout.c b/src/lib/elementary/efl_ui_layout.c index 0e42c88d21..c14bebac3d 100644 --- a/src/lib/elementary/efl_ui_layout.c +++ b/src/lib/elementary/efl_ui_layout.c @@ -2103,9 +2103,8 @@ _efl_ui_layout_connect_hash(Efl_Ui_Layout_Data *pd) { if (pd->connect.properties) return ; - // FIXME: fix destruction function definition - pd->connect.properties = eina_hash_stringshared_new(NULL); // Hash of property targeting a part - pd->connect.signals = eina_hash_stringshared_new(NULL); // Hash of property triggering a signal + pd->connect.properties = eina_hash_stringshared_new(EINA_FREE_CB(free)); // Hash of property targeting a part + pd->connect.signals = eina_hash_stringshared_new(EINA_FREE_CB(free)); // Hash of property triggering a signal pd->connect.factories = eina_hash_stringshared_new(EINA_FREE_CB(efl_unref)); // Hash of property triggering a content creation } @@ -2116,13 +2115,16 @@ _efl_ui_layout_efl_ui_view_model_set(Eo *obj, Efl_Ui_Layout_Data *pd, Efl_Model Eina_Hash_Tuple *tuple; Eina_Iterator *it; - efl_replace(&pd->connect.model, model); + if (pd->connect.model && pd->connect.model != model) + efl_event_callback_del(pd->connect.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, + _efl_model_properties_changed_cb, pd); + + if (!efl_replace(&pd->connect.model, model)) + return; if (model) - { - efl_event_callback_add(pd->connect.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, + efl_event_callback_add(pd->connect.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _efl_model_properties_changed_cb, pd); - } _efl_ui_layout_connect_hash(pd); diff --git a/src/lib/elementary/efl_ui_layout_factory.c b/src/lib/elementary/efl_ui_layout_factory.c index 43d0a0f35d..cbd8139064 100644 --- a/src/lib/elementary/efl_ui_layout_factory.c +++ b/src/lib/elementary/efl_ui_layout_factory.c @@ -10,7 +10,6 @@ typedef struct _Efl_Ui_Layout_Factory_Data { - Eina_Array *layouts; Eina_Hash *connects; Eina_Hash *factory_connects; Eina_Stringshare *klass; @@ -46,12 +45,8 @@ _efl_ui_layout_factory_efl_object_constructor(Eo *obj, Efl_Ui_Layout_Factory_Dat { obj = efl_constructor(efl_super(obj, MY_CLASS)); - pd->klass = NULL; - pd->group = NULL; - pd->style = NULL; - pd->layouts = eina_array_new(8); pd->connects = eina_hash_stringshared_new(EINA_FREE_CB(eina_stringshare_del)); - pd->factory_connects = eina_hash_stringshared_new(EINA_FREE_CB(efl_del)); + pd->factory_connects = eina_hash_stringshared_new(EINA_FREE_CB(efl_unref)); return obj; } @@ -59,18 +54,10 @@ _efl_ui_layout_factory_efl_object_constructor(Eo *obj, Efl_Ui_Layout_Factory_Dat EOLIAN static void _efl_ui_layout_factory_efl_object_destructor(Eo *obj, Efl_Ui_Layout_Factory_Data *pd) { - Eina_Array_Iterator iterator; - Eo *layout; - unsigned int i; - eina_stringshare_del(pd->klass); eina_stringshare_del(pd->group); eina_stringshare_del(pd->style); - EINA_ARRAY_ITER_NEXT(pd->layouts, i, layout, iterator) - efl_parent_set(layout, NULL); - - eina_array_free(pd->layouts); eina_hash_free(pd->connects); eina_hash_free(pd->factory_connects); @@ -83,25 +70,16 @@ _efl_ui_layout_factory_efl_ui_factory_create(Eo *obj EINA_UNUSED, Efl_Ui_Layout_ { Efl_Gfx_Entity *layout; EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL); -/* - if (eina_array_count(pd->layouts)) - { - layout = eina_array_pop(pd->layouts); - efl_parent_set(layout, parent); - efl_ui_view_model_set(layout, model); - } - else */ - { - layout = efl_add(EFL_UI_LAYOUT_CLASS, parent, - efl_ui_view_model_set(efl_added, model), - efl_ui_layout_theme_set(efl_added, pd->klass, pd->group, pd->style)); - eina_hash_foreach(pd->connects, _model_connect, layout); - eina_hash_foreach(pd->factory_connects, _factory_model_connect, layout); + layout = efl_add(EFL_UI_LAYOUT_CLASS, parent, + efl_ui_view_model_set(efl_added, model), + efl_ui_layout_theme_set(efl_added, pd->klass, pd->group, pd->style)); - evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - } + eina_hash_foreach(pd->connects, _model_connect, layout); + eina_hash_foreach(pd->factory_connects, _factory_model_connect, layout); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); return layout; } @@ -118,6 +96,7 @@ _efl_ui_layout_factory_efl_ui_factory_model_connect(Eo *obj EINA_UNUSED, Efl_Ui_ , const char *name, Efl_Ui_Factory *factory) { Eina_Stringshare *ss_name; + Efl_Ui_Factory *f_old; ss_name = eina_stringshare_add(name); if (factory == NULL) @@ -126,24 +105,36 @@ _efl_ui_layout_factory_efl_ui_factory_model_connect(Eo *obj EINA_UNUSED, Efl_Ui_ return; } - eina_stringshare_del(eina_hash_set(pd->factory_connects, ss_name, factory)); + f_old = eina_hash_set(pd->factory_connects, ss_name, efl_ref(factory)); + if (f_old) + { + efl_unref(f_old); + eina_stringshare_del(ss_name); + } } EOLIAN static void _efl_ui_layout_factory_efl_ui_model_connect_connect(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Factory_Data *pd , const char *name, const char *property) { - Eina_Stringshare *ss_name, *ss_prop; + Eina_Stringshare *ss_name, *ss_prop, *ss_old; ss_name = eina_stringshare_add(name); if (property == NULL) { eina_hash_del(pd->connects, ss_name, NULL); + eina_stringshare_del(ss_name); return; } ss_prop = eina_stringshare_add(property); - eina_stringshare_del(eina_hash_set(pd->connects, ss_name, ss_prop)); + ss_old = eina_hash_set(pd->connects, ss_name, ss_prop); + if (ss_old) + { + eina_stringshare_del(ss_old); + eina_stringshare_del(ss_name); + } + } EOLIAN static void diff --git a/src/lib/elementary/efl_ui_list_view.c b/src/lib/elementary/efl_ui_list_view.c index 94e9fdbf94..5a9a764947 100644 --- a/src/lib/elementary/efl_ui_list_view.c +++ b/src/lib/elementary/efl_ui_list_view.c @@ -620,7 +620,9 @@ _efl_ui_list_view_efl_canvas_group_group_add(Eo *obj, Efl_Ui_List_View_Data *pd) EOLIAN static void _efl_ui_list_view_efl_canvas_group_group_del(Eo *obj, Efl_Ui_List_View_Data *pd) { - ELM_SAFE_FREE(pd->pan_obj, evas_object_del); + efl_ui_list_view_relayout_model_set(pd->relayout, NULL); + + ELM_SAFE_FREE(pd->pan_obj, efl_del); efl_canvas_group_del(efl_super(obj, MY_CLASS)); } @@ -637,15 +639,16 @@ _efl_ui_list_view_efl_ui_widget_focus_manager_focus_manager_create(Eo *obj EINA_ EOLIAN static Eo * _efl_ui_list_view_efl_object_finalize(Eo *obj, Efl_Ui_List_View_Data *pd) { - if (!pd->factory) - pd->factory = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, obj); + { + pd->factory = efl_new(EFL_UI_LAYOUT_FACTORY_CLASS); + efl_ui_layout_factory_theme_config(pd->factory, "list_item", NULL, "default"); + } if(!pd->relayout) { - pd->relayout = efl_add(EFL_UI_LIST_VIEW_PRECISE_LAYOUTER_CLASS, obj); - if (pd->model) - efl_ui_list_view_relayout_model_set(pd->relayout, pd->model); + pd->relayout = efl_new(EFL_UI_LIST_VIEW_PRECISE_LAYOUTER_CLASS); + efl_ui_list_view_relayout_model_set(pd->relayout, pd->model); } return obj; } @@ -659,7 +662,7 @@ _efl_ui_list_view_efl_object_constructor(Eo *obj, Efl_Ui_List_View_Data *pd) evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); efl_access_object_role_set(obj, EFL_ACCESS_ROLE_LIST); - pd->seg_array = efl_add(EFL_UI_LIST_VIEW_SEG_ARRAY_CLASS, obj, efl_ui_list_view_seg_array_setup(efl_added, 32)); + pd->seg_array = efl_new(EFL_UI_LIST_VIEW_SEG_ARRAY_CLASS, efl_ui_list_view_seg_array_setup(efl_added, 32)); efl_event_callback_add(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUS_CHANGED, _list_element_focused, NULL); @@ -678,45 +681,37 @@ _efl_ui_list_view_efl_object_constructor(Eo *obj, Efl_Ui_List_View_Data *pd) EOLIAN static void _efl_ui_list_view_efl_object_destructor(Eo *obj, Efl_Ui_List_View_Data *pd) { - efl_ui_list_view_relayout_model_set(pd->relayout, NULL); - - efl_unref(pd->model); - eina_stringshare_del(pd->style); + efl_event_callback_del(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUS_CHANGED, + _list_element_focused, NULL); _efl_ui_list_view_edje_object_detach(obj); - ELM_SAFE_FREE(pd->pan_obj, evas_object_del); - efl_canvas_group_del(efl_super(obj, MY_CLASS)); + efl_replace(&pd->model, NULL); + efl_replace(&pd->relayout, NULL); + efl_replace(&pd->factory, NULL); + efl_ui_list_view_seg_array_flush(pd->seg_array); + efl_unref(pd->seg_array); + + eina_stringshare_del(pd->style); efl_destructor(efl_super(obj, MY_CLASS)); } EOLIAN static void _efl_ui_list_view_layout_factory_set(Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *pd, Efl_Ui_Factory *factory) { - if (pd->factory) - efl_unref(pd->factory); - - pd->factory = factory; - efl_ref(pd->factory); + efl_replace(&pd->factory, factory); } EOLIAN static void _efl_ui_list_view_efl_ui_view_model_set(Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *pd, Efl_Model *model) { - if (pd->model == model) + if (!efl_replace(&pd->model, model)) return; - if (pd->model) - { - if (pd->relayout) - efl_ui_list_view_relayout_model_set(pd->relayout, NULL); - efl_ui_list_view_seg_array_flush(pd->seg_array); - } + efl_ui_list_view_seg_array_flush(pd->seg_array); - efl_replace(&pd->model, model); - - if (pd->model && pd->relayout) + if (pd->relayout) efl_ui_list_view_relayout_model_set(pd->relayout, pd->model); evas_object_smart_changed(pd->obj); @@ -815,7 +810,7 @@ _efl_ui_list_view_item_select_set(Efl_Ui_List_View_Layout_Item *item, Eina_Bool if (_efl_model_properties_has(item->children, sprop)) { Eina_Value v; - eina_value_setup(&v, EINA_VALUE_TYPE_UCHAR); + eina_value_setup(&v, EINA_VALUE_TYPE_BOOL); eina_value_set(&v, selected); efl_model_property_set(item->children, sprop, &v); eina_value_flush(&v); @@ -826,8 +821,7 @@ _efl_ui_list_view_item_select_set(Efl_Ui_List_View_Layout_Item *item, Eina_Bool static void _efl_ui_list_view_relayout_set(Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *pd EINA_UNUSED, Efl_Ui_List_View_Relayout *object) { - efl_replace(&pd->relayout, object); - if (pd->model && pd->relayout) + if (efl_replace(&pd->relayout, object) && pd->model && pd->relayout) efl_ui_list_view_relayout_model_set(pd->relayout, pd->model); } @@ -912,9 +906,13 @@ EOLIAN static Efl_Ui_List_View_Layout_Item * _efl_ui_list_view_efl_ui_list_view_model_realize(Eo *obj, Efl_Ui_List_View_Data *pd, Efl_Ui_List_View_Layout_Item *item) { Efl_Ui_List_View_Item_Event evt; - EINA_SAFETY_ON_NULL_RETURN_VAL(item->children, item); + EINA_SAFETY_ON_NULL_RETURN_VAL(item, NULL); + + if (!item->children) + return item; item->layout = efl_ui_factory_create(pd->factory, item->children, obj); + EINA_SAFETY_ON_NULL_RETURN_VAL(item->layout, NULL); evas_object_smart_member_add(item->layout, pd->pan_obj); evas_object_event_callback_add(item->layout, EVAS_CALLBACK_MOUSE_UP, _on_item_mouse_up, item); @@ -938,13 +936,16 @@ EOLIAN static void _efl_ui_list_view_efl_ui_list_view_model_unrealize(Eo *obj, Efl_Ui_List_View_Data *pd, Efl_Ui_List_View_Layout_Item *item) { Efl_Ui_List_View_Item_Event evt; - EINA_SAFETY_ON_NULL_RETURN(item->layout); + EINA_SAFETY_ON_NULL_RETURN(item); + + if (!item->layout) + return; evas_object_event_callback_del_full(item->layout, EVAS_CALLBACK_MOUSE_UP, _on_item_mouse_up, item); if (elm_object_focus_allow_get(item->layout)) { - if (elm_object_focus_get(item->layout)) - elm_object_focus_set(item->layout, EINA_FALSE); + if (efl_ui_focus_object_focus_get(item->layout)) + efl_ui_focus_object_focus_set(item->layout, EINA_FALSE); efl_ui_focus_manager_calc_unregister(obj, item->layout); } evas_object_hide(item->layout); @@ -955,8 +956,8 @@ _efl_ui_list_view_efl_ui_list_view_model_unrealize(Eo *obj, Efl_Ui_List_View_Dat evt.index = efl_ui_list_view_item_index_get(item); efl_event_callback_call(obj, EFL_UI_LIST_VIEW_EVENT_ITEM_UNREALIZED, &evt); - evas_object_smart_member_del(item->layout); efl_ui_factory_release(pd->factory, item->layout); + evas_object_smart_member_del(item->layout); item->layout = NULL; } diff --git a/src/lib/elementary/efl_ui_list_view_precise_layouter.c b/src/lib/elementary/efl_ui_list_view_precise_layouter.c index 3beac4d468..9b6ba9f0ad 100644 --- a/src/lib/elementary/efl_ui_list_view_precise_layouter.c +++ b/src/lib/elementary/efl_ui_list_view_precise_layouter.c @@ -325,14 +325,15 @@ _initilize(Eo *obj EINA_UNUSED, Efl_Ui_List_View_Precise_Layouter_Data *pd, Efl_ if(pd->initialized) return EINA_TRUE; - if(!pd->model || !pd->count_total) + efl_replace(&pd->modeler, modeler); + + if(!pd->model || !pd->modeler) return EINA_FALSE; pd->recalc = EINA_TRUE; pd->initialized = EINA_TRUE; - pd->modeler = modeler; - pd->seg_array = seg_array; + efl_replace(&pd->seg_array, seg_array); efl_ui_list_view_model_load_range_set(pd->modeler, 0, pd->count_total); // load all efl_event_callback_add(pd->model, EFL_MODEL_EVENT_CHILD_ADDED, _child_added_cb, pd); @@ -351,27 +352,36 @@ _finalize(Eo *obj EINA_UNUSED, Efl_Ui_List_View_Precise_Layouter_Data *pd) Efl_Ui_List_View_Seg_Array_Node* node; int i = 0; - evas_object_event_callback_del_full(pd->modeler, EVAS_CALLBACK_RESIZE, _on_modeler_resize, pd); - efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILD_ADDED, _child_added_cb, pd); - efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILD_REMOVED, _child_removed_cb, pd); - pd->count_total = 0; - - Eina_Accessor *nodes = efl_ui_list_view_seg_array_node_accessor_get(pd->seg_array); - EINA_ACCESSOR_FOREACH(nodes, i, node) + if (pd->model) { - _node_unrealize(pd, node); - free(node->layout_data); + efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILD_ADDED, _child_added_cb, pd); + efl_event_callback_del(pd->model, EFL_MODEL_EVENT_CHILD_REMOVED, _child_removed_cb, pd); + pd->count_total = 0; } - eina_accessor_free(nodes); + if (pd->seg_array) + { + Eina_Accessor *nodes = efl_ui_list_view_seg_array_node_accessor_get(pd->seg_array); + EINA_ACCESSOR_FOREACH(nodes, i, node) + { + _node_unrealize(pd, node); + free(node->layout_data); + } + + eina_accessor_free(nodes); + } pd->min.w = 0; pd->min.h = 0; - efl_ui_list_view_model_min_size_set(pd->modeler, pd->min); + if (pd->modeler) + { + evas_object_event_callback_del_full(pd->modeler, EVAS_CALLBACK_RESIZE, _on_modeler_resize, pd); + efl_ui_list_view_model_min_size_set(pd->modeler, pd->min); + } - pd->seg_array = NULL; - pd->modeler = NULL; + efl_replace(&pd->seg_array, NULL); + efl_replace(&pd->modeler, NULL); pd->initialized = EINA_FALSE; pd->recalc = EINA_TRUE; @@ -567,7 +577,8 @@ _efl_ui_list_view_precise_layouter_efl_ui_list_view_relayout_elements_get(const } } - return elements_order; + eina_accessor_free(nodes); + return elements_order; } EOLIAN static void @@ -682,7 +693,7 @@ _efl_ui_list_view_precise_layouter_efl_ui_list_view_relayout_layout_do (Eo *obj EINA_UNUSED, Efl_Ui_List_View_Precise_Layouter_Data *pd , Efl_Ui_List_View_Model *modeler, int first, Efl_Ui_List_View_Seg_Array *seg_array) { - if (!_initilize(obj, pd, modeler, seg_array)) + if (!_initilize(obj, pd, modeler, seg_array) || !pd->seg_array) return; pd->first = first; diff --git a/src/lib/elementary/efl_ui_list_view_seg_array.c b/src/lib/elementary/efl_ui_list_view_seg_array.c index bf379a6a07..8c6c0ed154 100644 --- a/src/lib/elementary/efl_ui_list_view_seg_array.c +++ b/src/lib/elementary/efl_ui_list_view_seg_array.c @@ -56,7 +56,6 @@ static Eina_Rbtree_Direction _rbtree_compare(Efl_Ui_List_View_Seg_Array_Node con return EINA_RBTREE_RIGHT; } - static void _free_node(Efl_Ui_List_View_Seg_Array_Node* node, void* data EINA_UNUSED) { @@ -64,8 +63,10 @@ _free_node(Efl_Ui_List_View_Seg_Array_Node* node, void* data EINA_UNUSED) while (i < node->length) { - free(node->pointers[i]); - ++i; + Efl_Ui_List_View_Layout_Item* item = node->pointers[i]; + efl_unref(item->children); + free(item); + ++i; } free(node); @@ -98,7 +99,7 @@ _efl_ui_list_view_seg_array_flush(Eo* obj EINA_UNUSED, Efl_Ui_List_View_Seg_Arra static Efl_Ui_List_View_Layout_Item* _create_item_partial(Efl_Model* model) { Efl_Ui_List_View_Layout_Item* item = calloc(1, sizeof(Efl_Ui_List_View_Layout_Item)); - item->children = model; + item->children = efl_ref(model); return item; } From 22c8bc2f59ff03a658eaf1ffcbe82f39aca05384 Mon Sep 17 00:00:00 2001 From: Lauro Moura Date: Fri, 30 Nov 2018 19:34:43 -0200 Subject: [PATCH 20/86] eolian-cxx: Add property_def Summary: While individual getters and setters are added to the list of methods of a class, property_def will hold them as a pair. This will help defining accessors like C#'s where they're grouped. Also update some eolian-cxx tests that were commented out. Depends: D7262 Test Plan: run eolian-cxx tests Reviewers: vitor.sousa, felipealmeida Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7389 --- src/Makefile_Eolian_Cxx.am | 1 + src/lib/eolian_cxx/grammar/klass_def.hpp | 77 +++++++++++++++++-- src/tests/eolian/data/complex_type.eo | 2 +- .../eolian_cxx/eolian_cxx_test_binding.cc | 70 +++++++++++++++++ src/tests/eolian_cxx/eolian_cxx_test_parse.cc | 6 +- src/tests/eolian_cxx/meson.build | 1 + src/tests/eolian_cxx/property_holder.eo | 42 ++++++++++ 7 files changed, 188 insertions(+), 11 deletions(-) create mode 100644 src/tests/eolian_cxx/property_holder.eo diff --git a/src/Makefile_Eolian_Cxx.am b/src/Makefile_Eolian_Cxx.am index c2c66a6d91..be0cbaf501 100644 --- a/src/Makefile_Eolian_Cxx.am +++ b/src/Makefile_Eolian_Cxx.am @@ -178,6 +178,7 @@ tests_eolian_cxx_eolian_cxx_suite_CXXFLAGS = \ -I$(top_builddir)/src/tests/eolian_cxx \ -DTESTS_WD=\"`pwd`\" \ -DTESTS_SRC_DIR=\"$(top_srcdir)/src/tests/eolian_cxx\" \ +-DEO_SRC_DIR=\"$(top_srcdir)/src/lib\" \ -DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)\" \ -DPACKAGE_DATA_DIR=\"$(top_srcdir)/src/tests/eolian_cxx\" \ -DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/eolian_cxx\" \ diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp index 513dac582b..1db9324001 100644 --- a/src/lib/eolian_cxx/grammar/klass_def.hpp +++ b/src/lib/eolian_cxx/grammar/klass_def.hpp @@ -175,7 +175,7 @@ struct documentation_def std::string since; std::vector desc_paragraphs; - documentation_def() {} + documentation_def() = default; documentation_def(std::string summary, std::string description, std::string since) : summary(summary), description(description), since(since) {} @@ -296,7 +296,7 @@ struct type_def bool has_own; bool is_ptr; - type_def() {} + type_def() = default; type_def(variant_type original_type, std::string c_type, bool has_own) : original_type(original_type), c_type(c_type), has_own(has_own) {} @@ -798,6 +798,40 @@ struct tuple_element<2ul, function_def> static type const& get(function_def const& f) { return f.parameters; } }; +struct property_def +{ + klass_name klass; + std::string name; + + efl::eina::optional getter; + efl::eina::optional setter; + + friend inline bool operator==(property_def const& lhs, property_def const& rhs) + { + return lhs.klass == rhs.klass + && lhs.name == rhs.name + && lhs.getter == rhs.getter + && lhs.setter == rhs.setter; + } + + friend inline bool operator!=(property_def const& lhs, property_def const& rhs) + { + return !(lhs == rhs); + } + + property_def() = default; + property_def(Eolian_Function const *function, efl::eina::optional getter + , efl::eina::optional setter, Eolian_Unit const* unit) + : getter(getter), setter(setter) + { + name = ::eolian_function_name_get(function); + + const Eolian_Class *eolian_klass = eolian_function_class_get(function); + klass = klass_name(eolian_klass, {attributes::qualifier_info::is_none, std::string()}); + } +}; + + // template // struct tuple_element : tuple_element {}; // template @@ -938,6 +972,7 @@ struct klass_def documentation_def documentation; std::vector namespaces; std::vector functions; + std::vector properties; std::set inherits; class_type type; std::vector events; @@ -952,6 +987,7 @@ struct klass_def && lhs.filename == lhs.filename && lhs.namespaces == rhs.namespaces && lhs.functions == rhs.functions + && lhs.properties == rhs.properties && lhs.inherits == rhs.inherits && lhs.type == rhs.type && lhs.events == rhs.events @@ -973,23 +1009,25 @@ struct klass_def , documentation_def documentation , std::vector namespaces , std::vector functions + , std::vector properties , std::set inherits , class_type type , std::set immediate_inherits) : eolian_name(eolian_name), cxx_name(cxx_name), filename(filename) , documentation(documentation) , namespaces(namespaces) - , functions(functions), inherits(inherits), type(type) + , functions(functions), properties(properties), inherits(inherits), type(type) , immediate_inherits(immediate_inherits) {} klass_def(std::string _eolian_name, std::string _cxx_name , std::vector _namespaces , std::vector _functions + , std::vector _properties , std::set _inherits , class_type _type, Eolian_Unit const* unit) : eolian_name(_eolian_name), cxx_name(_cxx_name) , namespaces(_namespaces) - , functions(_functions), inherits(_inherits), type(_type), unit(unit) + , functions(_functions), properties(_properties), inherits(_inherits), type(_type), unit(unit) {} klass_def(Eolian_Class const* klass, Eolian_Unit const* unit) : unit(unit) { @@ -1007,22 +1045,45 @@ struct klass_def Eolian_Function_Type func_type = ::eolian_function_type_get(function); if(func_type == EOLIAN_PROPERTY) { + efl::eina::optional getter(nullptr); + efl::eina::optional setter(nullptr); try { if(! ::eolian_function_is_legacy_only(function, EOLIAN_PROP_GET) && ::eolian_function_scope_get(function, EOLIAN_PROP_GET) != EOLIAN_SCOPE_PRIVATE) - functions.push_back({function, EOLIAN_PROP_GET, NULL, unit}); + { + function_def f(function, EOLIAN_PROP_GET, NULL, unit); + functions.push_back(f); + getter = efl::eina::optional(f); + } } catch(std::exception const&) {} try { if(! ::eolian_function_is_legacy_only(function, EOLIAN_PROP_SET) && ::eolian_function_scope_get(function, EOLIAN_PROP_SET) != EOLIAN_SCOPE_PRIVATE) - functions.push_back({function, EOLIAN_PROP_SET, NULL, unit}); + { + function_def f(function, EOLIAN_PROP_SET, NULL, unit); + functions.push_back(f); + setter = efl::eina::optional(f); + } } catch(std::exception const&) {} + if (getter.is_engaged() || setter.is_engaged()) + properties.push_back({function, getter, setter, unit}); } else try { if(! ::eolian_function_is_legacy_only(function, func_type) && ::eolian_function_scope_get(function, func_type) != EOLIAN_SCOPE_PRIVATE) - functions.push_back({function, func_type, NULL, unit}); + { + efl::eina::optional getter(nullptr); + efl::eina::optional setter(nullptr); + function_def f(function, func_type, NULL, unit); + if (func_type == EOLIAN_PROP_GET) + getter = efl::eina::optional(f); + else if (func_type == EOLIAN_PROP_SET) + setter = efl::eina::optional(f); + functions.push_back(f); + if (func_type == EOLIAN_PROP_GET || func_type == EOLIAN_PROP_SET) + properties.push_back({function, getter, setter, unit}); + } } catch(std::exception const&) {} } for(efl::eina::iterator eolian_functions ( ::eolian_class_functions_get(klass, EOLIAN_METHOD)) @@ -1154,7 +1215,7 @@ struct value_def std::string literal; type_def type; - value_def() {} + value_def() = default; value_def(Eolian_Value value_obj) { type.set(value_obj.type); diff --git a/src/tests/eolian/data/complex_type.eo b/src/tests/eolian/data/complex_type.eo index e8fe1a785e..9751bec5ed 100644 --- a/src/tests/eolian/data/complex_type.eo +++ b/src/tests/eolian/data/complex_type.eo @@ -4,7 +4,7 @@ class Complex_Type { methods { @property a { set { - return: list > @owned; + return: list > @owned; } get { } diff --git a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc index e4d90202b5..09834069c5 100644 --- a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc +++ b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc @@ -4,6 +4,8 @@ #include +#include + #include #include #include @@ -11,6 +13,9 @@ #include "eolian_cxx_suite.h" +#include +#include "grammar/klass_def.hpp" + EFL_START_TEST(eolian_cxx_test_binding_constructor_only_required) { efl::eo::eo_init init; @@ -223,6 +228,70 @@ EFL_START_TEST(eolian_cxx_test_type_callback) } EFL_END_TEST +using efl::eolian::grammar::attributes::klass_def; +using efl::eolian::grammar::attributes::function_def; +using efl::eolian::grammar::attributes::property_def; +using efl::eolian::grammar::attributes::type_def; + +// FIXME Unify this definition some so we can share it with documentation tests. +static +klass_def init_test_data(std::string const target_file, std::string const target_klass, efl::eolian::eolian_state const& state) +{ + ck_assert(::eolian_state_directory_add(state.value, TESTS_SRC_DIR)); + ck_assert(::eolian_state_directory_add(state.value, EO_SRC_DIR)); + ck_assert(::eolian_state_all_eot_files_parse(state.value)); + std::string filename = TESTS_SRC_DIR; + filename += "/" + target_file; + ck_assert(::eolian_state_file_parse(state.value, filename.c_str())); + + const Eolian_Class *c_klass = ::eolian_state_class_by_name_get(state.value, target_klass.c_str()); + ck_assert_ptr_ne(c_klass, NULL); + + klass_def klass(c_klass, state.as_unit()); + return klass; +} + +EFL_START_TEST(eolian_cxx_test_properties) +{ + efl::eolian::eolian_init eolian_init; + efl::eolian::eolian_state eolian_state; + + klass_def cls = init_test_data("property_holder.eo", "Property_Holder", eolian_state); + + // FIXME Currently parsing only properties with both get/set values. + auto props = cls.properties; + ck_assert_int_eq(4, cls.properties.size()); + + ck_assert("prop_simple" == props[0].name); + ck_assert("getter_only" == props[1].name); + ck_assert("setter_only" == props[2].name); + ck_assert("prop_with_key" == props[3].name); + + auto property = props[0]; + ck_assert(property.getter.is_engaged()); + ck_assert(property.setter.is_engaged()); + ck_assert(property.getter->name == "prop_simple_get"); + ck_assert(property.setter->name == "prop_simple_set"); + auto function = std::find_if(cls.functions.cbegin(), cls.functions.cend(), [](const function_def &f) { + return f.name == "prop_simple_get"; + }); + ck_assert(*property.getter == *function); + + property = props[1]; + ck_assert(property.getter.is_engaged()); + ck_assert(!property.setter.is_engaged()); + + property = props[2]; + ck_assert(!property.getter.is_engaged()); + ck_assert(property.setter.is_engaged()); + + property = props[3]; + ck_assert(property.getter.is_engaged()); + ck_assert(property.setter.is_engaged()); + +} +EFL_END_TEST + void eolian_cxx_test_binding(TCase* tc) { @@ -233,4 +302,5 @@ eolian_cxx_test_binding(TCase* tc) tcase_add_test(tc, eolian_cxx_test_type_generation_return); tcase_add_test(tc, eolian_cxx_test_type_generation_optional); tcase_add_test(tc, eolian_cxx_test_type_callback); + tcase_add_test(tc, eolian_cxx_test_properties); } diff --git a/src/tests/eolian_cxx/eolian_cxx_test_parse.cc b/src/tests/eolian_cxx/eolian_cxx_test_parse.cc index 5462d4ef78..aa1297a0ba 100644 --- a/src/tests/eolian_cxx/eolian_cxx_test_parse.cc +++ b/src/tests/eolian_cxx/eolian_cxx_test_parse.cc @@ -12,8 +12,10 @@ EFL_START_TEST(eolian_cxx_test_parse_complex_types) { efl::eolian::eolian_init init; - // fail_if(!::eolian_state_directory_add(PACKAGE_DATA_DIR"/data")); - // fail_if(!::eolian_state_file_parse(PACKAGE_DATA_DIR"/data/complex_type.eo")); + efl::eolian::eolian_state state; + fail_if(!::eolian_state_directory_add(state.value, EO_SRC_DIR)); + fail_if(!::eolian_state_directory_add(state.value, TESTS_SRC_DIR)); + fail_if(!::eolian_state_file_parse(state.value, TESTS_SRC_DIR"/complex.eo")); // TODO finish } EFL_END_TEST diff --git a/src/tests/eolian_cxx/meson.build b/src/tests/eolian_cxx/meson.build index 1c7a961277..be2f5c37c8 100644 --- a/src/tests/eolian_cxx/meson.build +++ b/src/tests/eolian_cxx/meson.build @@ -65,6 +65,7 @@ eolian_cxx_suite = executable('eolian_cxx_suite', # package_c_args contains -D definitions for the package cpp_args : package_c_args +[ '-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"', + '-DEO_SRC_DIR="'+join_paths(meson.source_root(), 'src', 'lib')+'"', '-DTESTS_SRC_DIR="'+meson.current_source_dir()+'"'] ) diff --git a/src/tests/eolian_cxx/property_holder.eo b/src/tests/eolian_cxx/property_holder.eo new file mode 100644 index 0000000000..6c16c4ee1b --- /dev/null +++ b/src/tests/eolian_cxx/property_holder.eo @@ -0,0 +1,42 @@ +class Property_Holder extends Efl.Object +{ + methods { + some_method { + return: int; + } + + @property prop_simple { + get {} + set {} + values { + data: int; + } + } + + @property getter_only { + get {} + values { + data: int; + } + } + + @property setter_only { + set {} + values { + data: int; + } + } + + @property prop_with_key { + get {} + set {} + values { + data: int; + } + + keys { + key: string; + } + } + } +} From 1c95e64cba26ce2f7cb6710e39edf3a047175c41 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 16:44:12 -0800 Subject: [PATCH 21/86] ecore_con: simplify code by using proper helper. efl_loop_promise_new is a helper function that does automatically figure out an available scheduler and create a promise from it. Basically replacing the call to eina_promise_new(efl_loop_future_scheduler_get(o), ...). Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7333 --- src/lib/ecore_con/efl_net_control_access_point-connman.c | 3 +-- src/lib/ecore_con/efl_net_control_technology-connman.c | 3 +-- src/lib/ecore_con/efl_net_ip_address.c | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/lib/ecore_con/efl_net_control_access_point-connman.c b/src/lib/ecore_con/efl_net_control_access_point-connman.c index 4dc676846e..a54cce2a50 100644 --- a/src/lib/ecore_con/efl_net_control_access_point-connman.c +++ b/src/lib/ecore_con/efl_net_control_access_point-connman.c @@ -773,8 +773,7 @@ _efl_net_control_access_point_connect(Eo *o, Efl_Net_Control_Access_Point_Data * Eina_Promise *promise; Eina_Future *f = NULL; - promise = eina_promise_new(efl_loop_future_scheduler_get(o), - _efl_net_control_access_point_connect_promise_del, o); + promise = efl_loop_promise_new(o, _efl_net_control_access_point_connect_promise_del, o); EINA_SAFETY_ON_NULL_RETURN_VAL(promise, NULL); f = eina_future_new(promise); diff --git a/src/lib/ecore_con/efl_net_control_technology-connman.c b/src/lib/ecore_con/efl_net_control_technology-connman.c index 2389498d06..92660de83f 100644 --- a/src/lib/ecore_con/efl_net_control_technology-connman.c +++ b/src/lib/ecore_con/efl_net_control_technology-connman.c @@ -399,8 +399,7 @@ _efl_net_control_technology_scan(Eo *o, Efl_Net_Control_Technology_Data *pd) Eina_Promise *promise; Eina_Future *f = NULL; - promise = eina_promise_new(efl_loop_future_scheduler_get(o), - _efl_net_control_technology_scan_promise_del, NULL); + promise = efl_loop_promise_new(o, _efl_net_control_technology_scan_promise_del, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(promise, NULL); f = eina_future_new(promise); diff --git a/src/lib/ecore_con/efl_net_ip_address.c b/src/lib/ecore_con/efl_net_ip_address.c index e2fbb68f06..276f102f9c 100644 --- a/src/lib/ecore_con/efl_net_ip_address.c +++ b/src/lib/ecore_con/efl_net_ip_address.c @@ -572,7 +572,7 @@ _efl_net_ip_address_resolve(Eo *cls EINA_UNUSED, void *pd EINA_UNUSED, const cha ctx->thread = efl_net_ip_resolve_async_new(host, port, &hints, _efl_net_ip_address_resolve_done, ctx); EINA_SAFETY_ON_NULL_GOTO(ctx->thread, error_thread); - ctx->promise = eina_promise_new(efl_loop_future_scheduler_get(efl_main_loop_get()), _efl_net_ip_address_resolve_del, ctx); + ctx->promise = efl_loop_promise_new(efl_main_loop_get(), _efl_net_ip_address_resolve_del, ctx); EINA_SAFETY_ON_NULL_GOTO(ctx->promise, error_promise); free(str); From d20d5021de53bf109e97ad61f82a4bc5019dae02 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 16:44:37 -0800 Subject: [PATCH 22/86] eio: simplify code by using proper helper. efl_loop_promise_new is a helper function that does automatically figure out an available scheduler and create a promise from it. Basically replacing the call to eina_promise_new(efl_loop_future_scheduler_get(o), ...). Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7334 --- src/lib/eio/eio_model.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/lib/eio/eio_model.c b/src/lib/eio/eio_model.c index bf25c4cde8..b01e961f8d 100644 --- a/src/lib/eio/eio_model.c +++ b/src/lib/eio/eio_model.c @@ -417,8 +417,7 @@ _build_delay(Efl_Loop *loop) { Eina_Promise *p; - p = eina_promise_new(efl_loop_future_scheduler_get(loop), - _cancel_request, NULL); + p = efl_loop_promise_new(loop, _cancel_request, NULL); if (!delayed_queue) { @@ -684,8 +683,7 @@ _eio_model_efl_model_property_set(Eo *obj, if (finalized) { - Eina_Promise *p = eina_promise_new(efl_loop_future_scheduler_get(loop), - _efl_io_manager_future_cancel, NULL); + Eina_Promise *p = efl_loop_promise_new(loop, _efl_io_manager_future_cancel, NULL); f = eina_future_new(p); pd->request.move = eio_file_move(pd->path, path, From 76cffceb2e2b2e3b52ae98c0f3cdc121d3c10103 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 16:45:03 -0800 Subject: [PATCH 23/86] eldbus: simplify code by using proper helper. efl_loop_promise_new is a helper function that does automatically figure out an available scheduler and create a promise from it. Basically replacing the call to eina_promise_new(efl_loop_future_scheduler_get(o), ...). Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7335 --- src/lib/eldbus/eldbus_model_connection.c | 3 +-- src/lib/eldbus/eldbus_model_object.c | 3 +-- src/lib/eldbus/eldbus_model_proxy.c | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/lib/eldbus/eldbus_model_connection.c b/src/lib/eldbus/eldbus_model_connection.c index a2ed5d5b66..c58faaf33b 100644 --- a/src/lib/eldbus/eldbus_model_connection.c +++ b/src/lib/eldbus/eldbus_model_connection.c @@ -70,8 +70,7 @@ _eldbus_model_connection_efl_model_children_slice_get(Eo *obj, return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); } - p = eina_promise_new(efl_loop_future_scheduler_get(obj), - _eldbus_eina_promise_cancel, NULL); + p = efl_loop_promise_new(obj, _eldbus_eina_promise_cancel, NULL); slice = calloc(1, sizeof (Eldbus_Children_Slice_Promise)); slice->p = p; diff --git a/src/lib/eldbus/eldbus_model_object.c b/src/lib/eldbus/eldbus_model_object.c index ece21cf0db..f9106837d4 100644 --- a/src/lib/eldbus/eldbus_model_object.c +++ b/src/lib/eldbus/eldbus_model_object.c @@ -127,8 +127,7 @@ _eldbus_model_object_efl_model_children_slice_get(Eo *obj EINA_UNUSED, return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); } - p = eina_promise_new(efl_loop_future_scheduler_get(obj), - _eldbus_eina_promise_cancel, NULL); + p = efl_loop_promise_new(obj, _eldbus_eina_promise_cancel, NULL); slice = calloc(1, sizeof(struct _Eldbus_Children_Slice_Promise)); slice->p = p; diff --git a/src/lib/eldbus/eldbus_model_proxy.c b/src/lib/eldbus/eldbus_model_proxy.c index 96505caef3..073baef0ba 100644 --- a/src/lib/eldbus/eldbus_model_proxy.c +++ b/src/lib/eldbus/eldbus_model_proxy.c @@ -293,8 +293,7 @@ _eldbus_model_proxy_efl_model_property_set(Eo *obj EINA_UNUSED, if (!data) goto on_error; data->pd = pd; - data->promise = eina_promise_new(efl_loop_future_scheduler_get(obj), - _eldbus_model_proxy_cancel_cb, data); + data->promise = efl_loop_promise_new(obj, _eldbus_model_proxy_cancel_cb, data); data->property = eina_stringshare_add(property); if (!(data->value = eina_value_dup(value))) goto on_error; From 11be2ae23463262538d1e12475b11a61b0c9a84f Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 16:45:17 -0800 Subject: [PATCH 24/86] elementary: simplify code by using proper helper. efl_loop_promise_new is a helper function that does automatically figure out an available scheduler and create a promise from it. Basically replacing the call to eina_promise_new(efl_loop_future_scheduler_get(o), ...). Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7336 --- src/lib/elementary/efl_selection_manager.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/elementary/efl_selection_manager.c b/src/lib/elementary/efl_selection_manager.c index fc0c503c79..42d66a9918 100644 --- a/src/lib/elementary/efl_selection_manager.c +++ b/src/lib/elementary/efl_selection_manager.c @@ -247,8 +247,7 @@ _update_sel_lost_list(Efl_Object *obj, Efl_Selection_Type type, sel_lost->seat_sel = seat_sel; seat_sel->sel_lost_list = eina_list_append(seat_sel->sel_lost_list, sel_lost); - p = eina_promise_new(efl_loop_future_scheduler_get(obj), - _sel_manager_promise_cancel, NULL); + p = efl_loop_promise_new(obj, _sel_manager_promise_cancel, NULL); eina_promise_data_set(p, sel_lost); if (!p) return NULL; sel_lost->promise = p; From bf82792a22568323d991cb6c37b135a24a1c2418 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 17:11:54 -0800 Subject: [PATCH 25/86] ecore: add an helper on Efl.Loop_Consumer to build resolved and rejected future more easily. This make all object that inherit from Efl.Loop_Consumer have an easy ability to create a future from their link to a loop provider. This way there is no need to further lookup for a scheduler. This can by applied after the patch series from T7471. Reviewed-by: Xavi Artigas Differential Revision: https://phab.enlightenment.org/D7337 --- src/lib/ecore/efl_loop_consumer.c | 14 ++++++++++++++ src/lib/ecore/efl_loop_consumer.eo | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/lib/ecore/efl_loop_consumer.c b/src/lib/ecore/efl_loop_consumer.c index 795b5fcfd0..29e94ed52d 100644 --- a/src/lib/ecore/efl_loop_consumer.c +++ b/src/lib/ecore/efl_loop_consumer.c @@ -36,4 +36,18 @@ _efl_loop_consumer_efl_object_parent_set(Eo *obj, Efl_Loop_Consumer_Data *pd EIN efl_parent_set(efl_super(obj, EFL_LOOP_CONSUMER_CLASS), parent); } +static Eina_Future * +_efl_loop_consumer_future_resolved(Eo *obj, Efl_Loop_Consumer_Data *pd EINA_UNUSED, + Eina_Value result) +{ + return eina_future_resolved(efl_loop_future_scheduler_get(obj), result); +} + +static Eina_Future * +_efl_loop_consumer_future_rejected(Eo *obj, Efl_Loop_Consumer_Data *pd EINA_UNUSED, + Eina_Error error) +{ + return eina_future_rejected(efl_loop_future_scheduler_get(obj), error); +} + #include "efl_loop_consumer.eo.c" diff --git a/src/lib/ecore/efl_loop_consumer.eo b/src/lib/ecore/efl_loop_consumer.eo index e486567ed5..4d7484e13c 100644 --- a/src/lib/ecore/efl_loop_consumer.eo +++ b/src/lib/ecore/efl_loop_consumer.eo @@ -14,6 +14,18 @@ class Efl.Loop_Consumer (Efl.Object) loop: Efl.Loop; [[Efl loop]] } } + future_resolved { + params { + result: any_value; + } + return: future; + } + future_rejected { + params { + error: Eina.Error; + } + return: future; + } } implements { Efl.Object.parent { set; } From 0b8da6e945ebec7855cd54a537d4e868a0fffe76 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 17:13:43 -0800 Subject: [PATCH 26/86] eio: we do not need to actually loop explicitely for the loop here. Actually efl_loop_future_scheduler_get does lookup on the object and its provider someone that could be a loop provider and find a scheduler. There is no need to custom look for a loop provider. Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7338 --- src/lib/eio/eio_model.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/eio/eio_model.c b/src/lib/eio/eio_model.c index b01e961f8d..529582ffba 100644 --- a/src/lib/eio/eio_model.c +++ b/src/lib/eio/eio_model.c @@ -660,7 +660,6 @@ _eio_model_efl_model_property_set(Eo *obj, Eio_Model_Data *pd, const char *property, Eina_Value *value) { - Eo *loop = efl_provider_find(obj, EFL_LOOP_CLASS); const char *path; Eina_Future *f; Eina_Value s = EINA_VALUE_EMPTY; @@ -683,7 +682,7 @@ _eio_model_efl_model_property_set(Eo *obj, if (finalized) { - Eina_Promise *p = efl_loop_promise_new(loop, _efl_io_manager_future_cancel, NULL); + Eina_Promise *p = efl_loop_promise_new(obj, _efl_io_manager_future_cancel, NULL); f = eina_future_new(p); pd->request.move = eio_file_move(pd->path, path, @@ -697,14 +696,14 @@ _eio_model_efl_model_property_set(Eo *obj, } else { - f = eina_future_resolved(efl_loop_future_scheduler_get(loop), + f = eina_future_resolved(efl_loop_future_scheduler_get(obj), eina_value_string_init(pd->path)); } return efl_future_then(obj, f); on_error: - return eina_future_rejected(efl_loop_future_scheduler_get(loop), err); + return eina_future_rejected(efl_loop_future_scheduler_get(obj), err); } static void From 6600a035c61aeafecbe99e56767a39cd394def26 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 17:14:16 -0800 Subject: [PATCH 27/86] eio: simplify code by using helper that generate future directly. The new helper help replace call to eina_future_resolved and eina_future_rejected with a scheduler lookup to just one function call. Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7339 --- src/lib/eio/eio_model.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/eio/eio_model.c b/src/lib/eio/eio_model.c index 529582ffba..309af24a01 100644 --- a/src/lib/eio/eio_model.c +++ b/src/lib/eio/eio_model.c @@ -696,14 +696,14 @@ _eio_model_efl_model_property_set(Eo *obj, } else { - f = eina_future_resolved(efl_loop_future_scheduler_get(obj), + f = efl_loop_future_resolved(obj, eina_value_string_init(pd->path)); } return efl_future_then(obj, f); on_error: - return eina_future_rejected(efl_loop_future_scheduler_get(obj), err); + return efl_loop_future_rejected(obj, err); } static void From 29faf24a1daf9e304264c5df6f3a9d469075057e Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 17:14:51 -0800 Subject: [PATCH 28/86] eldbus: simplify code by using helper that create future directly. The new helper help replace call to eina_future_resolved and eina_future_rejected with a scheduler lookup to just one function call. Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7340 --- src/lib/eldbus/eldbus_model.c | 4 ++-- src/lib/eldbus/eldbus_model_arguments.c | 4 ++-- src/lib/eldbus/eldbus_model_connection.c | 2 +- src/lib/eldbus/eldbus_model_object.c | 2 +- src/lib/eldbus/eldbus_model_proxy.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib/eldbus/eldbus_model.c b/src/lib/eldbus/eldbus_model.c index 3a2115ead0..ff37b60905 100644 --- a/src/lib/eldbus/eldbus_model.c +++ b/src/lib/eldbus/eldbus_model.c @@ -123,7 +123,7 @@ _eldbus_model_efl_model_property_set(Eo *obj, if (strcmp(property, UNIQUE_NAME_PROPERTY)) err = EFL_MODEL_ERROR_NOT_FOUND; - return eina_future_rejected(efl_loop_future_scheduler_get(obj), err); + return efl_loop_future_rejected(obj, err); } static Eina_Value * @@ -181,7 +181,7 @@ _eldbus_model_efl_model_children_slice_get(Eo *obj EINA_UNUSED, unsigned int start EINA_UNUSED, unsigned int count EINA_UNUSED) { - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_NOT_SUPPORTED); } diff --git a/src/lib/eldbus/eldbus_model_arguments.c b/src/lib/eldbus/eldbus_model_arguments.c index 378139111a..f5ee2ace82 100644 --- a/src/lib/eldbus/eldbus_model_arguments.c +++ b/src/lib/eldbus/eldbus_model_arguments.c @@ -143,11 +143,11 @@ _eldbus_model_arguments_efl_model_property_set(Eo *obj, eina_value_flush(prop_value); eina_value_copy(value, prop_value); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), + return efl_loop_future_resolved(obj, eina_value_reference_copy(value)); on_error: - return eina_future_rejected(efl_loop_future_scheduler_get(obj), err); + return efl_loop_future_rejected(obj, err); } static Eina_Value * diff --git a/src/lib/eldbus/eldbus_model_connection.c b/src/lib/eldbus/eldbus_model_connection.c index c58faaf33b..175afcd924 100644 --- a/src/lib/eldbus/eldbus_model_connection.c +++ b/src/lib/eldbus/eldbus_model_connection.c @@ -67,7 +67,7 @@ _eldbus_model_connection_efl_model_children_slice_get(Eo *obj, Eina_Value v; v = efl_model_list_value_get(pd->childrens, start, count); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); + return efl_loop_future_resolved(obj, v); } p = efl_loop_promise_new(obj, _eldbus_eina_promise_cancel, NULL); diff --git a/src/lib/eldbus/eldbus_model_object.c b/src/lib/eldbus/eldbus_model_object.c index f9106837d4..3759fc3f8f 100644 --- a/src/lib/eldbus/eldbus_model_object.c +++ b/src/lib/eldbus/eldbus_model_object.c @@ -124,7 +124,7 @@ _eldbus_model_object_efl_model_children_slice_get(Eo *obj EINA_UNUSED, Eina_Value v; v = efl_model_list_value_get(pd->childrens, start, count); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); + return efl_loop_future_resolved(obj, v); } p = efl_loop_promise_new(obj, _eldbus_eina_promise_cancel, NULL); diff --git a/src/lib/eldbus/eldbus_model_proxy.c b/src/lib/eldbus/eldbus_model_proxy.c index 073baef0ba..4da54ad7f4 100644 --- a/src/lib/eldbus/eldbus_model_proxy.c +++ b/src/lib/eldbus/eldbus_model_proxy.c @@ -312,7 +312,7 @@ _eldbus_model_proxy_efl_model_property_set(Eo *obj EINA_UNUSED, return efl_future_then(obj, eina_future_new(data->promise)); on_error: - return eina_future_rejected(efl_loop_future_scheduler_get(obj), err); + return efl_loop_future_rejected(obj, err); } static Eina_Value * @@ -380,7 +380,7 @@ _eldbus_model_proxy_efl_model_children_slice_get(Eo *obj EINA_UNUSED, _eldbus_model_proxy_listed(pd); v = efl_model_list_value_get(pd->childrens, start, count); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); + return efl_loop_future_resolved(obj, v); } static unsigned int From 7f733378b9658ebb01ddfe91c6d9254c8c94d0d7 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 17:15:29 -0800 Subject: [PATCH 29/86] ecore: simplify code by using helper that build future directly. The new helper help replace call to eina_future_resolved and eina_future_rejected with a scheduler lookup to just one function call. Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7341 --- src/lib/ecore/efl_model_composite_boolean.c | 15 +++++++-------- src/lib/ecore/efl_model_composite_selection.c | 19 ++++++++----------- src/lib/ecore/efl_model_container.c | 4 ++-- src/lib/ecore/efl_model_container_item.c | 10 +++++----- src/lib/ecore/efl_model_item.c | 6 +++--- 5 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/lib/ecore/efl_model_composite_boolean.c b/src/lib/ecore/efl_model_composite_boolean.c index e710091288..222329eb3b 100644 --- a/src/lib/ecore/efl_model_composite_boolean.c +++ b/src/lib/ecore/efl_model_composite_boolean.c @@ -121,10 +121,10 @@ _efl_model_composite_boolean_children_efl_model_property_set(Eo *obj, Eina_Bool flag; if (!property) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_UNKNOWN); if (strcmp(property, "child.index") == 0) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_READ_ONLY); s = eina_stringshare_add(property); @@ -137,10 +137,10 @@ _efl_model_composite_boolean_children_efl_model_property_set(Eo *obj, eina_value_setup(&b, EINA_VALUE_TYPE_BOOL); if (!eina_value_convert(value, &b)) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_UNKNOWN); if (!eina_value_get(value, &flag)) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_UNKNOWN); eina_value_flush(&b); @@ -153,7 +153,7 @@ _efl_model_composite_boolean_children_efl_model_property_set(Eo *obj, unsigned char *tmp; tmp = realloc(v->buffer, rcount); - if (!tmp) return eina_future_rejected(efl_loop_future_scheduler_get(obj), ENOMEM); + if (!tmp) return efl_loop_future_rejected(obj, ENOMEM); v->buffer = tmp; memset(v->buffer + v->buffer_count, 0, rcount - v->buffer_count); v->buffer_count = rcount; @@ -169,8 +169,7 @@ _efl_model_composite_boolean_children_efl_model_property_set(Eo *obj, efl_model_properties_changed(obj, property); // Return fulfilled future - return eina_future_resolved(efl_loop_future_scheduler_get(obj), - eina_value_bool_init(!!flag)); + return efl_loop_future_resolved(obj, eina_value_bool_init(!!flag)); } /**************** efl_model_composite_boolean **************/ @@ -291,7 +290,7 @@ _efl_model_composite_boolean_efl_model_children_slice_get(Eo *obj, start, count); req = malloc(sizeof (Efl_Model_Slice_Request)); - if (!req) return eina_future_rejected(efl_loop_future_scheduler_get(obj), + if (!req) return efl_loop_future_rejected(obj, ENOMEM); req->parent = efl_ref(obj); req->start = start; diff --git a/src/lib/ecore/efl_model_composite_selection.c b/src/lib/ecore/efl_model_composite_selection.c index cb35c0f0ce..25f68c2f5f 100644 --- a/src/lib/ecore/efl_model_composite_selection.c +++ b/src/lib/ecore/efl_model_composite_selection.c @@ -126,8 +126,7 @@ _check_child_change(Efl_Model *child, Eina_Bool value) if (prevflag & value) { - r = eina_future_resolved(efl_loop_future_scheduler_get(child), - eina_value_bool_init(value)); + r = efl_loop_future_resolved(child, eina_value_bool_init(value)); } else { @@ -217,10 +216,9 @@ _efl_model_composite_selection_efl_model_property_set(Eo *obj, changed = (!pd->exclusive != !exclusive); pd->exclusive = !!exclusive; - if (changed) - efl_model_properties_changed(obj, "exclusive"); + if (changed) efl_model_properties_changed(obj, "exclusive"); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), vf); + return efl_loop_future_resolved(obj, vf); } if (!strcmp("selected", property)) @@ -233,7 +231,7 @@ _efl_model_composite_selection_efl_model_property_set(Eo *obj, success &= eina_value_convert(value, &vl); success &= eina_value_ulong_get(&vl, &l); if (!success) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), EFL_MODEL_ERROR_INCORRECT_VALUE); + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_INCORRECT_VALUE); return efl_future_then (obj, eina_future_then(efl_model_children_slice_get(obj, l, 1), @@ -346,11 +344,11 @@ _efl_model_composite_selection_children_efl_model_property_set(Eo *obj, eina_value_flush(&lvb); if (!success) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), EFL_MODEL_ERROR_INCORRECT_VALUE); + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_INCORRECT_VALUE); // Nothing changed if (newflag == prevflag) - return eina_future_resolved(efl_loop_future_scheduler_get(obj), + return efl_loop_future_resolved(obj, eina_value_bool_init(newflag)); ve = efl_model_property_get(efl_parent_get(obj), "exclusive"); @@ -402,8 +400,7 @@ _efl_model_composite_selection_children_efl_model_property_set(Eo *obj, eina_value_free(vs); if (!success) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), - EFL_MODEL_ERROR_INCORRECT_VALUE); + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_INCORRECT_VALUE); // There was, need to unselect the previous one along setting the new value chain = eina_future_all(chain, @@ -469,7 +466,7 @@ _efl_model_composite_selection_efl_model_children_slice_get(Eo *obj, Eina_Future *f; req = calloc(1, sizeof (Selection_Children_Request)); - if (!req) return eina_future_rejected(efl_loop_future_scheduler_get(obj), ENOMEM); + if (!req) return efl_loop_future_rejected(obj, ENOMEM); req->parent = efl_ref(obj); req->start = start; diff --git a/src/lib/ecore/efl_model_container.c b/src/lib/ecore/efl_model_container.c index ce5dc493aa..100c171567 100644 --- a/src/lib/ecore/efl_model_container.c +++ b/src/lib/ecore/efl_model_container.c @@ -233,7 +233,7 @@ _efl_model_container_efl_model_property_set(Eo *obj, const char *property EINA_UNUSED, Eina_Value *value EINA_UNUSED) { - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_NOT_FOUND); } @@ -254,7 +254,7 @@ _efl_model_container_efl_model_children_slice_get(Eo *obj, Eina_Value v; v = efl_model_list_value_get(sd->childrens, start, count); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); + return efl_loop_future_resolved(obj, v); } static unsigned int diff --git a/src/lib/ecore/efl_model_container_item.c b/src/lib/ecore/efl_model_container_item.c index c3fa8d0c90..ec61f8ea28 100644 --- a/src/lib/ecore/efl_model_container_item.c +++ b/src/lib/ecore/efl_model_container_item.c @@ -58,12 +58,12 @@ _efl_model_container_item_efl_model_property_set(Eo *obj, if (!cpd || !cpd->values || sd->index >= eina_array_count_get(cpd->values)) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_NOT_FOUND); eina_value_setup(&v,cpd->type); if (!eina_value_convert(value, &v)) - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_INCORRECT_VALUE); // FIXME: This is trying to optimize and avoid the use of Eina_Value, @@ -80,13 +80,13 @@ _efl_model_container_item_efl_model_property_set(Eo *obj, free(data); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); + return efl_loop_future_resolved(obj, v); on_error: eina_value_flush(&v); free(data); - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_UNKNOWN); } @@ -132,7 +132,7 @@ _efl_model_container_item_efl_model_children_slice_get(Eo *obj, unsigned int start EINA_UNUSED, unsigned int count EINA_UNUSED) { - return eina_future_resolved(efl_loop_future_scheduler_get(obj), EINA_VALUE_EMPTY); + return efl_loop_future_resolved(obj, EINA_VALUE_EMPTY); } EOLIAN static unsigned int diff --git a/src/lib/ecore/efl_model_item.c b/src/lib/ecore/efl_model_item.c index 13f60292c9..7e009e364c 100644 --- a/src/lib/ecore/efl_model_item.c +++ b/src/lib/ecore/efl_model_item.c @@ -97,7 +97,7 @@ _efl_model_item_efl_model_property_set(Eo *obj, Efl_Model_Item_Data *pd, const c eina_array_free(evt.changed_properties); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), + return efl_loop_future_resolved(obj, eina_value_reference_copy(value)); hash_failed: @@ -105,7 +105,7 @@ _efl_model_item_efl_model_property_set(Eo *obj, Efl_Model_Item_Data *pd, const c value_failed: eina_stringshare_del(prop); - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, ENOMEM); } @@ -133,7 +133,7 @@ _efl_model_item_efl_model_children_slice_get(Eo *obj, Efl_Model_Item_Data *pd, u Eina_Value v; v = efl_model_list_value_get(pd->childrens, start, count); - return eina_future_resolved(efl_loop_future_scheduler_get(obj), v); + return efl_loop_future_resolved(obj, v); } static unsigned int From 108069fa62708d80b5b497d221c9859168474689 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 22 Nov 2018 17:16:09 -0800 Subject: [PATCH 30/86] ecore_con: simplify code by using helper that create future directly. The new helper help replace call to eina_future_resolved and eina_future_rejected with a scheduler lookup to just one function call. Reviewed-by: Xavi Artigas Reviewed-by: Vitor Sousa da Silva Differential Revision: https://phab.enlightenment.org/D7342 --- src/lib/ecore_con/efl_net_control_access_point-none.c | 2 +- src/lib/ecore_con/efl_net_control_technology-none.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore_con/efl_net_control_access_point-none.c b/src/lib/ecore_con/efl_net_control_access_point-none.c index a32784d2b5..e1f904dc36 100644 --- a/src/lib/ecore_con/efl_net_control_access_point-none.c +++ b/src/lib/ecore_con/efl_net_control_access_point-none.c @@ -192,7 +192,7 @@ _efl_net_control_access_point_configuration_proxy_get(const Eo *obj EINA_UNUSED, EOLIAN static Eina_Future * _efl_net_control_access_point_connect(Eo *obj EINA_UNUSED, Efl_Net_Control_Access_Point_Data *pd EINA_UNUSED) { - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EINA_ERROR_NOT_IMPLEMENTED); } diff --git a/src/lib/ecore_con/efl_net_control_technology-none.c b/src/lib/ecore_con/efl_net_control_technology-none.c index 3ef3d4bbaa..dedf07f31a 100644 --- a/src/lib/ecore_con/efl_net_control_technology-none.c +++ b/src/lib/ecore_con/efl_net_control_technology-none.c @@ -59,7 +59,7 @@ _efl_net_control_technology_type_get(const Eo *obj EINA_UNUSED, Efl_Net_Control_ EOLIAN static Eina_Future * _efl_net_control_technology_scan(Eo *obj, Efl_Net_Control_Technology_Data *pd EINA_UNUSED) { - return eina_future_rejected(efl_loop_future_scheduler_get(obj), + return efl_loop_future_rejected(obj, EINA_ERROR_NOT_IMPLEMENTED); } From fe49d57bfe681e73eac0bf296a78e2626eff23a8 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Mon, 3 Dec 2018 10:41:43 +0100 Subject: [PATCH 31/86] eolian tests: revert incorrect change resulting in failed parsing Commit 98b716d0fa745fe5aa4d110615bf0dd90f695ddb modified this file for no apparent reason, breaking tests. --- src/tests/eolian/data/complex_type.eo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/eolian/data/complex_type.eo b/src/tests/eolian/data/complex_type.eo index 9751bec5ed..e8fe1a785e 100644 --- a/src/tests/eolian/data/complex_type.eo +++ b/src/tests/eolian/data/complex_type.eo @@ -4,7 +4,7 @@ class Complex_Type { methods { @property a { set { - return: list > @owned; + return: list > @owned; } get { } From 09f648ed810b598418859b32d5358183748daec1 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 22 Nov 2018 11:45:00 +0000 Subject: [PATCH 32/86] ecore_evas - fix aninmator based frame render ticking to full framerate so i was seeing ecore evas only rendering every 2nd frame... this is because it was adding and deleting animatiors every time it rendered instead of keeping one around as lon as updates where there to render and then remove it afterwards. this caused nasty timing problems and thus problems assessing framerate of rendered content etc. etc. ... not good. this fixes that. this only happened if you only used pure legacy ecore animators. if you used the efl animator tick events it worked right. @fix --- src/lib/ecore_evas/ecore_evas.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c index f63463ad3e..109b5ef79a 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -120,9 +120,6 @@ _ecore_evas_animator(void *data, const Efl_Event *ev EINA_UNUSED) Ecore_Evas *ee = data; ee->animator_ticked = EINA_TRUE; - - efl_event_callback_del(ee->evas, EFL_EVENT_ANIMATOR_TICK, _ecore_evas_animator, ee); - ee->animator_registered = EINA_FALSE; } static Eina_Bool @@ -308,6 +305,11 @@ _ecore_evas_idle_enter(void *data EINA_UNUSED) if (ee->engine.func->fn_evas_changed) ee->engine.func->fn_evas_changed(ee, change); + if (!change) + { + efl_event_callback_del(ee->evas, EFL_EVENT_ANIMATOR_TICK, _ecore_evas_animator, ee); + ee->animator_registered = EINA_FALSE; + } #ifdef ECORE_EVAS_ASYNC_RENDER_DEBUG if ((ee->in_async_render) && (ee->async_render_start <= 0.0)) { @@ -3284,7 +3286,10 @@ _ticking_start(Ecore_Evas *ee) { // Backend doesn't support per window vsync, fallback to generic support if (ee->animator_count++ > 0) return; - ee->anim = ecore_animator_add(_ecore_evas_animator_fallback, ee); + if (!ee->anim) + { + ee->anim = ecore_animator_add(_ecore_evas_animator_fallback, ee); + } } } @@ -3304,8 +3309,11 @@ _ticking_stop(Ecore_Evas *ee) { // Backend doesn't support per window vsync, fallback to generic support if (--ee->animator_count > 0) return; - ecore_animator_del(ee->anim); - ee->anim = NULL; + if (ee->anim) + { + ecore_animator_del(ee->anim); + ee->anim = NULL; + } } } From 9315c220d55be9cccb05192cf53628d3548884cb Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 22 Nov 2018 16:48:56 +0000 Subject: [PATCH 33/86] elm perf tool - bring one back to efl expedite is basically dead. because it's out of tree and because it was ported to eo too early... but it's also not a great tool given it requires manual addition of engines and can't test elm stuff (complex widgets). so this is an elm based performance tool. i've added some tests (taken from expedite and modified a bit). to get the ball rolling. the idea is to add all the important core tests (rects, images, text, video etc.) and then add widget/smart object like tests that go beyond what expedite did. the problem with these tests is they are dependent on theme. there isn't really any way around that... but i might categorize tests in the end. @feature --- .../desktop/elementary_perf.desktop | 8 + data/elementary/desktop/meson.build | 5 +- src/bin/elementary/meson.build | 25 +- src/bin/elementary/perf.c | 301 +++++ src/bin/elementary/perf.h | 16 + src/bin/elementary/perf_list.c | 6 + src/bin/elementary/perf_rnd.c | 1047 +++++++++++++++++ src/bin/elementary/perf_test_01.c | 45 + src/bin/elementary/perf_test_02.c | 45 + src/bin/elementary/perf_test_03.c | 45 + src/bin/elementary/perf_test_04.c | 45 + src/bin/elementary/perf_test_05.c | 45 + src/bin/elementary/perf_test_06.c | 45 + 13 files changed, 1676 insertions(+), 2 deletions(-) create mode 100644 data/elementary/desktop/elementary_perf.desktop create mode 100644 src/bin/elementary/perf.c create mode 100644 src/bin/elementary/perf.h create mode 100644 src/bin/elementary/perf_list.c create mode 100644 src/bin/elementary/perf_rnd.c create mode 100644 src/bin/elementary/perf_test_01.c create mode 100644 src/bin/elementary/perf_test_02.c create mode 100644 src/bin/elementary/perf_test_03.c create mode 100644 src/bin/elementary/perf_test_04.c create mode 100644 src/bin/elementary/perf_test_05.c create mode 100644 src/bin/elementary/perf_test_06.c diff --git a/data/elementary/desktop/elementary_perf.desktop b/data/elementary/desktop/elementary_perf.desktop new file mode 100644 index 0000000000..be7b42d07c --- /dev/null +++ b/data/elementary/desktop/elementary_perf.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=Elementary Perf +Comment=Elementary Performance Test Application +Icon=elementary +Exec=elementary_perf +Terminal=false +Categories=Development;Utility; diff --git a/data/elementary/desktop/meson.build b/data/elementary/desktop/meson.build index 9acaa8f1fb..87a72eece6 100644 --- a/data/elementary/desktop/meson.build +++ b/data/elementary/desktop/meson.build @@ -1,4 +1,7 @@ -desktop_files = files('elementary_config.desktop', 'elementary_test.desktop') +desktop_files = files( + 'elementary_config.desktop', + 'elementary_test.desktop', + 'elementary_perf.desktop') elementary_icon = files('elementary.png') install_data(desktop_files, diff --git a/src/bin/elementary/meson.build b/src/bin/elementary/meson.build index ec2ea225f0..d345af973b 100644 --- a/src/bin/elementary/meson.build +++ b/src/bin/elementary/meson.build @@ -210,7 +210,6 @@ elm_prefs_cc_src = [ 'elm_prefs_cc_out.c', 'elm_prefs_cc_parse.c', 'elm_prefs_cc_handlers.c' - ] elm_prefs_cc = executable('elm_prefs_cc', @@ -232,3 +231,27 @@ elementary_run = executable('elementary_run', c_args : package_c_args, link_args: '-rdynamic' ) + +elementary_perf_src = [ + 'perf.c', + 'perf_rnd.c', + 'perf_test_01.c', + 'perf_test_02.c', + 'perf_test_03.c', + 'perf_test_04.c', + 'perf_test_05.c', + 'perf_test_06.c' +] + +elementary_perf = executable('elementary_perf', + elementary_perf_src, + dependencies: [elementary] + elementary_deps + elementary_pub_deps, + install: true, + c_args : package_c_args + [ + '-Delementary_test_BIN_DIR="'+dir_bin+'"', + '-Delementary_test_LIB_DIR="'+dir_lib+'"', + '-Delementary_test_DATA_DIR="'+join_paths(dir_data,'elementary')+'"' + ], + link_args: '-rdynamic' +) + diff --git a/src/bin/elementary/perf.c b/src/bin/elementary/perf.c new file mode 100644 index 0000000000..3cca032d99 --- /dev/null +++ b/src/bin/elementary/perf.c @@ -0,0 +1,301 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif +#include +#include "perf.h" +/////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +static Evas *evas; +static Evas_Object *win, *bg; +static double total_time = 0.0; +static int total_frames = 0; +/////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + void (*init) (Evas *e); + void (*tick) (Evas *e, double pos, Evas_Coord win_w, Evas_Coord win_h); + const char *desc; + double weight; +} Test; + +static Eina_List *cleanup_list = NULL; + +void +cleanup_add(Evas_Object *o) +{ + cleanup_list = eina_list_append(cleanup_list, o); +} + +#define T2 +#include "perf_list.c" +#undef T2 + +#define T1 +static Test tests[] = { +#define TFUN(x) test_ ## x ## _init, test_ ## x ## _tick +#include "perf_list.c" + { NULL, NULL, NULL, 0.0 } +}; +#undef T1 + +static unsigned int test_pos = 0; +static double time_start = 0.0; +static double anim_tick_delta_total = 0.0; +static int anim_tick_total = 0; +static Eina_Array *tests_to_do = NULL; +static double tests_fps = 0.0; +static double tests_weights = 0.0; +static double run_time = 5.0; +static double spin_up_delay = 2.0; + +static void all_tests(Evas *e); + +static Eina_Bool +next_test_delay(void *data EINA_UNUSED) +{ + all_tests(data); + return EINA_FALSE; +} + +#define ANIMATOR 1 + +#ifdef ANIMATOR +static Ecore_Animator *animator = NULL; + +static Eina_Bool +anim_tick(void *data) +#else +static void +anim_tick(void *data, const Efl_Event *event EINA_UNUSED) +#endif +{ + Evas_Coord win_w, win_h; + double f = ecore_time_get() - time_start; + static double pf = 0.0; + int p; + + if (total_frames == 1) time_start = ecore_time_get(); + if (anim_tick_total == 1) + { + anim_tick_delta_total = 0.0; + pf = f; + } + else + { + anim_tick_delta_total += (f - pf); + } + anim_tick_total++; + pf = f; + f = f / run_time; // time per test - 5sec. + p = (int)(uintptr_t)eina_array_data_get(tests_to_do, test_pos) - 1; + evas_output_viewport_get(data, NULL, NULL, &win_w, &win_h); + tests[p].tick(data, f, win_w, win_h); + if (f >= 1.0) + { + Evas_Object *o; + double time_spent = ecore_time_get() - time_start; + double load = total_time / time_spent; + + // only got 1 frame rendered? eek. just assume we got one + if (total_frames < 2) total_frames = 2; + if (anim_tick_total < 2) anim_tick_total = 2; + if ((load <= 0.0) || (anim_tick_delta_total <= 0.0) || + (run_time <= 0)) + { + printf("?? | %s\n", tests[p].desc); + } + else + { + printf("%1.2f (fr=%i load=%1.5f tick=%i@%1.2fHz) | %1.2f %s\n", + (double)(total_frames - 2) / (load * run_time), + total_frames - 2, + load, + anim_tick_total - 2, + (double)(anim_tick_total - 2) / anim_tick_delta_total, + tests[p].weight, + tests[p].desc); + tests_fps += ((double)(total_frames - 2) / (load * run_time)) * + tests[p].weight; + tests_weights += tests[p].weight; + } + total_frames = 0.0; + total_time = 0.0; + EINA_LIST_FREE(cleanup_list, o) evas_object_del(o); + test_pos++; +#ifdef ANIMATOR + ecore_animator_del(animator); + animator = NULL; +#else + efl_event_callback_del(win, EFL_EVENT_ANIMATOR_TICK, anim_tick, data); +#endif + ecore_timer_add(0.5, next_test_delay, data); + } +#ifdef ANIMATOR + return EINA_TRUE; +#endif +} + +static Eina_Bool +exit_delay(void *data EINA_UNUSED) +{ + elm_exit(); + return EINA_FALSE; +} + +static void +all_tests(Evas *e) +{ + Evas_Coord win_w, win_h; + int p; + + evas_output_viewport_get(e, NULL, NULL, &win_w, &win_h); + if (test_pos >= eina_array_count_get(tests_to_do)) + { + printf("--------------------------------------------------------------------------------\n"); + printf("Average weighted FPS: %1.2f\n", tests_fps / tests_weights); + printf("--------------------------------------------------------------------------------\n"); + ecore_timer_add(1.0, exit_delay, NULL); + return; + } + p = (int)(uintptr_t)eina_array_data_get(tests_to_do, test_pos) - 1; + tests[p].init(e); + tests[p].tick(e, 0.0, win_h, win_h); + time_start = ecore_time_get(); + anim_tick_delta_total = 0.0; + anim_tick_total = 0; +#ifdef ANIMATOR + animator = ecore_animator_add(anim_tick, e); +#else + efl_event_callback_add(win, EFL_EVENT_ANIMATOR_TICK, anim_tick, e); +#endif +} + +static Eina_Bool +all_tests_delay(void *data) +{ + all_tests(data); + return EINA_FALSE; +} + +static double rtime = 0.0; + +static void +render_pre(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *info EINA_UNUSED) +{ + rtime = ecore_time_get(); +} + +static void +render_post(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *info EINA_UNUSED) +{ + double spent = ecore_time_get() - rtime; + if (total_frames == 2) total_time = 0.0; + total_time += spent; + total_frames++; +} + +static Eina_Bool +_spincpu_up_idler(void *data EINA_UNUSED) +{ + return EINA_TRUE; +} + +/////////////////////////////////////////////////////////////////////////////// +EAPI int +elm_main(int argc, char **argv) +{ + int i, j; + + for (i = 1; i < argc; i++) + { + if ((!strcmp(argv[i], "--help")) || + (!strcmp(argv[i], "-help")) || + (!strcmp(argv[i], "-h"))) + { + printf("Usage:\n" + " -h : This help\n" + " -l : List all tests\n" + " -t N : Run test number N\n" + " -r N : Run each test for N seconds\n" + " -d N : Initial spin-up delay\n" + "\n"); + elm_exit(); + return 1; + } + else if (!strcmp(argv[i], "-l")) + { + for (j = 0; tests[j].init; j++) + { + printf(" %3i | %s\n", j, tests[j].desc); + } + elm_exit(); + return 1; + } + else if ((!strcmp(argv[i], "-t")) && (i < (argc - 1))) + { + i++; + if (!tests_to_do) tests_to_do = eina_array_new(32); + eina_array_push(tests_to_do, (void *)(uintptr_t)atoi(argv[i])); + } + else if ((!strcmp(argv[i], "-r")) && (i < (argc - 1))) + { + i++; + run_time = atof(argv[i]); + } + else if ((!strcmp(argv[i], "-d")) && (i < (argc - 1))) + { + i++; + spin_up_delay = atof(argv[i]); + } + } + if (!tests_to_do) + { + tests_to_do = eina_array_new(32); + for (j = 0; tests[j].init; j++) + { + eina_array_push(tests_to_do, (void *)(uintptr_t)(j + 1)); + } + } + elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR); + elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR); + elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); + elm_app_info_set(elm_main, "elementary", "images/logo.png"); + + win = elm_win_add(NULL, "main", ELM_WIN_BASIC); + if (!win) + { + elm_exit(); + return 1; + } + evas = evas_object_evas_get(win); + elm_win_autodel_set(win, EINA_TRUE); + elm_win_title_set(win, "Elementary Performace Test"); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + + bg = evas_object_rectangle_add(evas); + evas_object_color_set(bg, 128, 128, 128, 255); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + evas_event_callback_add(evas, EVAS_CALLBACK_RENDER_PRE, render_pre, NULL); + evas_event_callback_add(evas, EVAS_CALLBACK_RENDER_FLUSH_POST, render_post, NULL); + + ecore_idler_add(_spincpu_up_idler, NULL); + printf("--------------------------------------------------------------------------------\n"); + printf("Performance Test Engine: %s\n", + ecore_evas_engine_name_get(ecore_evas_ecore_evas_get(evas))); + printf("--------------------------------------------------------------------------------\n"); + ecore_timer_add(spin_up_delay, all_tests_delay, evas); + + evas_object_resize(win, 800, 800); + evas_object_show(win); + + elm_run(); + + return 0; +} +ELM_MAIN() +/////////////////////////////////////////////////////////////////////////////// diff --git a/src/bin/elementary/perf.h b/src/bin/elementary/perf.h new file mode 100644 index 0000000000..17a1a610c3 --- /dev/null +++ b/src/bin/elementary/perf.h @@ -0,0 +1,16 @@ +#include + +#define NUM_MANY 1024 +#define NUM 64 +#define NUM_FEW 8 + +void srnd(void); +unsigned int rnd(void); + +void cleanup_add(Evas_Object *o); + +#define TST(x, y) \ + void test_ ## x ## _ ## y +#define TPROT(x) \ + TST(x, init)(Evas *e); \ + TST(x, tick)(Evas *e, double f, Evas_Coord win_w, Evas_Coord win_h) diff --git a/src/bin/elementary/perf_list.c b/src/bin/elementary/perf_list.c new file mode 100644 index 0000000000..63ed5cac5c --- /dev/null +++ b/src/bin/elementary/perf_list.c @@ -0,0 +1,6 @@ +#include "perf_test_01.c" +#include "perf_test_02.c" +#include "perf_test_03.c" +#include "perf_test_04.c" +#include "perf_test_05.c" +#include "perf_test_06.c" diff --git a/src/bin/elementary/perf_rnd.c b/src/bin/elementary/perf_rnd.c new file mode 100644 index 0000000000..7edf9cde82 --- /dev/null +++ b/src/bin/elementary/perf_rnd.c @@ -0,0 +1,1047 @@ +static int rp = 0; +static const unsigned short r[65536] = +{ +11423, 23305, 22422, 3286, 28841, 6652, 3499, 3618, 8363, 31491, 15444, 5852, 19081, 28074, 15631, 28112, 32389, 13015, 26077, 16467, 10087, 12788, 9679, 15525, 29177, 24, 1856, 21048, 2684, 5022, 8091, 14107, 28327, 30513, 17394, 24400, 4397, 20893, 28018, 12761, 19616, 10695, 18613, 5930, 6001, 1477, 1274, 5622, 14492, 27351, 22089, +24579, 7371, 31769, 7336, 3780, 31793, 9193, 24828, 1709, 14215, 151, 15817, 9774, 30664, 443, 1407, 2294, 21336, 29425, 15055, 8184, 7352, 900, 14114, 13354, 2377, 15389, 18976, 16869, 9972, 8298, 8681, 17344, 7299, 16017, 21124, 6324, 25210, 13185, 8033, 6657, 13336, 23850, 16432, 11233, 24293, 17839, 13527, 12861, 14496, 28582, 21046, 21849, 29482, 2392, 2435, 31860, 17781, 21411, 15961, 27754, 29709, 24642, 12330, +4240, 7892, 686, 10564, 334, 13871, 18598, 6992, 27208, 9680, 23424, 5673, 1206, 8495, 19200, 14067, 22991, 15014, 2345, 12072, 11728, 4738, 14507, 10820, 22519, 3151, 26782, 17505, 92, 18656, 29835, 4333, 26548, 30522, 14897, 26883, 11625, 727, 1107, 6065, 10408, 24531, 11738, 11614, 258, 30938, 25681, 23249, 13184, 28027, 2554, 24913, 32765, 17061, 2965, 22516, 20212, 29747, 7254, 20305, 15636, 4321, 24638, 9416, +2075, 6767, 3531, 13701, 7495, 4638, 19766, 17903, 29169, 31505, 29517, 29427, 29675, 22430, 19909, 10092, 17689, 22463, 2237, 17686, 6756, 5202, 7435, 26969, 2182, 14689, 14506, 17818, 19010, 6376, 27234, 21086, 13143, 30766, 2019, 20638, 2636, 21785, 5773, 31806, 20522, 2522, 28465, 17430, 24953, 15606, 27522, 9874, 5301, 29759, 27561, 12058, 2193, 2228, 6259, 4375, 16917, 20765, 22193, 3159, 27141, 16660, 24245, 7516, +14658, 26264, 28155, 17294, 15282, 1160, 16332, 3036, 3683, 12030, 20466, 28636, 27636, 15220, 5742, 170, 12211, 535, 12228, 14405, 2763, 18487, 18780, 19680, 6484, 8206, 22840, 857, 24866, 14317, 8373, 6756, 7814, 3760, 24050, 23096, 4921, 7615, 26132, 8604, 19645, 13831, 4472, 14513, 29051, 10214, 14683, 8495, 10750, 26911, 22900, 13513, 12630, 8912, 426, 19114, 17118, 23266, 19971, 9216, 4815, 28345, 15972, 12629, +32105, 7255, 2957, 4258, 14870, 29090, 12862, 1747, 10153, 17334, 16260, 6436, 27549, 30944, 14931, 5531, 25087, 5063, 19044, 4950, 13976, 19470, 24064, 31094, 9968, 11268, 7543, 14784, 6845, 23515, 27413, 6182, 30770, 30371, 10441, 12872, 26693, 23303, 14619, 4078, 7870, 30880, 10514, 2651, 29056, 25446, 8182, 21375, 30509, 27226, 26325, 11717, 13929, 17622, 10044, 23897, 28890, 17587, 5913, 2967, 8334, 559, 9149, 6337, +30930, 19590, 19209, 24855, 10126, 1061, 28933, 17996, 31941, 6679, 20647, 28229, 32125, 28829, 16836, 29867, 23287, 10394, 8816, 4448, 28016, 18860, 28346, 24138, 3679, 1491, 27105, 12014, 2050, 3486, 18351, 212, 23077, 4792, 25067, 435, 5853, 21232, 18431, 5026, 27912, 6310, 487, 27269, 2371, 17324, 24368, 25658, 27718, 417, 30107, 22966, 19277, 25685, 14336, 22957, 27176, 8673, 2203, 29227, 12159, 20554, 29439, 2468, +25346, 21739, 2903, 31200, 10203, 21334, 3458, 5347, 27644, 3946, 32617, 30015, 21270, 24217, 22906, 16220, 24634, 20245, 6418, 11144, 13162, 20754, 1333, 7570, 29427, 3536, 4029, 8818, 24090, 701, 11287, 16668, 22440, 14190, 15100, 32643, 2757, 18559, 5223, 30401, 22505, 5072, 27649, 11007, 29289, 17787, 27227, 21156, 5264, 877, 32300, 18426, 21631, 865, 25996, 18290, 4401, 30026, 27108, 28491, 30727, 5627, 12391, 20399, +19818, 27492, 20274, 22575, 13283, 25497, 20208, 3020, 30569, 15089, 14027, 27091, 108, 8486, 15479, 5372, 9363, 15011, 23798, 30994, 15876, 17027, 16516, 20277, 14285, 10856, 16000, 12244, 16484, 28391, 32643, 3534, 23115, 20149, 26109, 3630, 12879, 13549, 6650, 10680, 28639, 20677, 5003, 28747, 29163, 20482, 1352, 5758, 2725, 25150, 3984, 18601, 9409, 20500, 6110, 23694, 31357, 22110, 3170, 15073, 17734, 3045, 18607, 8081, +23195, 11948, 11712, 3306, 25497, 18362, 13986, 21368, 6272, 18990, 17348, 2667, 6704, 18700, 8426, 9430, 11082, 12410, 28031, 20492, 143, 1374, 11418, 31500, 23484, 14589, 13805, 8450, 17634, 32412, 16532, 8061, 11592, 28244, 11367, 4321, 13838, 25354, 25690, 20110, 11576, 10270, 22778, 18280, 28970, 31204, 27710, 7284, 10846, 22974, 27776, 10989, 24348, 6427, 9721, 15064, 21016, 23526, 23515, 5882, 23170, 7279, 13944, 1994, +2755, 25311, 6316, 16593, 17897, 32006, 3936, 29473, 9508, 26714, 14986, 5710, 25150, 9928, 12994, 3228, 134, 8003, 14218, 24482, 14430, 23939, 6779, 2678, 14698, 30294, 8560, 5100, 4805, 22504, 7095, 7560, 15048, 13411, 24153, 177, 12649, 28089, 29651, 22157, 22035, 11869, 27867, 14417, 21797, 8093, 17646, 21932, 16096, 31864, 13646, 30526, 23035, 20425, 436, 4965, 17951, 8997, 10066, 22756, 31501, 17161, 30316, 13781, +30572, 21702, 13959, 10453, 17023, 10842, 32610, 6291, 22711, 27709, 20708, 11740, 3034, 5586, 904, 19131, 4682, 14551, 16889, 27718, 2208, 17326, 32683, 20160, 26323, 9981, 10148, 25056, 27142, 7697, 6070, 24946, 29399, 20029, 2631, 13654, 30871, 2473, 19945, 20814, 30182, 7886, 32554, 449, 13472, 691, 19580, 18155, 15242, 3701, 13105, 17450, 21027, 13020, 4842, 14582, 23002, 14991, 6871, 17376, 22688, 12941, 9555, 19319, +202, 12186, 205, 31073, 14660, 20151, 19119, 12074, 28037, 18905, 12523, 8741, 19596, 32103, 26896, 2070, 3037, 7233, 19521, 24064, 20254, 24363, 5879, 10488, 6586, 12750, 27864, 29274, 25691, 4651, 15825, 25893, 16838, 16031, 24198, 31498, 3414, 10549, 10804, 31451, 29454, 23328, 7424, 16283, 22663, 1553, 18353, 25700, 8786, 5106, 16997, 29040, 29470, 22876, 6760, 3288, 2858, 1857, 32563, 28549, 6508, 15620, 21674, 23346, +31651, 13104, 22076, 2297, 23653, 113, 980, 20339, 23441, 8405, 3854, 13336, 9958, 22208, 6269, 18744, 27314, 23266, 15017, 24016, 13374, 21777, 27305, 16232, 23634, 27100, 12013, 30143, 9952, 919, 20721, 8836, 14023, 10030, 11133, 4908, 10143, 12114, 25247, 816, 20519, 29102, 14152, 30477, 18542, 20421, 16453, 13088, 10919, 31470, 4337, 24293, 20480, 31642, 7757, 11346, 25974, 19770, 8721, 3158, 20689, 29443, 11994, 1944, +6705, 23128, 6852, 16848, 2474, 32100, 17664, 22993, 28434, 31816, 20702, 14208, 19470, 4387, 27296, 30389, 3090, 31633, 21915, 23570, 30507, 29672, 2148, 23713, 16675, 10870, 26872, 4596, 7545, 6098, 6541, 14250, 29226, 13393, 31098, 31700, 12725, 15994, 21925, 8391, 15042, 9859, 22599, 1744, 14247, 17128, 32134, 17337, 15993, 21281, 8139, 13733, 18185, 10287, 4678, 2092, 21157, 31550, 6689, 28702, 4881, 13230, 10184, 1339, +26623, 8514, 272, 6581, 24508, 22197, 14972, 6783, 32057, 4804, 8527, 13536, 21932, 7893, 30873, 5157, 29174, 6244, 18890, 14592, 16531, 23569, 16684, 4921, 22351, 23373, 855, 27232, 3835, 11040, 28572, 30459, 19554, 28844, 4272, 11295, 18273, 19244, 18078, 17562, 24048, 26605, 31098, 13212, 1731, 29203, 18370, 30905, 2679, 4492, 12729, 19211, 28061, 29414, 24132, 17645, 20019, 24987, 12109, 23855, 3259, 7913, 21546, 22814, +3989, 25818, 1341, 22263, 12294, 19419, 7057, 3575, 13256, 5388, 16787, 14987, 1823, 2389, 13125, 4503, 6882, 25854, 23714, 2175, 22500, 15078, 19820, 9752, 7297, 31930, 839, 10557, 7075, 22385, 603, 11065, 15435, 1944, 560, 27729, 21363, 7617, 31304, 1851, 13005, 15324, 16839, 14829, 17713, 29964, 19332, 24595, 23050, 10278, 26771, 12783, 25356, 13823, 22535, 32653, 12985, 23374, 10442, 20061, 12991, 11045, 31126, 28426, +12989, 31686, 23387, 1584, 6535, 21924, 3436, 19541, 4480, 20275, 1602, 22193, 17471, 20934, 14021, 7753, 31212, 8024, 20536, 23800, 21847, 10303, 23685, 2065, 909, 1360, 22126, 13900, 12405, 20484, 9558, 25395, 19402, 178, 26979, 25937, 22102, 30415, 12710, 26582, 17922, 14312, 16007, 2625, 2478, 30028, 10379, 922, 5284, 30915, 24722, 27132, 8451, 15640, 29197, 9360, 17000, 18555, 23261, 29405, 6271, 51, 22032, 25673, +229, 16244, 18842, 22331, 13891, 31553, 16145, 31814, 13097, 32153, 1671, 15576, 29413, 12050, 16498, 1930, 10198, 8453, 29062, 18649, 24093, 25491, 28009, 8325, 11278, 18502, 4962, 17549, 18554, 26995, 10454, 18783, 10471, 29296, 8347, 24362, 28081, 24492, 23408, 8411, 23877, 25080, 23987, 20523, 4362, 7717, 22453, 14560, 16170, 18747, 441, 7495, 11470, 28451, 15820, 22748, 14185, 20783, 7529, 32739, 15010, 17983, 18755, 25481, +14511, 27102, 17075, 9825, 18826, 7716, 18236, 9936, 28, 9455, 30459, 4390, 17172, 20144, 18951, 575, 6123, 19392, 8070, 17593, 15075, 23891, 7573, 29261, 11906, 15102, 29232, 26916, 317, 15219, 19629, 14828, 9553, 3936, 24653, 28380, 11652, 10121, 5548, 11680, 19576, 3239, 16071, 3981, 23383, 2254, 4556, 29506, 21646, 12626, 14331, 3954, 3749, 21904, 447, 15655, 4238, 29679, 9803, 4555, 12131, 29432, 19383, 21684, +601, 11269, 17296, 12253, 21390, 22844, 23934, 8199, 26083, 7237, 12180, 16698, 9491, 16736, 13436, 31137, 29362, 27767, 2323, 344, 16903, 2770, 15999, 21141, 32450, 25803, 25696, 11813, 22467, 12312, 729, 23068, 23581, 18026, 2554, 12203, 8102, 26488, 20402, 1418, 957, 32582, 18116, 10448, 16550, 31553, 8817, 13145, 26552, 11141, 13489, 10688, 13911, 29488, 31829, 13593, 22523, 24758, 25406, 12223, 4302, 26136, 2523, 27883, +11394, 5077, 7318, 19496, 31565, 27721, 20914, 32522, 27535, 6263, 10202, 11318, 5048, 19020, 24463, 31600, 30161, 5184, 9520, 11304, 1904, 8582, 24898, 24428, 572, 17536, 3883, 4874, 10904, 6406, 32757, 22298, 11484, 7307, 9027, 10281, 2260, 29941, 10036, 29796, 3436, 20238, 8346, 8484, 6490, 41, 7317, 3883, 5225, 16837, 15188, 7129, 25419, 7318, 31557, 25991, 24854, 2672, 30865, 2991, 9079, 30854, 25289, 20563, +5394, 1548, 30844, 7654, 31490, 8112, 4682, 2158, 28351, 13028, 10643, 2073, 13069, 17960, 5957, 18294, 2029, 21145, 25424, 27449, 28463, 24213, 20672, 20549, 26886, 18770, 23540, 3197, 16856, 16062, 23760, 22250, 17610, 21836, 29905, 16332, 29949, 1819, 18491, 25532, 14848, 29134, 27605, 27917, 14326, 794, 13444, 16355, 21939, 6100, 11036, 17634, 30313, 31709, 5416, 24431, 17711, 28956, 27628, 1799, 12250, 18620, 24050, 29861, +7689, 21187, 13425, 4870, 23006, 31916, 30402, 5086, 28282, 25239, 236, 9840, 26034, 13680, 26196, 15205, 19780, 4464, 72, 17325, 3405, 5488, 8989, 21116, 1676, 3849, 22916, 13927, 22470, 14198, 11020, 30159, 2617, 24445, 2261, 25623, 23594, 32663, 30710, 19108, 25134, 30946, 28949, 18400, 11858, 22377, 838, 31638, 26841, 910, 16195, 30247, 6398, 25184, 18595, 8074, 29034, 8743, 22001, 18736, 22941, 253, 16127, 25558, +24699, 18388, 18414, 15525, 18283, 16356, 1865, 10649, 14534, 30814, 29050, 26392, 20423, 29888, 25262, 14497, 30798, 8689, 11976, 4428, 1106, 30571, 12502, 30140, 6547, 1736, 16108, 29488, 1989, 32235, 22279, 26688, 17855, 7925, 9445, 3370, 24281, 11311, 14019, 6047, 9357, 10301, 32439, 29781, 7421, 24933, 11510, 5451, 854, 23486, 9879, 1960, 21289, 22382, 32100, 27836, 24118, 15440, 24557, 26107, 14907, 14068, 20028, 32762, +21993, 29473, 3364, 13506, 8016, 17384, 19553, 17374, 27685, 19224, 14387, 2339, 11389, 25897, 7790, 12243, 16615, 17670, 14204, 5136, 7284, 13536, 205, 31402, 28977, 24762, 24741, 11116, 6062, 12001, 11111, 28055, 8707, 14475, 8793, 16723, 31859, 28346, 1329, 26777, 14802, 15716, 29116, 26191, 8845, 4138, 5666, 25460, 21808, 19870, 30597, 29092, 639, 30802, 27726, 29616, 22796, 19700, 7964, 28858, 31701, 19075, 24145, 7640, +783, 170, 24364, 32642, 28516, 25693, 26651, 10550, 8642, 22999, 3973, 17487, 27138, 9639, 10180, 16178, 29510, 8009, 12503, 30149, 6043, 7461, 26997, 28839, 27161, 2193, 24929, 26095, 21269, 16306, 967, 22052, 16476, 25331, 21926, 12224, 18257, 15810, 22774, 26899, 6041, 26747, 11618, 411, 3618, 21798, 16590, 360, 29807, 29093, 30509, 3082, 3786, 24738, 31921, 30948, 26932, 24082, 24275, 15433, 7620, 25242, 4717, 24096, +17806, 26643, 3552, 3295, 9685, 26326, 30194, 15727, 20305, 9044, 16138, 23924, 30843, 32728, 24284, 27882, 29053, 22026, 30965, 72, 13996, 30118, 31020, 8160, 21433, 22527, 23593, 29053, 15001, 28310, 20382, 39, 22186, 23934, 3334, 31871, 17493, 760, 14830, 5030, 9805, 30969, 28954, 7880, 30929, 20471, 2994, 27215, 9729, 1191, 27287, 23725, 31310, 25539, 31886, 19975, 15298, 22711, 16260, 30299, 18254, 3874, 30339, 7672, +27809, 905, 6775, 12534, 1666, 21606, 17564, 11471, 19807, 13751, 19351, 17968, 1454, 22345, 12415, 11183, 23537, 6934, 2140, 22079, 32473, 1258, 9286, 15003, 23970, 25546, 12535, 9456, 29421, 10106, 17128, 24462, 11011, 23903, 4228, 12677, 12741, 21792, 24148, 32548, 2775, 10731, 17749, 4229, 309, 30164, 15412, 23846, 4331, 17553, 13157, 4036, 18811, 22443, 19040, 10013, 15221, 31575, 19469, 11874, 8913, 3829, 3568, 19924, +27733, 7796, 32602, 7706, 29589, 23982, 7487, 32364, 1946, 25236, 3826, 2255, 22632, 19238, 26101, 26963, 4023, 6490, 31000, 22835, 28933, 17272, 80, 11386, 16079, 19550, 23261, 24992, 23379, 26829, 12148, 18344, 1858, 11982, 26051, 31447, 3197, 770, 31043, 5143, 26006, 2101, 7398, 15870, 21340, 731, 10066, 25363, 7221, 8298, 15430, 3386, 25570, 15511, 14772, 8881, 2293, 5265, 1105, 25672, 32095, 13253, 11249, 1185, +25236, 4532, 32632, 28433, 5302, 30907, 808, 31308, 241, 8206, 14410, 21581, 8937, 24476, 14176, 16158, 6, 29607, 19544, 25576, 12350, 1548, 1689, 14643, 6814, 2794, 7547, 6141, 16048, 18796, 7326, 8516, 23328, 7190, 4181, 28630, 5329, 4989, 27170, 5570, 13195, 8813, 27151, 22132, 521, 8560, 5522, 528, 5399, 25066, 26104, 17749, 26614, 27794, 32392, 660, 30588, 7171, 6801, 13868, 25968, 14127, 22384, 16528, +21317, 26565, 12391, 26647, 31554, 6793, 32217, 11981, 15606, 26601, 1345, 16128, 2393, 6867, 16656, 7792, 31933, 9992, 25541, 25780, 5018, 25165, 26440, 2839, 32336, 474, 16707, 25536, 14601, 6324, 9297, 3151, 121, 21688, 29798, 31676, 28481, 29247, 10889, 11320, 23080, 12235, 27448, 25473, 19102, 11336, 497, 18268, 21328, 26038, 11280, 26347, 18435, 4952, 29186, 18004, 5426, 13125, 10772, 20028, 19449, 20069, 23179, 19571, +8989, 20209, 18479, 4703, 16688, 29368, 16023, 7001, 8835, 10703, 32474, 27938, 22039, 204, 13438, 10599, 26242, 24718, 4178, 11910, 29670, 596, 29914, 2329, 13722, 7918, 22357, 403, 27988, 12768, 19974, 4209, 209, 5685, 8912, 16897, 2286, 24935, 23898, 11121, 2870, 23605, 6291, 24909, 23809, 19729, 2741, 17283, 11679, 6919, 29193, 8582, 7516, 26339, 10911, 21238, 1490, 500, 21641, 29478, 13268, 8848, 919, 13477, +14533, 9832, 30374, 16819, 1999, 21505, 27941, 4870, 12342, 1464, 29779, 3383, 21194, 32520, 20666, 105, 6672, 17092, 8687, 14188, 10663, 19598, 2658, 12153, 20098, 24299, 8863, 598, 379, 9783, 14075, 14913, 19615, 11682, 31732, 21614, 419, 26905, 26484, 12761, 28370, 23496, 16144, 16796, 23248, 4042, 16901, 29920, 21134, 25589, 11340, 31798, 12419, 13998, 11183, 32518, 5530, 20047, 348, 5909, 29830, 14424, 20822, 16677, +26106, 19787, 5523, 26525, 13924, 32008, 6518, 9526, 22736, 22662, 26322, 13216, 26704, 10456, 10369, 15071, 3277, 21709, 14101, 15696, 2940, 25284, 15446, 8470, 12563, 15795, 14379, 9625, 30219, 2434, 26302, 23557, 22221, 31826, 17314, 3377, 31066, 23832, 12904, 21034, 13726, 6458, 1482, 7662, 16914, 11851, 22733, 20191, 793, 4066, 3120, 3733, 29351, 18566, 12203, 9146, 1593, 26582, 18772, 31812, 29016, 12306, 22601, 18469, +11364, 7147, 21847, 9662, 30979, 1983, 30696, 11937, 8441, 32179, 19600, 25356, 11262, 9565, 12779, 12055, 13632, 15899, 15788, 10215, 1698, 27991, 19361, 3291, 21806, 5365, 2336, 18054, 17672, 24937, 3756, 29036, 32085, 25603, 5931, 30296, 27586, 3859, 9466, 3259, 3270, 29066, 28615, 14533, 5863, 8627, 26588, 19495, 24526, 9609, 29710, 26224, 4832, 16304, 29516, 26638, 21669, 31852, 11925, 6573, 24021, 15681, 2842, 23338, +8516, 8773, 20867, 3334, 12632, 30333, 6593, 15903, 26631, 2441, 30436, 32494, 11068, 24256, 19222, 2826, 1097, 16164, 29051, 5930, 32468, 25799, 32568, 21370, 24883, 11725, 27943, 16136, 27406, 30785, 6707, 3154, 6790, 27574, 6488, 19423, 25139, 13082, 2558, 19002, 15523, 226, 18728, 26591, 24482, 5182, 29417, 25580, 21347, 25700, 31510, 21047, 18731, 31310, 9649, 10846, 10268, 4825, 26983, 4906, 2842, 922, 8061, 9633, +28496, 14549, 29056, 20867, 27631, 31614, 7101, 10386, 31840, 25829, 4209, 23554, 31012, 859, 16366, 19591, 26559, 15108, 7870, 12523, 13651, 17520, 23369, 23919, 22345, 17584, 28825, 25187, 18506, 4118, 2052, 14234, 18668, 31108, 2333, 13531, 29954, 9434, 23918, 29026, 2496, 28127, 19813, 740, 28986, 3411, 20331, 22778, 18520, 28201, 2533, 32171, 12953, 25902, 23322, 2530, 10719, 19379, 27718, 29225, 23498, 29770, 10692, 9398, +28111, 13025, 22929, 25297, 22460, 14079, 21556, 24956, 9439, 8601, 25696, 5657, 12012, 13259, 28435, 30532, 8692, 30968, 29935, 21646, 24103, 20489, 24176, 2054, 7101, 19126, 31279, 30599, 16129, 9203, 7229, 11472, 22229, 30158, 4001, 11921, 11470, 25557, 4109, 20909, 1390, 29805, 26566, 13403, 10296, 22234, 11167, 18988, 20434, 8335, 7866, 11769, 28824, 32043, 13823, 3157, 18401, 12335, 988, 1762, 21538, 8217, 13234, 10999, +5608, 17236, 22920, 17078, 10025, 27029, 5219, 11416, 24066, 31785, 24819, 1594, 21251, 3218, 20583, 8918, 11553, 28449, 20687, 7610, 27724, 1743, 10767, 13358, 14078, 11756, 15120, 2848, 19973, 28355, 13848, 25581, 12823, 4000, 9891, 22848, 31030, 15110, 1496, 22328, 14128, 26315, 23923, 2611, 29534, 11738, 11529, 8319, 7419, 32217, 15929, 2376, 1192, 26697, 15734, 15270, 5685, 30854, 18118, 25658, 26441, 31966, 18472, 6496, +3199, 28363, 29345, 1461, 10706, 30841, 23789, 24834, 24389, 14944, 27445, 21155, 26682, 6207, 29474, 1334, 5656, 12636, 3710, 6848, 6565, 19444, 22118, 12250, 17530, 7468, 5140, 11204, 6667, 23612, 17700, 9866, 19208, 14277, 11327, 29914, 12351, 2348, 21980, 3972, 17293, 16657, 25127, 11207, 22864, 21833, 12541, 28520, 1701, 16251, 2600, 8266, 2927, 24718, 20516, 20458, 32187, 25657, 31662, 6086, 16501, 16594, 15952, 2941, +30872, 27279, 87, 10455, 29627, 22067, 14427, 14152, 5957, 6786, 25360, 28821, 28619, 5133, 24574, 30321, 21385, 27174, 5819, 24312, 19125, 26336, 12002, 18544, 19225, 10896, 24630, 2958, 27491, 7814, 5900, 25595, 2325, 5987, 3282, 31952, 28055, 17709, 13337, 1244, 24495, 5929, 30065, 20346, 11062, 21871, 17899, 32447, 16278, 23719, 23992, 2635, 17287, 3226, 21179, 3744, 14123, 13041, 6702, 8846, 20855, 12602, 1673, 23180, +18590, 4955, 22364, 13877, 22664, 2933, 15121, 14391, 8862, 12418, 1969, 19925, 1522, 19869, 19604, 17800, 10820, 10828, 20435, 28107, 14055, 8846, 31851, 28178, 21887, 5785, 4256, 9974, 18388, 5929, 386, 4210, 10884, 22750, 18087, 780, 25684, 440, 15171, 1778, 12858, 17140, 21703, 14380, 4241, 8540, 32180, 15061, 19368, 19847, 10400, 655, 28693, 9483, 28833, 17812, 15269, 321, 27786, 889, 6250, 28172, 5099, 17134, +18155, 23186, 17914, 11071, 23626, 317, 12849, 3716, 17458, 1785, 18097, 21699, 10325, 17509, 3993, 29693, 4589, 14393, 30349, 514, 23877, 26414, 18327, 6378, 26736, 13345, 7267, 218, 8750, 12366, 17353, 26905, 2784, 2499, 5208, 26410, 2817, 18057, 30126, 20275, 19842, 15455, 9206, 30167, 197, 13199, 27093, 4786, 27593, 24674, 5300, 18702, 18320, 23627, 25080, 12288, 4205, 32347, 12507, 12955, 11945, 29860, 7092, 14729, +32359, 12300, 8371, 2408, 30357, 5729, 22683, 17432, 21185, 31890, 14831, 21382, 12321, 9156, 26168, 7146, 1062, 31468, 25848, 19383, 22328, 18160, 31671, 26533, 17739, 11410, 6720, 29684, 8502, 13812, 11645, 8094, 26112, 20016, 10502, 23701, 25746, 418, 8365, 14163, 32308, 23197, 2777, 11861, 32353, 28945, 19008, 648, 27645, 12088, 20031, 17205, 30249, 18934, 10970, 15220, 30345, 17690, 12137, 6079, 31502, 23782, 14173, 24846, +11031, 24676, 15780, 4009, 25094, 24145, 18172, 24634, 14574, 20949, 3727, 14160, 17126, 22735, 14808, 12003, 2056, 2071, 29209, 32305, 21005, 7411, 14757, 18582, 25102, 26894, 24662, 23836, 17909, 6067, 15915, 28940, 30743, 31695, 181, 23069, 23072, 18353, 14935, 4879, 6534, 18663, 19039, 23660, 8630, 1079, 2895, 10686, 3150, 32104, 10223, 24155, 6748, 24981, 9970, 31850, 19107, 1864, 22918, 4248, 7931, 6065, 420, 5907, +4992, 601, 28976, 28065, 18954, 11144, 176, 25488, 29807, 19215, 16380, 5669, 20294, 19276, 16356, 23444, 18612, 26579, 14831, 25360, 18792, 24801, 24442, 5132, 26665, 14593, 9380, 1829, 20658, 9801, 7736, 25651, 10402, 3944, 20948, 29357, 15088, 21124, 22077, 12127, 7571, 5690, 17797, 27865, 24966, 1385, 18541, 10810, 27964, 604, 3403, 13989, 25406, 27845, 19121, 19303, 9670, 28501, 21132, 30329, 5534, 28868, 23212, 15937, +45, 11392, 12526, 15133, 32516, 1835, 27261, 7319, 7525, 12290, 2416, 32491, 13675, 20957, 10534, 8871, 21561, 13937, 22860, 14199, 9014, 9213, 735, 18685, 4947, 21867, 16246, 10481, 17968, 6690, 26418, 18013, 18082, 6176, 378, 17830, 8012, 27639, 25149, 15537, 7161, 27565, 15261, 20836, 15754, 25795, 29708, 4547, 6964, 19800, 18747, 15978, 29014, 19482, 1895, 1193, 8581, 18141, 11674, 26549, 24831, 5325, 11794, 10145, +11501, 12173, 27975, 19513, 7044, 20356, 2283, 14206, 15153, 17544, 2274, 30907, 10571, 31982, 2687, 17535, 19015, 21434, 745, 15261, 8148, 2641, 16454, 16729, 20782, 28128, 10511, 12846, 685, 22305, 22991, 12187, 1710, 18199, 31700, 8755, 5787, 1215, 22961, 20941, 18759, 25235, 19080, 29330, 24450, 21767, 14097, 10697, 10433, 14843, 25958, 18581, 17484, 9644, 2543, 5498, 5004, 13054, 18344, 5690, 2591, 8568, 17877, 4302, +26767, 16809, 13057, 32554, 18025, 3250, 20727, 4016, 28485, 7040, 579, 20167, 28807, 14676, 30864, 6473, 29519, 24054, 25054, 14235, 930, 27597, 19734, 5935, 7883, 5310, 11625, 10475, 13878, 29502, 14777, 7877, 13543, 27834, 7664, 31568, 31084, 28391, 2817, 26801, 2663, 3396, 14201, 31471, 18072, 12297, 5176, 14824, 3584, 30230, 29059, 4514, 25060, 16025, 10449, 175, 21336, 22074, 10650, 2446, 18808, 25427, 10324, 32352, +20493, 17988, 31152, 18809, 13611, 1201, 12843, 16275, 4597, 27044, 14978, 22670, 6573, 20154, 4726, 10157, 17616, 1017, 14672, 9908, 17043, 25121, 10084, 5611, 14428, 20734, 8057, 468, 13394, 18381, 52, 1119, 3601, 31205, 19929, 17213, 32406, 4, 720, 4236, 27048, 15698, 26906, 853, 3084, 31632, 11011, 20700, 32649, 25683, 30609, 16924, 18036, 7925, 22535, 32464, 28659, 30593, 165, 9285, 16206, 217, 10405, 19808, +31422, 30334, 4253, 31061, 30338, 4973, 2529, 24618, 20671, 29435, 25471, 23755, 28299, 3714, 11687, 28180, 29397, 9528, 12337, 14666, 17453, 2104, 14362, 13345, 32697, 14527, 22630, 16136, 14745, 267, 3176, 13399, 30601, 7429, 11692, 28171, 12402, 14221, 20021, 305, 10888, 12725, 24060, 6419, 16439, 2979, 1832, 13069, 12508, 14169, 27735, 29961, 16273, 9329, 10538, 16203, 23857, 401, 32339, 5834, 668, 2747, 19233, 31270, +10176, 30926, 26673, 22578, 12379, 13927, 22883, 23268, 26652, 14175, 29687, 10323, 17154, 31519, 23392, 29662, 12920, 18359, 26856, 29194, 27689, 4626, 12629, 18778, 5027, 12200, 24612, 5696, 14947, 11077, 4198, 25123, 9235, 30871, 14933, 21615, 12030, 5048, 12115, 5914, 19223, 9034, 16238, 3609, 7786, 6862, 504, 20706, 25222, 27360, 17132, 20143, 31986, 29761, 6153, 4246, 9193, 30765, 9942, 24140, 9074, 14140, 16495, 18310, +12243, 31428, 7157, 24274, 3708, 19272, 30188, 22931, 28306, 13658, 26541, 3324, 20521, 27045, 24031, 12975, 21637, 8395, 350, 20855, 5389, 6503, 25101, 14582, 4500, 2275, 5955, 13574, 16415, 22450, 31884, 28659, 21111, 6273, 20165, 24819, 25545, 17585, 14983, 21084, 31244, 8756, 24408, 18997, 3033, 15671, 31972, 24670, 24067, 32322, 12757, 29456, 6057, 5091, 11270, 10557, 7366, 17225, 24131, 23782, 6908, 23248, 19673, 28019, +29521, 7070, 20070, 22299, 24655, 2285, 10615, 23131, 11041, 2255, 9360, 14074, 17927, 8564, 5976, 9226, 8118, 18734, 5914, 14175, 23825, 17184, 24732, 31191, 1642, 16096, 22205, 8550, 6576, 9110, 3801, 3329, 16180, 23871, 25628, 8068, 26157, 3475, 31199, 4430, 5731, 7792, 18505, 23658, 16356, 24481, 116, 24475, 10447, 6030, 5882, 1504, 23214, 30615, 32696, 24856, 13943, 22133, 638, 20519, 31244, 4439, 23848, 14656, +28311, 16709, 22724, 21700, 20184, 21156, 26130, 25915, 28948, 11867, 16805, 12536, 3581, 16921, 4243, 14028, 22951, 10126, 15533, 13398, 7973, 15461, 5486, 21916, 4826, 6125, 9667, 3302, 10564, 747, 17959, 6107, 17456, 7915, 27807, 4873, 29071, 21170, 30788, 25251, 269, 14826, 5020, 3850, 31747, 9263, 17879, 21931, 19389, 644, 2561, 27362, 16105, 8047, 16510, 20931, 14172, 26177, 24234, 24737, 26925, 9425, 30844, 11613, +17340, 25884, 16486, 13644, 14286, 14507, 6127, 14555, 29333, 11147, 18406, 28312, 20411, 3517, 17475, 7032, 4161, 20036, 1627, 20266, 28084, 18137, 8429, 9488, 11547, 32663, 1457, 5704, 9320, 32302, 17317, 26661, 25418, 1036, 7537, 6936, 15543, 13664, 21491, 12108, 24812, 7129, 7652, 12455, 10646, 25128, 19487, 14807, 12396, 21114, 2305, 7712, 6484, 10735, 17201, 18031, 10630, 18658, 23735, 19951, 18192, 8284, 13844, 10842, +9320, 21381, 17778, 24863, 2277, 6502, 4203, 27089, 13631, 11856, 6776, 24278, 4216, 26264, 6317, 16612, 14610, 8623, 24325, 21094, 19358, 8758, 6357, 29988, 27416, 30092, 17171, 12841, 5609, 31015, 23683, 14929, 19628, 8694, 7025, 21906, 15196, 11228, 16227, 28827, 23084, 23004, 20337, 27300, 16500, 26655, 11145, 31110, 2510, 2702, 19437, 21868, 11460, 25794, 19088, 6108, 23119, 3492, 18949, 28728, 1739, 9865, 10889, 21368, +18559, 17914, 10506, 987, 29143, 26733, 29814, 19459, 16969, 17384, 13992, 701, 11271, 25137, 31812, 13781, 27839, 18481, 2881, 6531, 11507, 21969, 12639, 1858, 25461, 31589, 30586, 27201, 8686, 8708, 15801, 27245, 26622, 26307, 28232, 22997, 20272, 25278, 9689, 4474, 9894, 23681, 5175, 21165, 16050, 4219, 2178, 11121, 22700, 5059, 17652, 1440, 27029, 30291, 3298, 19722, 29112, 1117, 14155, 5030, 9825, 29956, 32275, 3679, +23495, 27739, 26677, 11000, 20250, 3598, 15474, 30144, 27279, 20649, 18542, 10561, 24869, 20720, 21682, 14801, 25780, 6566, 16241, 20041, 4089, 19540, 6995, 434, 20657, 21151, 5464, 30482, 18339, 4972, 1393, 9067, 32711, 28070, 20067, 20193, 31668, 2773, 17570, 26179, 23422, 3344, 3972, 15523, 24064, 25654, 30325, 17076, 32220, 13798, 4349, 3542, 570, 11345, 3976, 21227, 32496, 9440, 18941, 18067, 14412, 20335, 27134, 14356, +15637, 14433, 1781, 14538, 17206, 19351, 7949, 7861, 22695, 11922, 23384, 13992, 4808, 20941, 31068, 4261, 1972, 2650, 7803, 2542, 13995, 11779, 23770, 13723, 21219, 9943, 31790, 2864, 30278, 26157, 17220, 13148, 7822, 19001, 27686, 25029, 5585, 2867, 122, 28280, 14789, 23506, 9504, 19598, 11680, 7805, 23859, 13652, 10455, 31662, 16194, 24450, 10673, 7196, 5405, 31892, 17140, 4427, 1988, 14650, 30584, 19208, 27798, 5639, +5442, 22716, 30668, 11027, 25584, 30790, 6539, 7605, 21528, 16044, 27203, 440, 23849, 18294, 14092, 1536, 17188, 30287, 25986, 27861, 4715, 31391, 26986, 21855, 3050, 28974, 3738, 867, 15415, 31536, 6506, 20857, 21485, 4406, 31884, 14301, 2428, 5655, 21906, 23956, 21699, 16342, 24397, 12780, 1868, 5721, 14316, 19057, 3240, 7534, 14150, 7956, 6157, 8368, 29811, 9208, 4575, 781, 10075, 19990, 32318, 16581, 8079, 21035, +20987, 7195, 2568, 23415, 12850, 24474, 14603, 1782, 8048, 6232, 14562, 9917, 11954, 28879, 28974, 15194, 3645, 10356, 23150, 9803, 18725, 20194, 19011, 23300, 20975, 29086, 10522, 20525, 12899, 18601, 8792, 1118, 25796, 11360, 24533, 5878, 3067, 6368, 7660, 11115, 12601, 22223, 21032, 24555, 18334, 17238, 6981, 21979, 27595, 30132, 31782, 13552, 17558, 18025, 4084, 5765, 14343, 14606, 26291, 27242, 439, 2315, 28360, 26235, +13676, 20125, 32113, 16743, 26494, 7006, 27858, 6327, 29229, 16123, 30882, 14795, 593, 5095, 4006, 28188, 2459, 3021, 8972, 20017, 21046, 13056, 25783, 2622, 27662, 19306, 29864, 28101, 21621, 25457, 21568, 2529, 12814, 20914, 19272, 6540, 27920, 14363, 12867, 24381, 30486, 10981, 6408, 31079, 16077, 10414, 26500, 18536, 13435, 2704, 5786, 1714, 15761, 31569, 4336, 10655, 18107, 1432, 5989, 6960, 26889, 27557, 9490, 6936, +15703, 28762, 13476, 10855, 10357, 26344, 2468, 8075, 4557, 8876, 6387, 20634, 19291, 119, 6403, 32726, 2823, 12189, 1672, 18584, 10990, 6008, 29240, 29097, 7441, 2461, 3289, 1562, 30018, 12779, 8498, 12954, 8774, 21975, 23809, 19131, 15551, 26278, 27207, 20108, 2386, 826, 7975, 21677, 945, 14378, 21636, 3768, 26567, 23308, 22353, 4789, 29317, 18825, 1118, 3990, 21286, 4407, 5552, 18536, 17187, 14051, 31490, 25961, +3258, 22532, 12324, 18809, 16042, 6763, 6149, 18428, 7589, 14124, 7338, 8534, 28502, 28974, 12303, 22301, 19514, 1888, 27090, 16063, 20713, 28208, 20053, 9231, 32616, 25606, 27767, 17035, 6889, 26490, 10228, 10147, 16254, 22552, 28956, 32296, 29316, 2337, 17956, 4137, 16462, 25294, 12672, 12196, 21500, 24975, 1730, 8247, 26863, 28820, 24310, 14808, 24261, 11596, 24039, 24109, 4434, 19038, 8376, 11323, 12760, 18604, 21470, 29014, +8388, 17658, 28542, 4936, 19995, 13731, 9074, 3689, 6257, 21746, 15886, 27758, 13953, 17616, 3237, 8048, 13668, 27547, 22856, 5161, 6375, 14127, 29270, 10809, 397, 4878, 22132, 13158, 23482, 10834, 9404, 31871, 28492, 5179, 4039, 15720, 18910, 13113, 19409, 25167, 2091, 2527, 20157, 16044, 20143, 23394, 24092, 1044, 18174, 14180, 6205, 24549, 28307, 2708, 2591, 28705, 7586, 24723, 9095, 31069, 2790, 18499, 30172, 31282, +23678, 1443, 14234, 9820, 14557, 876, 2220, 16648, 3403, 22377, 32693, 23547, 13004, 24017, 24591, 31178, 5430, 30796, 22959, 969, 736, 25550, 29674, 8323, 17506, 6001, 6624, 20296, 24501, 4028, 18810, 15411, 5471, 277, 25232, 20028, 1153, 27452, 3909, 4556, 17061, 3834, 28103, 30065, 27851, 19926, 28475, 513, 17955, 18667, 1483, 18691, 11449, 31157, 27014, 28955, 4391, 870, 16483, 28892, 4898, 2526, 11535, 10370, +2803, 3999, 30398, 3956, 31451, 1539, 8512, 15745, 5373, 3848, 13042, 457, 23774, 8750, 970, 8961, 27417, 2453, 27653, 6098, 843, 21899, 2286, 5234, 22770, 18769, 1358, 27668, 21295, 12893, 5270, 24098, 16893, 2901, 28054, 15576, 4440, 3799, 31321, 9814, 7647, 11596, 10271, 31421, 20346, 11241, 7615, 14995, 13695, 2500, 21093, 14538, 24399, 23379, 19772, 14401, 9381, 21130, 9302, 30676, 1255, 14572, 22007, 18148, +17473, 17293, 957, 21914, 21092, 32278, 31728, 28739, 11106, 9231, 27393, 31452, 20472, 2240, 13679, 1399, 4740, 2005, 15937, 29139, 25384, 2941, 10773, 1997, 24071, 20075, 32674, 25327, 1879, 21913, 10707, 19353, 6438, 11664, 8499, 27531, 11175, 7459, 23502, 22281, 16690, 18127, 20966, 4394, 20367, 1877, 5794, 25107, 3882, 21731, 21479, 29267, 24673, 32252, 31264, 15976, 19559, 31170, 8535, 21438, 20315, 19243, 8023, 26754, +30907, 16522, 21517, 9314, 23981, 12251, 31596, 7903, 30379, 19794, 12298, 17978, 21671, 18092, 10318, 25554, 7055, 31797, 22053, 31728, 31281, 20549, 14937, 18072, 18952, 23472, 6742, 6499, 9947, 14766, 485, 8087, 31288, 22002, 17401, 22502, 1486, 16229, 30405, 31865, 3255, 9935, 17075, 24927, 28027, 27393, 17713, 2315, 26422, 6998, 1275, 24935, 27547, 16212, 10239, 13731, 6917, 16982, 20231, 16864, 31748, 20716, 24951, 30268, +9951, 9585, 20002, 11437, 25814, 17640, 10534, 29070, 27575, 27609, 21229, 22835, 22235, 6174, 25150, 15889, 13172, 26425, 8057, 7951, 9870, 18296, 21683, 16787, 2510, 9146, 883, 1490, 29862, 25835, 31759, 7045, 2652, 18993, 18482, 28466, 3865, 29016, 24768, 31441, 23858, 13229, 21508, 13325, 19403, 13890, 29214, 32575, 7547, 4503, 7759, 17417, 22800, 29442, 1436, 25310, 5820, 2320, 26801, 2914, 28155, 25792, 9960, 30807, +12017, 28442, 26505, 15883, 24691, 18506, 14556, 15781, 31735, 3296, 29106, 18371, 17186, 25552, 18178, 24733, 30056, 25937, 9383, 20088, 22611, 10819, 12630, 28431, 13139, 6663, 31346, 8526, 32455, 8538, 6565, 11705, 4212, 303, 27588, 28903, 18809, 9376, 11916, 17776, 12672, 8254, 3379, 29858, 1039, 21558, 21823, 31095, 14727, 31206, 18415, 4571, 9258, 31045, 234, 22397, 4941, 31580, 30924, 4628, 7350, 4721, 16333, 11563, +5024, 11153, 7698, 23833, 20529, 19615, 8842, 433, 27869, 12221, 30291, 28908, 1011, 19347, 27235, 15739, 17785, 12882, 20310, 27043, 11160, 20544, 16673, 16101, 19357, 14829, 20729, 26707, 19550, 4295, 5502, 24575, 15448, 13201, 15640, 3210, 48, 24482, 3643, 27917, 3936, 1167, 24058, 4947, 20514, 18525, 20686, 5531, 31408, 8228, 32575, 9800, 28773, 16480, 25901, 15362, 31309, 13862, 9301, 18091, 18157, 14804, 9898, 838, +28005, 25539, 4048, 28053, 17253, 7691, 23202, 21189, 8858, 14492, 26137, 29372, 250, 14055, 2136, 31658, 22284, 1943, 8690, 18289, 18423, 1823, 883, 16964, 15685, 10184, 2287, 1075, 24988, 12186, 1913, 20225, 4957, 5961, 15510, 22210, 13652, 5945, 10632, 22511, 20437, 4001, 19115, 20687, 18056, 21251, 19577, 7572, 23194, 28267, 25861, 8849, 30090, 26744, 25813, 13008, 4161, 28101, 14083, 29149, 7519, 15996, 16607, 12476, +21957, 32117, 1918, 2841, 5294, 12550, 25352, 25732, 16551, 11700, 13651, 1840, 183, 461, 9412, 23378, 28728, 2506, 32227, 26051, 29250, 25273, 6291, 643, 20606, 20374, 29793, 28125, 3602, 13632, 7833, 25559, 12981, 9751, 28400, 18276, 22302, 20985, 11240, 6085, 32685, 24891, 7925, 100, 25352, 17338, 23478, 21313, 19844, 22938, 14596, 16326, 15443, 20887, 16970, 3281, 8493, 13995, 31406, 12095, 27627, 6471, 4886, 7840, +16222, 518, 26116, 5756, 21503, 4588, 11842, 21420, 29480, 19767, 21521, 22064, 4337, 12231, 10609, 24181, 2401, 25205, 7740, 17844, 13324, 24710, 21125, 21817, 5937, 19763, 1144, 796, 26234, 6030, 8636, 9689, 6549, 1985, 15445, 28052, 6573, 27287, 16705, 3285, 14287, 5458, 25350, 18624, 17689, 3191, 10038, 20091, 28397, 17778, 5167, 8953, 9720, 26293, 30771, 15657, 13288, 31915, 16453, 6755, 5178, 25089, 16444, 11727, +27074, 31889, 7011, 880, 26409, 23716, 4165, 7928, 29174, 29515, 26552, 14096, 32707, 3822, 1419, 28336, 21600, 6586, 4521, 31320, 111, 2524, 14209, 13400, 1672, 30662, 20155, 6850, 22984, 3831, 18577, 17290, 2952, 25588, 18170, 29361, 16537, 22336, 4521, 12943, 19083, 31074, 27039, 19022, 2128, 28458, 14590, 23729, 2277, 19112, 22281, 2388, 21636, 3723, 15788, 23308, 1617, 3175, 30158, 24601, 7006, 15967, 9124, 9959, +8788, 27294, 6552, 25325, 16862, 11074, 5500, 3178, 9380, 32540, 22200, 11508, 28230, 4023, 2469, 30507, 23135, 24751, 128, 12003, 28474, 15916, 2544, 30091, 19092, 32702, 21925, 26098, 15902, 31049, 3289, 24690, 25575, 9842, 17247, 9670, 20916, 22747, 12848, 30296, 22519, 2280, 9036, 17982, 6303, 11506, 15721, 29438, 3489, 15849, 8674, 31963, 31766, 11218, 29286, 18090, 11152, 18443, 11420, 27054, 16724, 14710, 18976, 9532, +24552, 3455, 19202, 12700, 26203, 32050, 10228, 15954, 1562, 19264, 1168, 7866, 30770, 16890, 4536, 1491, 32739, 13210, 686, 31737, 24428, 29973, 17059, 2813, 15648, 28480, 29867, 32373, 10422, 16076, 9137, 2206, 19531, 28339, 14906, 12966, 27621, 25134, 28921, 29183, 11630, 30089, 4281, 9633, 14211, 8818, 11124, 14183, 22028, 11811, 13152, 13689, 9016, 30212, 16502, 24664, 25924, 13601, 24269, 3578, 29677, 638, 5784, 16441, +28977, 20690, 29407, 23830, 13056, 25560, 20246, 24686, 22882, 24527, 1551, 4325, 577, 12676, 18508, 22606, 24487, 31661, 3527, 735, 29105, 20029, 25399, 22261, 862, 16901, 25839, 30540, 17539, 31623, 14213, 13749, 19545, 10852, 4811, 32601, 3645, 25057, 24519, 26527, 16817, 26071, 30852, 17394, 5979, 16593, 7232, 30466, 15486, 10759, 31201, 11823, 30788, 23832, 1316, 31651, 7965, 27155, 29423, 25505, 26010, 10868, 6486, 12787, +21720, 11297, 12620, 25365, 3587, 4371, 19124, 20404, 30442, 17209, 5030, 3653, 1034, 12263, 1351, 16520, 23022, 32552, 28343, 21043, 23617, 29659, 19926, 31582, 24046, 16581, 24319, 17288, 27449, 30805, 30075, 16401, 9335, 9927, 8999, 12922, 14298, 28123, 558, 11973, 12564, 5588, 15626, 13598, 17851, 16978, 30118, 8106, 16762, 25693, 29149, 7611, 22584, 16307, 6426, 13862, 120, 30745, 31150, 27569, 28783, 28457, 11202, 5350, +5616, 20201, 18272, 19915, 15557, 18830, 31888, 28121, 24418, 14746, 8952, 9502, 31724, 6302, 17608, 15719, 31996, 13989, 23330, 21812, 30296, 29756, 2907, 30416, 27734, 1289, 25217, 23749, 29747, 3651, 29099, 2595, 23853, 14603, 22510, 6642, 665, 21630, 1995, 25083, 3609, 10947, 1817, 2565, 17250, 19425, 18284, 16478, 646, 8847, 5522, 30942, 5835, 8429, 28590, 801, 9719, 21039, 24550, 6698, 24691, 20881, 9293, 15776, +2716, 31804, 22418, 3381, 20666, 24413, 28465, 24275, 2593, 30282, 26841, 19843, 16940, 12357, 3553, 17586, 21204, 9075, 15761, 27040, 17505, 11583, 27841, 27224, 32623, 19624, 1154, 24546, 7737, 10447, 7554, 10454, 9483, 29972, 13835, 30150, 21617, 9532, 21657, 24210, 7047, 15730, 11285, 23987, 28088, 14838, 8805, 16524, 23914, 24566, 10796, 8651, 3382, 5870, 3107, 3237, 25494, 4261, 27783, 463, 14708, 2569, 10917, 24192, +32541, 24753, 21574, 21390, 1517, 10463, 12833, 8564, 26194, 24118, 32551, 21514, 6189, 8589, 5270, 30103, 387, 16067, 5986, 3769, 21937, 9093, 7006, 14663, 13354, 2021, 15126, 28062, 4590, 26044, 19486, 4363, 18029, 8292, 25754, 19546, 18756, 5819, 28111, 12182, 29937, 27894, 928, 3358, 3715, 6198, 693, 4103, 22265, 6679, 7872, 11434, 15772, 14879, 26097, 29126, 16900, 8456, 24421, 21491, 1732, 11139, 25854, 19761, +19432, 18840, 6539, 5420, 24659, 1882, 17602, 21829, 29777, 18530, 25187, 724, 24728, 25881, 4827, 14226, 32560, 12700, 25660, 15565, 27579, 18990, 11923, 11711, 27446, 3576, 434, 29178, 14716, 26289, 16171, 1380, 12361, 22710, 6800, 4253, 24593, 24402, 26082, 21602, 10164, 18501, 22326, 2124, 11614, 27154, 16350, 11407, 7086, 9243, 26972, 1897, 28233, 6127, 13608, 22911, 9704, 14043, 19321, 24420, 7564, 2724, 25800, 19925, +25434, 32600, 24178, 17259, 24234, 17492, 6093, 1630, 3226, 28420, 3754, 14840, 22806, 20105, 26247, 29892, 29348, 20451, 31789, 24813, 26579, 12629, 14956, 3515, 26672, 1509, 27935, 1468, 4233, 20967, 21394, 29667, 20799, 12804, 14159, 12265, 30297, 20252, 13895, 755, 15904, 17649, 15595, 5942, 4986, 9075, 3066, 1566, 29526, 2087, 26379, 23337, 14717, 8567, 26852, 8621, 10076, 22019, 10090, 14309, 10218, 31484, 11209, 31017, +11520, 25368, 10514, 9049, 12852, 24409, 9804, 28757, 9291, 25400, 1931, 14277, 1707, 4998, 15844, 31233, 7085, 9455, 21803, 21802, 18023, 15887, 30424, 28099, 5139, 7746, 9641, 15357, 6462, 20850, 13607, 17982, 13450, 24121, 27032, 26302, 15763, 4068, 22291, 25054, 29468, 24223, 6563, 31175, 29221, 22407, 29641, 3538, 31863, 18676, 25341, 17118, 1795, 22997, 12449, 6934, 30743, 22090, 22292, 4437, 10172, 3131, 22419, 23622, +27252, 16683, 17157, 10247, 20752, 6680, 2533, 17452, 30903, 9097, 15860, 27356, 31504, 12733, 30895, 30599, 31409, 23468, 14949, 436, 13697, 27399, 7371, 11672, 16721, 29663, 16109, 26894, 26, 5760, 17748, 27278, 22444, 2137, 4758, 10428, 8818, 7291, 27880, 6953, 16388, 10972, 1542, 15125, 23705, 32437, 12956, 22346, 23137, 27906, 22783, 4066, 22537, 30154, 15738, 6490, 27049, 31847, 616, 27075, 4839, 18365, 21585, 27283, +20502, 26343, 4943, 29320, 867, 56, 3506, 17255, 11028, 5048, 32380, 1966, 4717, 12569, 24312, 27854, 7707, 14327, 31920, 30244, 11713, 14890, 3966, 5994, 13969, 4583, 301, 18808, 22948, 21887, 13324, 10682, 15462, 18267, 7235, 16329, 18323, 10741, 817, 29352, 15789, 429, 31318, 20506, 12998, 22862, 15592, 20705, 4422, 14744, 18181, 16135, 29634, 22148, 22130, 10835, 26731, 22431, 29643, 16911, 11550, 10199, 27593, 27013, +28467, 2060, 10574, 14022, 12801, 11391, 10606, 28590, 11821, 9156, 16328, 24819, 32019, 31920, 12757, 3673, 13896, 30938, 19808, 10762, 20318, 9170, 21597, 14281, 31602, 18473, 31192, 10384, 28672, 26018, 4629, 24371, 28078, 15204, 5626, 8112, 26595, 16232, 3934, 5648, 25389, 20263, 30468, 24640, 19415, 10457, 28313, 544, 8627, 15353, 11306, 28946, 24524, 136, 10459, 23358, 18609, 8884, 974, 14513, 2134, 5604, 6117, 30212, +20808, 11743, 5556, 14635, 27975, 9491, 20284, 20596, 29754, 17984, 12468, 16401, 28441, 8013, 16945, 4300, 23367, 28252, 478, 15123, 28388, 10938, 5713, 14229, 19822, 6687, 28742, 21956, 12291, 2091, 19400, 331, 13834, 24957, 14967, 9042, 1680, 2483, 29638, 31434, 20467, 9339, 15067, 16140, 17352, 32013, 20440, 7951, 27497, 20919, 23074, 23117, 31857, 28787, 4578, 18911, 2707, 552, 8099, 14998, 2644, 27499, 15330, 16478, +19688, 30297, 25520, 21368, 12, 22391, 20034, 20479, 31730, 2334, 3851, 16314, 1579, 24291, 24266, 29076, 12442, 14572, 19425, 11531, 10592, 24003, 30442, 13299, 24555, 5773, 28297, 27199, 505, 10859, 10910, 20193, 8388, 3662, 8794, 8400, 26053, 28828, 28879, 25015, 31162, 32730, 8562, 32741, 24254, 60, 29049, 3928, 14632, 15706, 15460, 25224, 6941, 13134, 5755, 31497, 18908, 1285, 25928, 19413, 12144, 4070, 6838, 20533, +7733, 15632, 28933, 1018, 11693, 25045, 26034, 10087, 25007, 1828, 10061, 16493, 1888, 6342, 20422, 16520, 22049, 3114, 8977, 28990, 16248, 14732, 27719, 2388, 16017, 20880, 21801, 28162, 24950, 28640, 15927, 32683, 11504, 12092, 934, 23197, 4369, 26968, 517, 29377, 28796, 10578, 13102, 30684, 16920, 756, 14436, 6201, 3870, 23413, 2424, 20119, 5378, 30143, 22507, 21395, 18255, 11541, 16789, 10438, 7413, 32716, 10353, 18917, +12041, 11287, 9347, 16410, 5487, 9864, 13019, 1515, 20442, 26122, 32199, 4594, 26878, 13868, 10796, 30749, 4513, 13220, 18100, 9891, 10595, 7839, 31287, 28851, 19380, 15308, 6521, 26793, 15257, 16874, 12943, 27298, 28162, 22290, 10940, 881, 32154, 23960, 2397, 19828, 17314, 1828, 24422, 11424, 15696, 2450, 9405, 20210, 15670, 27505, 30101, 26266, 2577, 28620, 22349, 21957, 11161, 28870, 15983, 26418, 12976, 28926, 20948, 8370, +18448, 31888, 9252, 17834, 23080, 11649, 4894, 7626, 13477, 29316, 19051, 29174, 31767, 28456, 16616, 14669, 23194, 13949, 8167, 25771, 9802, 30516, 14960, 20963, 26618, 30943, 14613, 6827, 27101, 2793, 15197, 12781, 1913, 24449, 30615, 24994, 3330, 2741, 32620, 16808, 32058, 18903, 13214, 31057, 14592, 29830, 12958, 5018, 11011, 21126, 30789, 20813, 18874, 12981, 9008, 12725, 11157, 23621, 19552, 5490, 26414, 1981, 18272, 28328, +26431, 16119, 20554, 29761, 18861, 20406, 13801, 18151, 6542, 27015, 16440, 21134, 24077, 29398, 26152, 2321, 17756, 24173, 23134, 3863, 4386, 32143, 16588, 15543, 22996, 3372, 21034, 16643, 5353, 6538, 12203, 31784, 22657, 32757, 28778, 8750, 20395, 9811, 26901, 26937, 4059, 10573, 15303, 28136, 7204, 8687, 30457, 24960, 92, 20824, 28823, 4479, 20199, 12643, 20022, 10427, 16015, 8288, 27070, 21369, 14826, 6505, 20385, 4716, +6494, 16395, 13466, 26890, 26207, 7600, 21059, 30266, 18173, 3595, 25634, 25377, 12282, 23324, 17570, 12375, 11380, 13625, 16854, 31579, 26269, 4108, 9238, 9516, 12397, 3541, 30885, 27223, 10046, 18503, 31939, 16541, 2130, 12638, 10663, 28337, 20238, 31722, 25835, 5643, 2549, 18702, 31021, 14832, 9258, 15823, 27207, 20638, 29448, 11293, 19449, 22949, 15401, 28687, 32466, 27798, 32228, 30583, 22254, 9507, 16318, 21425, 26048, 18449, +1295, 3943, 14018, 21533, 2897, 7086, 27177, 5447, 25788, 25430, 20279, 2278, 8485, 14718, 22916, 5165, 26011, 9597, 28115, 8644, 5516, 27813, 3675, 4977, 25628, 25929, 14484, 9179, 14586, 7764, 27628, 15882, 11707, 8878, 4647, 14604, 15964, 31824, 20051, 8984, 24486, 7562, 11262, 203, 22280, 1410, 5369, 15523, 11007, 716, 24168, 16524, 28529, 27843, 21501, 21389, 21004, 3217, 30568, 2822, 10981, 25428, 18704, 22688, +1539, 23352, 4524, 17503, 22408, 24576, 26488, 14127, 32138, 4982, 14330, 21651, 6393, 19699, 4406, 17400, 20415, 28574, 1156, 16176, 23649, 22657, 4798, 11885, 25874, 2598, 14708, 4087, 28027, 644, 26775, 29566, 23996, 31300, 14301, 13637, 23108, 8021, 27764, 22478, 13004, 9326, 11361, 19397, 29026, 15768, 4029, 16673, 11574, 5186, 82, 2456, 27843, 4880, 14341, 20950, 7478, 29049, 25037, 2737, 29694, 19045, 32303, 20922, +17577, 13837, 1791, 7917, 21858, 29555, 30395, 2094, 6114, 8989, 21491, 2372, 24757, 25521, 19045, 3563, 30707, 19127, 6019, 25782, 24007, 20361, 13964, 31486, 16642, 6234, 1455, 13568, 25279, 991, 1723, 10088, 14828, 3514, 18005, 3918, 302, 15632, 6013, 6416, 24621, 27504, 8788, 16610, 20257, 27833, 20174, 18196, 14193, 26193, 11211, 5432, 13786, 25175, 4150, 30429, 31409, 5606, 11229, 23920, 6597, 12952, 1240, 21425, +16467, 19245, 25343, 16769, 2110, 31356, 23185, 26731, 26093, 31973, 10574, 13582, 27038, 30748, 31779, 8463, 24173, 10222, 13896, 5192, 2629, 18046, 2853, 1271, 23652, 14082, 25191, 30249, 27035, 26432, 18906, 10734, 12909, 11482, 27503, 15019, 10070, 17920, 8983, 3395, 17125, 19557, 16978, 11395, 17537, 15989, 19859, 8942, 26211, 987, 14134, 28840, 19033, 16987, 30111, 9918, 31070, 22535, 7399, 25337, 16199, 26306, 3303, 29108, +5020, 30806, 11360, 15090, 15958, 20343, 18486, 315, 7132, 2696, 11710, 24669, 18685, 31569, 843, 12128, 32556, 14978, 8200, 18822, 31965, 5544, 28740, 30267, 28079, 3371, 22836, 11510, 29677, 26139, 7850, 1929, 24177, 19210, 17020, 7367, 6785, 2738, 7682, 13917, 5434, 19393, 5818, 24119, 18194, 6662, 3479, 17983, 21640, 11679, 4037, 20837, 17223, 9, 18337, 12534, 3380, 8405, 24044, 290, 1777, 31895, 2219, 25954, +18337, 19239, 554, 25123, 21977, 8236, 6272, 27411, 27629, 12091, 18762, 13056, 18753, 22241, 31039, 7625, 1153, 2308, 28462, 18376, 2317, 14031, 30911, 5697, 22437, 22187, 5987, 24214, 21314, 8207, 17400, 6884, 27446, 17954, 32007, 16656, 26191, 5511, 11299, 21052, 17602, 30062, 1340, 3587, 19535, 32379, 11212, 20688, 1919, 6907, 6297, 4236, 20938, 4440, 9934, 10607, 26627, 15921, 2053, 15174, 24128, 19454, 22058, 18807, +4640, 21297, 2695, 30831, 26808, 13994, 19116, 11643, 11288, 20456, 15230, 30824, 20068, 26443, 18744, 21987, 582, 25041, 26224, 21520, 29481, 3390, 32128, 23341, 19311, 1413, 5747, 10672, 20867, 27805, 29479, 25508, 16334, 32174, 23571, 10374, 13400, 9919, 22017, 24689, 30376, 4480, 22745, 17676, 30923, 8721, 6895, 31505, 995, 351, 20257, 30476, 3741, 19617, 21049, 23053, 21031, 26796, 957, 9130, 21833, 30436, 1870, 5399, +29842, 25442, 15774, 10474, 2593, 5023, 2395, 201, 9503, 25140, 17877, 7658, 1094, 24773, 6395, 2089, 25124, 26653, 32565, 28866, 13502, 20847, 19151, 1765, 14875, 20108, 10896, 3941, 17776, 12766, 9340, 14850, 5440, 25114, 25324, 8034, 30138, 27720, 8235, 6873, 20092, 26113, 14532, 21186, 18118, 20927, 23275, 10474, 14812, 23073, 6572, 28315, 11152, 25723, 30080, 26027, 13063, 8208, 29968, 30839, 20975, 6541, 12921, 26415, +31655, 5478, 1681, 29025, 430, 9917, 3131, 20522, 3262, 17663, 8941, 21380, 5822, 32216, 31854, 20635, 22521, 5659, 16182, 905, 31382, 13494, 26933, 11678, 21703, 24133, 9749, 9910, 30674, 22671, 3557, 29562, 28149, 5239, 25819, 28579, 15156, 28950, 16333, 18418, 13845, 25274, 7030, 19668, 24723, 6116, 7535, 14476, 11775, 23717, 15382, 10390, 4443, 9547, 22068, 26146, 912, 31817, 3288, 31587, 21720, 6846, 28381, 17101, +12085, 21432, 12912, 27241, 17615, 29246, 12891, 31460, 21752, 19921, 18360, 13707, 26037, 25895, 28184, 5045, 16844, 10798, 15435, 21288, 20345, 4735, 14666, 21257, 3784, 17955, 20076, 25505, 24801, 15689, 9838, 4118, 4354, 22751, 31359, 21969, 19229, 11482, 20661, 8213, 31403, 6254, 21921, 24672, 32149, 17337, 29717, 16226, 28135, 12384, 4746, 15712, 17119, 19412, 4201, 20904, 4599, 24278, 13641, 29400, 7199, 23479, 750, 11553, +13462, 32109, 754, 32691, 10823, 21416, 8137, 9458, 27670, 30058, 1363, 27051, 14627, 31080, 10509, 9994, 10697, 15255, 25706, 27816, 1900, 29907, 15952, 6499, 21417, 29593, 3132, 28617, 20305, 3882, 7402, 999, 3224, 8157, 923, 14047, 29573, 9060, 23506, 24475, 6350, 24869, 18758, 20977, 23181, 29268, 30971, 1110, 11755, 23909, 28927, 13655, 21048, 12111, 20155, 9698, 8937, 23287, 5547, 29242, 27169, 12949, 30241, 30393, +21106, 31164, 11673, 17911, 7456, 2411, 9618, 13806, 27280, 28377, 2015, 17693, 24877, 218, 18804, 3864, 24127, 14963, 17520, 12408, 27074, 4907, 22106, 3243, 28194, 27653, 32485, 22595, 7834, 29959, 20221, 28941, 28355, 31894, 14084, 3044, 1537, 23703, 16850, 28817, 19312, 18866, 13742, 11421, 19084, 32546, 15285, 10444, 14741, 37, 22852, 9048, 4944, 12190, 12291, 370, 7075, 12009, 22966, 14909, 9200, 10419, 11082, 4787, +9545, 25167, 7831, 11082, 16102, 24682, 7131, 2646, 10780, 20873, 14067, 29864, 20652, 29352, 7540, 2625, 29390, 30392, 11673, 1566, 9814, 23965, 1937, 16889, 3206, 24903, 31799, 12406, 2554, 10113, 17193, 12099, 2512, 25025, 23181, 18614, 16939, 30312, 21260, 27719, 18417, 2559, 24815, 6301, 31912, 32356, 8927, 28534, 29980, 20600, 30100, 7027, 11797, 32037, 23916, 15003, 24172, 22947, 27409, 26726, 293, 11835, 6057, 2805, +4092, 29238, 21420, 21031, 26782, 9912, 15982, 12432, 12472, 8029, 18733, 11616, 7617, 27660, 7382, 4830, 15493, 4714, 11857, 27290, 3984, 3005, 9526, 28156, 25953, 4167, 22115, 26246, 16002, 28172, 29051, 20094, 24643, 17703, 8357, 18657, 27616, 24339, 31089, 7320, 32369, 17055, 18936, 7218, 11947, 26318, 12048, 27440, 31032, 23905, 21963, 2248, 26911, 31489, 30405, 20096, 2888, 19752, 13574, 18891, 15156, 9857, 6217, 7031, +27561, 14575, 25689, 22409, 6146, 24010, 29729, 5747, 8297, 15897, 12966, 20245, 9447, 25014, 14917, 7711, 16152, 4112, 9960, 10295, 2833, 7597, 30391, 5722, 27349, 11197, 24613, 9737, 21054, 30830, 16769, 15847, 12637, 9690, 5488, 18784, 932, 2449, 24531, 9230, 18346, 4729, 29475, 27793, 29744, 11624, 2737, 13128, 15737, 12697, 23423, 18570, 20294, 21046, 24292, 14875, 32243, 16137, 24612, 20529, 14200, 8613, 3609, 26837, +18303, 9097, 12853, 19236, 11547, 4617, 28466, 29893, 9346, 25173, 24919, 6322, 4029, 27656, 19450, 19766, 7585, 10105, 5569, 27879, 31151, 29861, 9986, 30626, 13231, 1830, 18388, 27431, 10444, 21997, 21500, 28747, 31094, 1586, 15215, 9873, 6203, 10913, 6999, 15549, 3318, 31918, 21872, 7348, 26806, 8554, 27114, 1623, 18660, 32683, 29502, 17043, 29777, 6720, 14902, 10240, 8550, 522, 4903, 18994, 22519, 26403, 14974, 20845, +27989, 30189, 30719, 1424, 8335, 4950, 16974, 11653, 4100, 6078, 19001, 30906, 14632, 13348, 32529, 524, 13263, 29263, 17568, 10272, 3215, 32470, 20512, 11765, 224, 25415, 30760, 22743, 19051, 12966, 10820, 14272, 10387, 8771, 15697, 18722, 13721, 32671, 30376, 17821, 5981, 16609, 15959, 20613, 29957, 15720, 21138, 10453, 12215, 5938, 20725, 15430, 5640, 8470, 27196, 5864, 1117, 25188, 28607, 20168, 5386, 6659, 1673, 15773, +15431, 17370, 1728, 29152, 17273, 32104, 14206, 23254, 15945, 30165, 11099, 13135, 13118, 32237, 23588, 25333, 5407, 11545, 7996, 11047, 20015, 2424, 16911, 21133, 27612, 12750, 8533, 230, 19410, 10206, 16003, 2073, 27576, 17731, 31225, 12081, 17067, 12663, 2567, 245, 10061, 13667, 13380, 23179, 13136, 4200, 15744, 18544, 15745, 23740, 29591, 2993, 26164, 13735, 24126, 21008, 26485, 32659, 21238, 13127, 10098, 4474, 15200, 4906, +22205, 13658, 16988, 6505, 26321, 19555, 6750, 3614, 454, 20130, 26793, 13591, 24330, 9770, 32135, 7307, 742, 28958, 10300, 26907, 9925, 1658, 15147, 3643, 1550, 3618, 16770, 11648, 8092, 31971, 16554, 30297, 12861, 774, 4034, 6414, 20330, 10784, 10029, 20784, 30914, 4054, 1607, 22476, 13824, 974, 29784, 14567, 29933, 7316, 8706, 7090, 8975, 23853, 10733, 10525, 27471, 27504, 22173, 2795, 26707, 5959, 325, 6800, +6734, 4359, 13214, 27064, 15144, 23243, 15080, 13290, 27298, 16688, 2999, 8354, 17662, 15, 22921, 14827, 7331, 31627, 21918, 16306, 22713, 32651, 26831, 17416, 27387, 16236, 20212, 21326, 22196, 20537, 28126, 28930, 24896, 8573, 23226, 7272, 31816, 5538, 20563, 26346, 22226, 23562, 1933, 7121, 23577, 24854, 21948, 30908, 23714, 11098, 14447, 13659, 10982, 8510, 31075, 5601, 24747, 18519, 26928, 14175, 6288, 22286, 10337, 31185, +30859, 795, 5689, 29908, 6333, 26252, 23486, 28560, 17046, 25419, 2913, 7855, 17506, 24861, 5996, 8452, 3192, 20443, 22111, 14174, 28953, 20418, 19775, 20932, 6170, 13935, 2339, 12458, 3454, 12676, 10875, 1545, 13471, 16565, 31453, 19805, 10049, 22172, 15597, 27096, 14823, 18510, 2183, 32329, 10603, 8179, 8013, 13795, 28622, 30124, 27969, 24808, 17775, 14977, 12972, 23945, 28912, 15312, 3635, 32366, 27988, 14511, 1144, 8692, +31076, 32597, 28497, 8357, 22001, 11326, 2685, 4057, 29836, 4869, 3618, 7671, 13048, 11632, 21467, 8903, 8988, 16668, 943, 26763, 31645, 13915, 17940, 27790, 29227, 21576, 27388, 24448, 3319, 28532, 372, 1627, 28362, 28869, 9984, 17595, 7427, 12670, 21652, 4495, 17539, 25271, 12166, 30587, 4135, 865, 6722, 13123, 17534, 7665, 7119, 16411, 21581, 25059, 11433, 18040, 13867, 6054, 9720, 17186, 1818, 10092, 18813, 30180, +6193, 28798, 15008, 13620, 8700, 3892, 18115, 26239, 29163, 30282, 24058, 530, 31147, 30781, 13654, 15913, 5678, 20773, 32325, 27259, 13064, 10990, 12532, 26932, 17044, 22252, 11350, 18863, 32345, 30164, 16275, 5770, 26194, 31283, 19391, 2126, 2408, 4738, 28365, 31571, 2252, 19655, 32102, 632, 17668, 12988, 16545, 23347, 993, 16102, 17838, 14057, 27093, 30370, 8221, 11369, 19855, 19572, 30232, 19432, 16968, 13740, 25202, 10394, +12255, 11825, 12520, 14663, 16564, 8117, 13467, 18816, 27772, 12801, 19448, 12673, 25789, 3226, 3252, 26782, 19328, 21090, 8071, 13653, 18693, 16293, 25023, 5780, 3097, 22487, 25212, 20065, 3459, 17646, 30459, 15715, 29472, 10211, 30378, 13268, 18328, 11077, 32084, 13332, 23878, 18765, 26005, 16899, 21991, 29257, 10913, 8551, 17580, 18985, 22205, 3505, 2510, 14460, 9285, 5607, 4179, 1729, 25672, 7639, 19375, 23363, 23354, 16079, +806, 20964, 29347, 19134, 32042, 28664, 32466, 23152, 14661, 25704, 7284, 3884, 22193, 18197, 12435, 7005, 4414, 1872, 10510, 6924, 16332, 19795, 12531, 20512, 21524, 5435, 28151, 8132, 28798, 18737, 24211, 29604, 6933, 20791, 15970, 6207, 16687, 15669, 29360, 31348, 8605, 3876, 2464, 30798, 22073, 14899, 5036, 26488, 16772, 15546, 644, 336, 2574, 13176, 20848, 24098, 18611, 16231, 32230, 14642, 2200, 23674, 11478, 9134, +11697, 27449, 15341, 28384, 10350, 11933, 26964, 18955, 15809, 29428, 16985, 5115, 11559, 22021, 31603, 28331, 4800, 32247, 28668, 7374, 12655, 16748, 31472, 31267, 212, 30935, 13141, 2412, 21841, 24619, 11546, 770, 19300, 26888, 29154, 29650, 6053, 23350, 15837, 21863, 20010, 55, 26978, 31569, 22076, 25813, 27133, 26876, 25292, 23033, 1482, 5180, 7013, 187, 3679, 7225, 31122, 16820, 9638, 20195, 8671, 21184, 20965, 27972, +15304, 17351, 24854, 21358, 7933, 7924, 10453, 27943, 7979, 4663, 26744, 30055, 30476, 21109, 24164, 23000, 11374, 25646, 28180, 18388, 25833, 31859, 25613, 24187, 15911, 2483, 11614, 24583, 23668, 32579, 19787, 6204, 17162, 11873, 27562, 25095, 19797, 5247, 20270, 27776, 9910, 14247, 25064, 7618, 2588, 16460, 30619, 13963, 9338, 26031, 32351, 2404, 25123, 25196, 26591, 8266, 27680, 5438, 81, 18580, 5249, 19868, 24784, 22412, +31742, 19579, 14739, 18771, 24826, 2242, 13780, 1969, 16489, 6076, 9587, 19077, 22536, 7438, 272, 31874, 702, 32623, 1510, 25825, 25052, 28102, 1323, 19964, 772, 1405, 5776, 6021, 21273, 30560, 28433, 20247, 17371, 10405, 6251, 9430, 12647, 20031, 11399, 29136, 26107, 20986, 15445, 15875, 28425, 15718, 14981, 29127, 15573, 16492, 22184, 7857, 11826, 23507, 27821, 12598, 24912, 829, 18619, 13418, 31390, 14285, 897, 15993, +24690, 7148, 25423, 4569, 27179, 4054, 937, 20518, 25041, 16382, 3625, 20698, 32100, 18607, 17057, 14906, 2331, 6473, 22763, 14157, 29980, 17817, 26755, 22125, 18646, 12606, 2775, 17268, 26891, 3672, 494, 18813, 10821, 25917, 23382, 5232, 29972, 24319, 25751, 22245, 7934, 29376, 10175, 7266, 15215, 27232, 22172, 17546, 937, 12168, 31703, 30917, 29985, 25690, 20274, 15863, 5529, 23049, 364, 32420, 26722, 858, 18466, 4775, +26775, 9080, 10007, 23979, 632, 2990, 13456, 8566, 32367, 23631, 15832, 14814, 18095, 5237, 32361, 19032, 17405, 31296, 17182, 14622, 24219, 4688, 30485, 29748, 27738, 30849, 29400, 21692, 31707, 15098, 26467, 25715, 24179, 3706, 16926, 24811, 6697, 30383, 609, 6296, 21246, 16441, 21110, 6574, 21678, 20703, 25606, 6315, 19232, 10020, 20937, 10683, 14709, 18655, 7663, 9679, 16736, 4295, 31371, 15676, 19394, 25070, 8623, 10805, +28776, 25549, 2848, 2705, 23164, 3457, 9001, 11643, 19898, 30112, 18217, 8809, 18047, 11055, 15124, 4511, 21076, 3294, 15194, 3017, 21949, 22857, 12696, 5917, 27153, 11299, 21593, 13779, 3601, 30216, 24584, 32377, 22998, 27432, 2315, 13394, 30889, 11316, 25037, 18019, 8660, 10486, 26828, 26708, 21542, 9185, 31219, 9850, 12479, 13646, 12867, 1660, 3735, 25563, 7577, 30888, 4094, 29171, 11899, 7695, 26619, 3715, 7304, 16849, +31147, 9619, 30244, 29268, 20936, 22513, 14520, 29596, 232, 8580, 23536, 21774, 17765, 21988, 31624, 30244, 2866, 11723, 31904, 6601, 4518, 6714, 4722, 8612, 3117, 16621, 16307, 29736, 20337, 23611, 13818, 18716, 463, 11294, 15217, 21399, 1039, 29737, 18227, 1271, 5549, 8996, 23045, 23315, 30984, 21901, 20791, 1082, 856, 19928, 7683, 5374, 26642, 12405, 13986, 29759, 29027, 30293, 26727, 16596, 21137, 7777, 2544, 21600, +19071, 17761, 10231, 20111, 14730, 28458, 21382, 20280, 4686, 11660, 10827, 2902, 793, 31618, 3984, 1650, 18778, 11668, 7024, 12652, 24073, 21011, 9643, 20332, 18536, 3603, 4160, 6905, 11380, 6705, 28505, 30452, 24466, 5968, 17795, 6429, 1659, 6409, 26709, 6345, 18069, 4768, 9248, 18863, 3618, 13232, 20513, 22397, 24900, 27537, 2281, 16206, 15780, 11925, 3770, 1549, 15528, 7931, 8454, 26908, 14636, 4192, 24592, 6334, +10160, 9619, 12763, 11819, 16029, 6704, 18165, 1330, 11472, 27413, 20193, 15091, 7877, 7938, 4720, 10, 2708, 7001, 16216, 18488, 18926, 19986, 20037, 1686, 27917, 28492, 28595, 9785, 32684, 20419, 16120, 10076, 30039, 28883, 21896, 13300, 2820, 7293, 14630, 14292, 1938, 2056, 29383, 9815, 9994, 1335, 9825, 12702, 8337, 26041, 31191, 27263, 13260, 18460, 28950, 8409, 14184, 24777, 18195, 14100, 12428, 1547, 24177, 9699, +30430, 13305, 22999, 482, 20598, 4862, 14775, 22536, 6918, 11390, 32351, 16912, 12726, 9409, 29615, 21063, 2682, 28038, 15558, 15942, 13730, 11740, 24352, 27915, 3749, 9779, 9247, 16178, 11326, 656, 25877, 8988, 13961, 16109, 9471, 1791, 20971, 24246, 24327, 27889, 2868, 23911, 12033, 15594, 552, 8880, 3889, 3234, 4150, 19448, 19177, 17881, 31188, 10761, 13028, 2170, 20540, 22275, 18348, 31866, 22932, 11457, 8086, 4125, +27566, 17557, 5917, 15769, 9035, 30244, 10890, 11904, 21387, 22924, 27498, 21939, 31804, 31388, 25174, 3187, 18068, 11583, 21068, 16488, 22344, 1328, 18658, 10116, 23603, 4238, 9214, 13767, 15696, 17300, 17893, 10494, 2090, 23810, 26264, 11125, 21286, 4386, 23029, 9906, 27310, 17760, 31845, 26347, 16380, 24251, 29534, 1680, 3066, 17834, 18168, 25410, 19162, 4059, 2758, 9997, 8297, 11972, 23765, 23993, 29273, 8890, 1720, 31363, +32700, 27984, 9720, 21218, 32370, 32750, 31124, 26913, 17742, 30202, 20492, 1354, 21685, 17258, 3034, 24752, 2324, 21202, 17394, 21486, 25261, 20153, 31483, 791, 32125, 22480, 24784, 28630, 31370, 26504, 27225, 31302, 21720, 4178, 19753, 21323, 4160, 18109, 15468, 21902, 15543, 3192, 23256, 4461, 20450, 26290, 29213, 22774, 14724, 13839, 11492, 7218, 1224, 10207, 8009, 582, 32688, 25, 29212, 31290, 26530, 23670, 29825, 15482, +27848, 16810, 4037, 32008, 2151, 19505, 21142, 17695, 22697, 11630, 22156, 10379, 5152, 18601, 385, 19876, 32440, 11877, 27094, 897, 22085, 2335, 1479, 22005, 2361, 30691, 20527, 28891, 21593, 17584, 11605, 16673, 1626, 15643, 15913, 3778, 2380, 4287, 21473, 25078, 15917, 10861, 2689, 21069, 29462, 3075, 8178, 29134, 14952, 2504, 30031, 4269, 4840, 31510, 26274, 7201, 29434, 14034, 3324, 18259, 31618, 14929, 2165, 477, +30572, 18078, 4255, 185, 22366, 25728, 25263, 5515, 3821, 27952, 26585, 515, 31027, 1995, 29649, 13212, 4499, 26913, 17481, 9339, 25655, 10988, 16540, 22321, 25022, 19864, 7813, 23872, 2026, 9978, 24349, 32598, 28056, 28604, 15, 17654, 21564, 25278, 23170, 25385, 20463, 16987, 25900, 18722, 18982, 22782, 31934, 23481, 16927, 16648, 53, 9814, 27636, 16593, 32136, 19890, 3690, 7181, 10994, 5716, 17159, 2576, 5546, 12447, +31180, 5562, 30102, 19977, 30840, 20504, 12594, 18535, 4723, 5727, 4490, 23705, 28509, 3656, 14418, 12668, 20304, 14471, 22482, 15172, 31065, 21850, 2294, 1987, 29031, 13289, 7703, 13422, 15865, 13249, 25870, 14277, 18811, 23204, 1486, 16884, 10940, 14081, 2651, 15663, 19808, 7141, 6600, 15549, 10798, 21018, 28217, 31102, 2722, 17931, 13507, 1019, 7014, 15801, 3006, 3277, 29090, 10709, 16700, 12187, 23958, 9802, 26465, 10002, +238, 27951, 26886, 11178, 9264, 29537, 26841, 29072, 3911, 673, 11853, 14709, 21691, 7302, 13043, 24413, 25234, 26550, 25432, 32248, 9584, 28438, 2757, 5906, 6379, 19457, 18094, 30338, 29259, 11791, 7572, 29497, 6974, 1690, 7907, 16239, 31227, 1980, 12543, 2370, 2653, 24397, 17079, 24345, 31699, 30123, 15990, 24165, 23905, 8655, 23645, 721, 4325, 26403, 6628, 10705, 13092, 24722, 8275, 9584, 3745, 15847, 6313, 10719, +17537, 14221, 26958, 15996, 16201, 6734, 18367, 18855, 31131, 2678, 10432, 30062, 33, 26422, 21460, 23939, 2309, 12337, 24660, 6635, 5972, 31288, 17340, 19065, 23242, 25615, 28649, 26987, 8694, 2194, 4939, 26231, 16415, 31897, 9459, 32617, 5863, 27826, 18704, 4226, 30505, 29136, 1521, 30538, 22790, 22981, 21709, 25100, 2550, 13602, 31735, 8523, 12122, 16307, 27588, 2597, 9154, 23469, 29584, 17848, 25663, 1755, 11311, 9311, +885, 20770, 9160, 6748, 15829, 27864, 10975, 13566, 24232, 12496, 11336, 14254, 2709, 278, 6586, 5259, 13880, 5553, 13782, 26002, 21860, 8602, 28599, 31014, 32071, 25416, 16094, 24967, 27171, 27405, 1510, 28056, 15408, 10670, 2037, 31237, 5766, 13012, 12035, 29998, 25508, 23371, 11484, 28217, 23649, 18071, 708, 4761, 23624, 14491, 30764, 12717, 23093, 26595, 10963, 22397, 19243, 27058, 14596, 13647, 21695, 16106, 8935, 4335, +26776, 10972, 2804, 32542, 23984, 14839, 29772, 16724, 5443, 8488, 12173, 29092, 26559, 12882, 1086, 17416, 27373, 31850, 30133, 17698, 25677, 8328, 7327, 12153, 2618, 21923, 25800, 24314, 5261, 1967, 28649, 32037, 12940, 31454, 31811, 4156, 13525, 28815, 20881, 18968, 4536, 286, 15293, 31095, 13168, 16379, 15743, 7773, 15461, 13108, 25472, 8370, 21437, 31, 20523, 24055, 21955, 13555, 15601, 27216, 15523, 11483, 26486, 28463, +10169, 25529, 32619, 23694, 21577, 20732, 9895, 26113, 21019, 25188, 24440, 1419, 8799, 7416, 9193, 24260, 20524, 1897, 32630, 9193, 1928, 20386, 481, 23883, 1173, 16082, 18332, 16696, 27565, 12050, 12391, 4966, 4811, 12243, 28661, 26388, 207, 5788, 19733, 21226, 30976, 11406, 22646, 7007, 18822, 31839, 31267, 6578, 968, 31129, 15772, 2896, 18747, 16253, 26780, 19921, 32335, 12344, 3849, 27133, 24394, 16241, 32099, 29205, +28484, 27992, 22826, 28691, 1012, 9791, 17150, 31988, 21197, 7028, 6227, 7251, 6099, 4726, 13830, 7067, 3088, 29602, 9963, 21835, 13087, 3975, 8988, 12654, 16319, 12838, 7019, 7945, 29079, 6351, 4383, 24795, 1575, 27209, 20718, 2588, 4232, 5100, 1808, 25430, 12128, 8036, 32681, 18227, 12762, 13743, 25294, 15850, 10577, 2490, 4918, 23664, 6465, 13906, 3551, 22785, 26744, 10570, 30730, 23055, 16921, 2345, 15082, 18497, +29554, 3033, 21085, 1019, 8133, 22893, 26449, 20262, 30929, 26362, 5721, 10924, 7338, 31016, 26774, 17915, 738, 31692, 8812, 7203, 12831, 12363, 29988, 6807, 22933, 27951, 29863, 7087, 30296, 12177, 25584, 27083, 15210, 13901, 28102, 23344, 4026, 21783, 10838, 2188, 15377, 16559, 13112, 22715, 14807, 7118, 7863, 15545, 6043, 16675, 22749, 18874, 29038, 19969, 25681, 19203, 15152, 22776, 26290, 12681, 2186, 19106, 6996, 17396, +239, 2330, 7972, 4266, 24113, 18810, 6454, 6722, 2602, 19566, 29438, 17409, 26684, 4533, 187, 32727, 21208, 22936, 18833, 17478, 10137, 11747, 3913, 25290, 1755, 30204, 5203, 3941, 16542, 12199, 21338, 16782, 14529, 29310, 21048, 5874, 15353, 27502, 12596, 17955, 14300, 9266, 2596, 8216, 13799, 2783, 8176, 2239, 25719, 27009, 19717, 3089, 5988, 23631, 28379, 7744, 21067, 814, 11685, 4841, 13013, 255, 21623, 27542, +29566, 9903, 648, 12151, 4637, 13244, 30106, 18937, 22511, 32702, 27154, 3542, 2718, 2562, 5782, 28437, 29571, 25499, 31526, 2792, 16362, 27137, 10536, 4661, 27951, 22221, 9503, 8196, 22477, 31126, 2970, 19275, 8262, 3618, 31426, 12899, 16863, 28764, 31837, 6606, 28698, 26223, 10148, 31416, 28785, 15930, 27086, 25588, 8662, 25844, 28380, 25024, 20214, 6148, 29686, 15397, 28370, 6421, 23594, 18079, 4779, 26564, 4586, 13041, +30183, 3244, 25941, 14278, 32008, 25010, 20884, 27938, 18465, 31032, 26587, 14482, 14195, 20905, 7302, 22857, 13981, 2915, 15113, 1427, 9063, 12031, 16825, 4665, 18452, 7651, 22744, 23232, 1447, 27330, 3505, 31630, 30574, 29446, 13140, 29814, 21688, 1256, 24985, 7385, 32289, 18804, 21867, 13716, 6941, 29170, 3805, 20922, 32085, 18918, 22350, 8380, 30950, 6407, 13046, 16634, 14058, 3022, 7098, 15505, 30353, 10604, 14368, 28159, +7282, 27508, 25206, 28971, 28765, 17423, 3588, 28286, 3459, 25456, 9234, 10400, 21858, 13039, 31322, 21175, 31957, 20904, 29555, 30139, 27311, 9833, 14006, 8601, 12856, 21104, 24107, 10441, 31708, 5707, 5832, 6223, 447, 31038, 2426, 29212, 15693, 6014, 24730, 19152, 31470, 1196, 29552, 20560, 14235, 28107, 8967, 13425, 16243, 5755, 10796, 10787, 15588, 24802, 19388, 28444, 13139, 10727, 6117, 12079, 16434, 11950, 18302, 16882, +10220, 20728, 13326, 25914, 26743, 5289, 12298, 25445, 6485, 9083, 13238, 20721, 4422, 22205, 1378, 20665, 27960, 12174, 31452, 10781, 4209, 18073, 6457, 17348, 28800, 12575, 29427, 12467, 24525, 14962, 29349, 1977, 2922, 9907, 27891, 29665, 15196, 7422, 22343, 21682, 16505, 2813, 9635, 20927, 25018, 11013, 8824, 20211, 23187, 7509, 30992, 27396, 25582, 4681, 11976, 21614, 17256, 8636, 1313, 9013, 23598, 30662, 10991, 26520, +7802, 6114, 23418, 22998, 13536, 12993, 11912, 30041, 15806, 21547, 18200, 8056, 32560, 27025, 28267, 22980, 1766, 26491, 17608, 27348, 31173, 29585, 16194, 15661, 5453, 17508, 24675, 29051, 15402, 2898, 22803, 23204, 9012, 13453, 13435, 22549, 26446, 25347, 19822, 9484, 14127, 5255, 17541, 13919, 32280, 13040, 4131, 1278, 6764, 21740, 28626, 5169, 18557, 12052, 20830, 24010, 29560, 12737, 20293, 12195, 15635, 10328, 2631, 24648, +23782, 16066, 14429, 17460, 8646, 1483, 26945, 22773, 6738, 11718, 3924, 6250, 24758, 8056, 7528, 31522, 29796, 3386, 3923, 15585, 15439, 24754, 6827, 12231, 4723, 27120, 24426, 20359, 4680, 27058, 12239, 28462, 10356, 26668, 13155, 19002, 28151, 7332, 9007, 2122, 19050, 12932, 8372, 11040, 20988, 15901, 9795, 18016, 19287, 13718, 833, 1958, 5704, 7660, 14190, 10428, 2012, 5848, 30787, 6692, 138, 10258, 2387, 10495, +4158, 15542, 29497, 32309, 22874, 5737, 1663, 9156, 18669, 10036, 20196, 6889, 25937, 29991, 24905, 12456, 10942, 25738, 14415, 16646, 630, 28605, 27074, 2642, 1685, 25093, 9334, 1824, 2583, 11721, 12319, 6741, 27263, 9048, 6283, 17369, 14785, 7946, 26525, 686, 17982, 13954, 7575, 11151, 11177, 32480, 23608, 22119, 25450, 5255, 5998, 26080, 1092, 304, 28722, 2777, 25398, 5289, 4601, 27981, 17010, 16920, 1955, 11506, +25969, 8238, 28875, 7986, 16184, 22633, 8673, 1399, 3819, 16248, 12550, 14996, 15961, 3390, 4348, 8643, 8645, 10346, 1956, 9737, 10650, 30678, 12515, 3280, 3199, 17116, 31262, 20210, 1269, 449, 31716, 27238, 8687, 27823, 2456, 24871, 17688, 11129, 26270, 21507, 27378, 6053, 3736, 10571, 9443, 8084, 19214, 18089, 18430, 21170, 27826, 29080, 19081, 7573, 32361, 22280, 24690, 30855, 9722, 25959, 31304, 8670, 20429, 7223, +3726, 22885, 32094, 21414, 1247, 25597, 10154, 28625, 31650, 13890, 6428, 8325, 21974, 25642, 26414, 7636, 14045, 21473, 3948, 358, 29046, 3541, 22638, 20968, 1628, 32361, 14159, 164, 8263, 1820, 7387, 11989, 24706, 6714, 636, 25953, 32311, 10790, 21810, 31193, 24680, 28238, 6750, 13886, 21112, 397, 21522, 2389, 21870, 25470, 2747, 18148, 29012, 25386, 6349, 30640, 24979, 20508, 30805, 474, 22329, 5424, 12464, 14267, +12138, 13100, 7452, 11681, 23890, 29262, 10106, 15802, 24732, 16857, 29688, 13076, 17254, 18442, 15466, 6356, 11144, 18213, 24504, 7388, 10831, 30853, 5261, 3042, 18594, 3298, 3517, 8155, 8722, 15981, 22422, 20861, 29081, 29874, 32542, 20203, 26368, 9881, 3237, 18332, 26738, 157, 31408, 11224, 18599, 14106, 17580, 29743, 32320, 9316, 4364, 10383, 7402, 9625, 13426, 25996, 12923, 16943, 1383, 21645, 156, 23805, 9738, 29237, +20911, 9513, 16672, 14511, 19394, 19909, 75, 13364, 20066, 31483, 24588, 5897, 12822, 9400, 2872, 12374, 18716, 7236, 22757, 26118, 16861, 3415, 19346, 29784, 20358, 20729, 18662, 20514, 11766, 28400, 16983, 32677, 5145, 887, 14420, 24539, 20796, 14495, 5135, 8094, 13211, 29723, 13991, 26033, 6355, 16864, 5639, 25072, 24100, 28396, 18422, 8194, 31812, 5001, 5210, 19402, 25730, 23872, 7149, 4729, 19505, 24132, 4638, 24650, +25020, 19059, 16422, 13048, 786, 21557, 21143, 13997, 18513, 2366, 7262, 24868, 19230, 12901, 17172, 10563, 8530, 2827, 18757, 7574, 7828, 23967, 26976, 790, 15072, 1357, 5519, 1809, 25490, 10158, 26459, 17742, 29217, 10113, 30790, 30003, 31671, 19165, 11233, 17416, 21532, 18495, 9516, 7994, 31397, 26689, 18557, 7159, 29516, 4546, 14733, 4576, 28514, 8941, 5366, 10818, 10299, 10886, 12627, 3021, 21044, 6318, 20763, 17493, +16432, 18785, 14728, 15335, 5183, 25961, 32751, 26715, 11689, 9499, 1941, 10318, 3420, 20499, 17477, 168, 25045, 32210, 4744, 20791, 8383, 10111, 31609, 18682, 20997, 11468, 21703, 9273, 17787, 9698, 26766, 1451, 28484, 8726, 16786, 899, 1920, 16769, 27614, 13609, 26268, 29555, 23927, 29689, 17286, 8636, 29857, 9564, 8078, 1834, 30355, 16461, 11945, 29197, 2376, 174, 7897, 24079, 9447, 25684, 1010, 3445, 27135, 29494, +12171, 11153, 30393, 14091, 27922, 25239, 27700, 21423, 22026, 18859, 18344, 6545, 27495, 15433, 16109, 2805, 17267, 13696, 19267, 29212, 10125, 21643, 29386, 18023, 12954, 6065, 10939, 13964, 9510, 5307, 10690, 21682, 16460, 8315, 3005, 11615, 786, 30706, 270, 22813, 16797, 18614, 29358, 11525, 1279, 12699, 14330, 18547, 26395, 829, 14991, 3753, 22472, 11610, 21776, 2659, 17675, 32715, 16623, 27186, 5254, 27314, 16100, 21715, +2861, 19105, 562, 3648, 17043, 832, 26461, 1073, 19446, 23051, 12598, 20725, 2982, 26928, 6504, 29377, 27758, 21496, 362, 17462, 338, 22138, 20121, 18013, 22086, 3977, 12431, 27340, 31291, 28531, 16287, 1384, 14869, 16849, 5032, 31912, 17681, 31493, 217, 4359, 21776, 12815, 25085, 24758, 6976, 31589, 21368, 1966, 20317, 21730, 19428, 20655, 11101, 6782, 5901, 419, 10759, 18332, 27759, 9282, 14096, 11279, 10666, 28965, +28128, 15699, 28109, 13042, 14424, 28327, 17401, 3433, 8374, 9718, 28191, 15350, 8540, 16791, 17316, 28857, 5754, 3977, 16745, 16855, 10759, 22646, 17274, 21518, 8210, 12265, 30800, 22306, 23544, 8698, 18503, 18905, 24397, 13845, 31947, 6054, 9404, 16580, 9487, 17778, 26299, 4910, 361, 2071, 21702, 17677, 30928, 27456, 21654, 14905, 11543, 32413, 4783, 28817, 21163, 12994, 8314, 19195, 2532, 31859, 27894, 21036, 17996, 19523, +2113, 17175, 25577, 11517, 987, 2296, 29295, 27286, 7207, 29656, 29357, 28909, 14566, 27518, 23597, 3452, 9655, 2372, 3098, 14439, 31189, 24261, 27433, 6735, 10689, 29965, 5826, 5815, 18233, 23822, 25338, 20346, 8229, 18148, 31863, 9217, 20444, 28391, 3735, 27651, 25279, 325, 23792, 7077, 27843, 14621, 10530, 4730, 16993, 13628, 19169, 15414, 5121, 13834, 22150, 15810, 11032, 27976, 21625, 29265, 19031, 14196, 16844, 27260, +32344, 15939, 3709, 20020, 11562, 7445, 14904, 4074, 7770, 5928, 11151, 2845, 20550, 21681, 7575, 4775, 2541, 26745, 20190, 7663, 7811, 9572, 23473, 18843, 4780, 12331, 15341, 23811, 26527, 32185, 18304, 26103, 15356, 22013, 13355, 26919, 29458, 28259, 30993, 4460, 1420, 9376, 7305, 21970, 31058, 14881, 26745, 831, 8858, 14167, 8494, 16669, 23739, 31968, 2745, 28520, 11531, 18086, 19563, 5290, 17503, 5099, 31393, 91, +27113, 11980, 27010, 23803, 7472, 25235, 28264, 8892, 1844, 2801, 30862, 134, 17682, 24839, 965, 26540, 6239, 9460, 10442, 29978, 8660, 13187, 25730, 20191, 31273, 12526, 25481, 16008, 17625, 24106, 16099, 11970, 3318, 10342, 3006, 10790, 2809, 31270, 19682, 4653, 1303, 17776, 4787, 18986, 9848, 5753, 12758, 16087, 15213, 23200, 13297, 23873, 3619, 6260, 11296, 2124, 18786, 4009, 18132, 3643, 28115, 1464, 15614, 31433, +11806, 18620, 9456, 14615, 17122, 29138, 19269, 18425, 14147, 24056, 4643, 23995, 29809, 17402, 7314, 12254, 7834, 20611, 3359, 11454, 26871, 14655, 13578, 12889, 18664, 31711, 16533, 14011, 407, 32147, 12677, 12213, 17999, 22133, 26828, 2353, 18503, 13329, 20778, 32650, 4618, 25422, 23877, 1659, 10056, 31191, 13914, 17890, 19035, 17273, 29344, 13138, 31929, 10155, 26028, 17825, 9098, 9793, 31837, 9505, 9172, 11746, 21718, 27171, +1111, 15778, 29524, 19614, 29108, 17534, 19497, 958, 10188, 10606, 2617, 20244, 9030, 16531, 5367, 28065, 1037, 1943, 8435, 198, 12098, 1695, 18023, 21196, 11488, 17092, 30701, 20660, 28838, 19651, 15063, 29949, 2662, 11819, 16796, 31770, 29354, 3525, 32728, 6774, 14131, 2577, 27019, 23161, 19109, 32386, 18458, 20146, 1561, 26894, 20344, 13660, 28589, 5599, 2088, 7310, 22692, 22, 27970, 18762, 19673, 10266, 15944, 22335, +22085, 32740, 21337, 18671, 3497, 21297, 25446, 17628, 23875, 19697, 8022, 10216, 19315, 26480, 30362, 20876, 20606, 17938, 1768, 16428, 23537, 3857, 23738, 13461, 3879, 18940, 32224, 23552, 29206, 15400, 13120, 18524, 15372, 1689, 4427, 18869, 22987, 29873, 3729, 14094, 16802, 11751, 24310, 3349, 5464, 21904, 24226, 26070, 7074, 25994, 9730, 30611, 29851, 700, 11305, 962, 19641, 10761, 24515, 16079, 26161, 4867, 1835, 8765, +6556, 6263, 27634, 29543, 3368, 31363, 10869, 20171, 10347, 2411, 23520, 15811, 24315, 14978, 9113, 31389, 8205, 18844, 29233, 5288, 19544, 7770, 6251, 6417, 18531, 30766, 22497, 11924, 2865, 24332, 20689, 9421, 30595, 15555, 6197, 1196, 14150, 17066, 21367, 24497, 19478, 12119, 7540, 11025, 27098, 16654, 9647, 2535, 2730, 6112, 7823, 22274, 13882, 14074, 28692, 32413, 12072, 18421, 11569, 14937, 9985, 32258, 24359, 7813, +15045, 30556, 9009, 29195, 14854, 30376, 20925, 1564, 9727, 28465, 12590, 4057, 12351, 22237, 6592, 15081, 28349, 14416, 4588, 9463, 28490, 512, 9108, 7795, 18933, 20677, 22732, 28918, 20167, 14323, 3963, 2444, 12111, 12972, 31639, 26966, 10580, 19796, 28530, 20308, 15494, 8352, 24365, 27845, 30589, 30958, 10159, 26170, 12606, 14747, 2865, 8328, 15259, 11973, 16123, 1424, 32650, 6088, 30342, 20049, 20411, 1538, 22493, 32523, +14510, 21365, 26721, 25091, 8393, 22483, 12631, 23887, 30836, 4228, 18965, 28657, 2418, 29124, 22060, 15024, 11103, 24925, 23353, 26362, 4131, 6708, 27786, 4013, 12796, 25360, 24063, 440, 26898, 13788, 195, 8641, 2385, 26916, 964, 10779, 16631, 13595, 1898, 14699, 17823, 20863, 10589, 20242, 17219, 32649, 2498, 28322, 24806, 25851, 21916, 28937, 32560, 16934, 183, 12588, 9527, 24246, 13028, 3657, 5266, 13223, 12298, 7652, +7371, 13262, 18431, 24003, 26857, 20329, 5934, 11913, 8425, 16523, 32155, 25644, 16404, 1885, 21199, 8443, 27737, 10347, 4612, 27529, 27282, 4795, 7349, 4041, 29041, 20378, 7698, 1540, 833, 19997, 9192, 8205, 491, 27623, 32208, 27349, 15184, 5374, 6494, 23609, 21898, 5881, 16486, 5534, 7766, 4917, 13977, 2735, 15264, 18590, 30264, 9778, 23385, 4846, 13819, 19659, 25224, 21518, 21199, 26057, 8747, 30391, 1494, 9238, +25246, 934, 3819, 7662, 6309, 10313, 31272, 28207, 16194, 14990, 973, 23961, 19907, 14951, 26696, 2403, 773, 24193, 12182, 24158, 29039, 26001, 11049, 21495, 14751, 32248, 14784, 23498, 29871, 16279, 32737, 22349, 17213, 3788, 30012, 23522, 14102, 28516, 18961, 30296, 10738, 19935, 21489, 30645, 2118, 15418, 280, 2891, 6843, 12462, 27049, 3114, 5696, 5331, 24609, 20447, 4811, 6625, 11178, 1915, 22904, 11147, 24264, 7350, +14935, 21508, 30872, 29037, 17256, 17066, 26566, 27994, 4233, 15287, 25871, 6351, 30705, 26152, 9242, 4780, 5846, 3523, 7894, 11542, 8854, 32503, 31990, 13666, 6361, 10400, 15581, 29265, 21547, 7077, 3847, 3714, 28586, 1952, 32752, 13074, 19018, 26550, 8301, 23251, 9069, 1404, 29602, 7007, 27556, 6076, 11787, 635, 9599, 19682, 12177, 18454, 19417, 11399, 32120, 25778, 21799, 14933, 22276, 10578, 22010, 26123, 14293, 17828, +28075, 14277, 30903, 14325, 8059, 6436, 4808, 17128, 7840, 1642, 24135, 2629, 7718, 3155, 3264, 17318, 22837, 15441, 3004, 9486, 26841, 2356, 2497, 15872, 17289, 24773, 26451, 6531, 18128, 7976, 24360, 13436, 22253, 22495, 27761, 30312, 28931, 32570, 14672, 4003, 1444, 6040, 6632, 9163, 9195, 9896, 26481, 32032, 25338, 29485, 8750, 19411, 31841, 11247, 2515, 16362, 3252, 28966, 22893, 21381, 4174, 14485, 2049, 26427, +4212, 29810, 23971, 375, 29612, 5876, 4379, 31057, 11916, 11011, 7452, 21111, 20908, 1165, 20375, 13478, 30650, 29125, 121, 29723, 7605, 2636, 13317, 10857, 31603, 3442, 32238, 3009, 17928, 1519, 29437, 22140, 31330, 20640, 22516, 28174, 26516, 26895, 26463, 5664, 5138, 1147, 26775, 26046, 2312, 14382, 6756, 194, 10740, 6877, 29917, 18345, 9514, 10466, 29202, 8349, 13909, 28673, 11358, 31837, 30192, 8027, 21209, 28754, +28668, 10957, 24161, 22416, 5084, 17856, 28081, 10223, 19004, 22088, 3501, 21316, 3703, 10258, 21511, 14443, 17135, 18660, 20, 26649, 29127, 29222, 2230, 10268, 25127, 13589, 9337, 22552, 21616, 30546, 18538, 17516, 8736, 9931, 7165, 13820, 27788, 2478, 24043, 14024, 24566, 27545, 2572, 28269, 5035, 24083, 9944, 22170, 9976, 9964, 16052, 6335, 6419, 18282, 16603, 31546, 31871, 25940, 21330, 20720, 23718, 7101, 5468, 32454, +17032, 12633, 13507, 12052, 15111, 4782, 26076, 6910, 32327, 28649, 2411, 4594, 19964, 12356, 26765, 29940, 22320, 10049, 3507, 28739, 28331, 20110, 27518, 27435, 13282, 16080, 15387, 4233, 23181, 20855, 3919, 7446, 721, 17426, 19498, 15832, 22209, 12807, 22742, 21768, 8688, 25154, 26363, 28652, 4742, 20360, 25825, 27062, 30409, 29332, 23034, 25972, 16675, 17784, 20639, 29957, 1096, 3258, 1422, 24278, 24114, 5342, 31724, 24835, +22768, 18454, 7899, 12209, 31261, 30642, 1210, 7181, 23028, 27573, 3066, 27770, 15165, 28891, 22064, 12806, 25455, 12330, 6010, 9362, 30114, 26650, 6552, 31211, 29908, 7974, 22721, 21254, 13316, 21677, 13321, 3317, 7363, 21221, 15526, 5857, 19095, 16736, 13038, 9355, 11541, 16104, 4357, 26706, 12227, 26421, 6744, 4915, 5984, 12755, 14277, 3330, 6637, 20829, 1773, 3777, 28804, 24494, 25032, 9352, 13403, 5585, 12669, 20767, +26806, 28196, 26624, 13133, 12164, 6894, 22488, 23706, 22999, 26845, 17644, 2458, 20499, 24389, 7373, 26483, 4376, 21651, 29813, 11013, 9712, 31587, 14790, 5748, 23313, 7054, 15101, 3949, 12640, 27770, 24716, 6678, 23198, 18572, 19812, 2595, 25466, 9532, 26301, 15697, 3610, 11177, 18156, 24109, 2798, 25529, 17824, 7174, 14412, 14869, 18187, 24125, 13688, 210, 29873, 4234, 7264, 12206, 8183, 19904, 7209, 131, 26583, 30407, +18703, 13627, 234, 11401, 23159, 26535, 27099, 26769, 4945, 12487, 18110, 7743, 5248, 3166, 14918, 19661, 18036, 337, 11018, 31724, 547, 8123, 3190, 7812, 20330, 11373, 27716, 27539, 11504, 21531, 25178, 30207, 2390, 25413, 8841, 25550, 19180, 3172, 19551, 24125, 15659, 4894, 31869, 20907, 8060, 14019, 7800, 26096, 14356, 18818, 25053, 14904, 26942, 28243, 22716, 14504, 6849, 17664, 9275, 18353, 6428, 1685, 15793, 8818, +27098, 24634, 1600, 13511, 27806, 21152, 4868, 10697, 26046, 3969, 31604, 1338, 17988, 6637, 27435, 32345, 25455, 19720, 14481, 19629, 15195, 4429, 1365, 22044, 22093, 10640, 7630, 28521, 12326, 23423, 4572, 6656, 15289, 6172, 20167, 10327, 27324, 25036, 21024, 20602, 29005, 19860, 21941, 14226, 26497, 16608, 13803, 19185, 3560, 28284, 6046, 18755, 32713, 7412, 8032, 22038, 18052, 15662, 17792, 30378, 6317, 22364, 4267, 21606, +28536, 24434, 31933, 23093, 16702, 20189, 10927, 12940, 7281, 100, 27166, 1011, 16708, 8201, 20196, 20268, 3717, 26242, 6256, 3662, 886, 14288, 25700, 18939, 29950, 10724, 16549, 3499, 320, 20816, 25105, 28857, 12483, 24270, 19182, 29185, 11691, 30109, 9357, 18972, 30210, 3755, 19983, 14150, 11956, 7411, 1651, 15673, 886, 7907, 19335, 1772, 22195, 12268, 20711, 19377, 22992, 4493, 22876, 23313, 25309, 15213, 19402, 5024, +6715, 5816, 1442, 18406, 3157, 10799, 4610, 599, 14555, 24594, 14750, 26511, 32005, 16401, 9417, 123, 24308, 28752, 1896, 13735, 8252, 22607, 344, 31245, 27100, 23220, 21790, 19642, 5665, 8424, 24666, 12380, 14240, 26108, 30786, 17397, 4140, 2628, 17997, 18695, 27222, 32747, 12438, 26460, 16380, 21855, 26583, 7920, 17840, 28479, 21655, 26092, 18319, 21999, 24569, 12651, 12451, 13591, 32293, 18116, 22015, 24192, 30496, 3487, +17532, 28514, 20885, 21672, 31142, 6114, 7599, 25597, 6093, 20038, 19289, 22473, 9125, 13104, 30393, 26965, 8816, 19280, 20290, 27135, 8511, 12091, 7018, 20962, 25683, 6544, 6310, 14930, 30736, 4038, 18418, 15500, 32552, 6535, 4405, 30926, 12649, 12004, 23755, 18742, 32042, 10276, 8447, 8400, 23381, 6072, 2597, 32197, 25352, 22887, 26564, 1095, 2211, 814, 22057, 27894, 7358, 28367, 10056, 5326, 32405, 28474, 20827, 32189, +2241, 25232, 30347, 14890, 4468, 21335, 864, 3743, 31611, 9311, 12143, 22224, 15383, 14740, 21653, 7967, 4860, 15449, 9062, 7071, 16264, 31119, 2197, 23622, 26718, 12253, 28949, 26355, 7960, 17008, 25776, 10201, 9472, 23356, 25092, 13940, 11923, 25956, 17683, 10766, 2500, 29826, 223, 17883, 11799, 21876, 25851, 16659, 4558, 2145, 23730, 20822, 497, 25927, 11676, 27215, 5412, 7857, 20803, 13372, 24865, 13811, 23574, 1569, +4399, 15898, 15510, 16322, 9086, 425, 27089, 11586, 30252, 27312, 29470, 9283, 16420, 22553, 25942, 20978, 24698, 16904, 9032, 25195, 10063, 20709, 19643, 15475, 28566, 7678, 28848, 20664, 21489, 19654, 22233, 25889, 2784, 4975, 9443, 11870, 5401, 3764, 23457, 2885, 31076, 20159, 12168, 14729, 9944, 5342, 2939, 1874, 22246, 11972, 27070, 32309, 32681, 13945, 15016, 28479, 21623, 11096, 16375, 10344, 30750, 5841, 3465, 766, +10816, 12909, 12637, 16217, 16673, 3326, 19102, 14982, 23485, 31270, 29711, 661, 3844, 32650, 2535, 26090, 11854, 29605, 25631, 11767, 10782, 7880, 7479, 32405, 18976, 23854, 9982, 16959, 29695, 13447, 17725, 7744, 26356, 30362, 23961, 10262, 920, 10296, 25244, 24405, 8798, 22187, 25066, 12643, 22069, 27602, 5965, 1156, 24439, 31597, 12923, 2454, 6709, 20402, 2091, 25685, 11489, 12073, 9876, 8416, 25521, 27602, 16160, 19109, +25196, 7354, 29371, 26117, 17650, 21847, 17754, 26448, 11266, 10053, 6323, 568, 4887, 12289, 1724, 29326, 11118, 14647, 31780, 17827, 2282, 1104, 10744, 13771, 13177, 20621, 22187, 5930, 15455, 5580, 25040, 7883, 12934, 21643, 1232, 30584, 10723, 18987, 24264, 21989, 29040, 30588, 22557, 1159, 10109, 24281, 30485, 21227, 6161, 29498, 6286, 8443, 30602, 17030, 22214, 11011, 4883, 11633, 16942, 20338, 17213, 9214, 28222, 30147, +30857, 29454, 27963, 8812, 15673, 19460, 30802, 11945, 17280, 20591, 13104, 27389, 12105, 10822, 15848, 18266, 7552, 22134, 26709, 5386, 6396, 16155, 16397, 11280, 27788, 571, 31618, 12234, 9785, 27072, 9613, 7875, 23759, 4809, 16687, 6664, 24269, 14721, 18610, 8781, 2545, 31714, 3402, 14650, 9768, 19250, 148, 17320, 8616, 26857, 22706, 15012, 10244, 6336, 26292, 5264, 6907, 25143, 17498, 16693, 19447, 27112, 24568, 10438, +31921, 8487, 17103, 23422, 23209, 2945, 32203, 25754, 1891, 2837, 7636, 11660, 22087, 7784, 28980, 30703, 1873, 18919, 12947, 12117, 25255, 6472, 17381, 32162, 31615, 2112, 16087, 18294, 29224, 7887, 28733, 28377, 16375, 13068, 19031, 6816, 16013, 18466, 32570, 17904, 21303, 7438, 29564, 10622, 15222, 25777, 8557, 17095, 11928, 21504, 29212, 4415, 27976, 13825, 3809, 26823, 15937, 19897, 12350, 12393, 27784, 8315, 8002, 11391, +21383, 27033, 18207, 4628, 12731, 18009, 22532, 1266, 25447, 19329, 11888, 7901, 12338, 20445, 24996, 24266, 9182, 21440, 28681, 4390, 2498, 32490, 31214, 18435, 19619, 10796, 30829, 14636, 19111, 6063, 26027, 7726, 329, 11467, 12354, 13060, 29476, 2118, 14327, 22156, 21447, 26215, 30057, 1017, 13893, 22286, 25283, 23075, 10958, 21196, 27465, 13456, 20919, 25911, 31892, 7770, 3939, 29953, 22406, 23050, 3248, 15666, 30776, 3577, +27133, 10362, 16638, 23841, 12481, 30965, 13229, 1160, 24412, 10519, 2178, 5537, 37, 27461, 28612, 10995, 15890, 23310, 24452, 4041, 16453, 23576, 11811, 20393, 20761, 1450, 10675, 24009, 17116, 8684, 27587, 11481, 19046, 11457, 2554, 31527, 9654, 15784, 32688, 1298, 26303, 2098, 6836, 26340, 29559, 2680, 4567, 12681, 25990, 29019, 16722, 9676, 19827, 28534, 30069, 7820, 29984, 7976, 31830, 14332, 16660, 26649, 25813, 2939, +5338, 28367, 1698, 14992, 11383, 1618, 16290, 4918, 3716, 23126, 31258, 508, 25807, 3058, 13189, 19029, 32077, 29912, 28705, 19137, 25678, 26006, 26957, 22894, 1215, 26019, 4458, 17875, 19900, 30271, 20814, 25238, 25870, 22513, 7462, 4486, 24131, 23753, 9404, 27848, 14111, 7895, 28356, 7150, 10953, 8777, 26180, 10262, 5921, 22117, 29399, 31599, 15356, 23589, 21725, 16571, 16840, 26183, 1678, 3973, 23686, 22493, 29211, 16789, +12238, 3906, 21275, 3601, 27659, 30679, 31449, 9002, 5806, 27037, 16153, 16759, 3047, 9565, 27022, 8968, 31682, 23653, 7800, 14270, 14474, 29525, 30841, 31315, 22941, 32520, 2520, 13859, 22245, 31731, 30648, 1715, 2869, 19155, 5316, 30528, 17067, 3998, 6763, 22873, 31035, 22916, 6865, 1314, 32481, 1119, 10283, 31395, 24772, 18083, 12898, 6479, 14840, 10971, 5026, 5013, 10723, 7546, 18873, 200, 6509, 16753, 1915, 9379, +3141, 7232, 7139, 20208, 11230, 13902, 10313, 9497, 4050, 17178, 10812, 3763, 18297, 21095, 2391, 10302, 6410, 15289, 16781, 21250, 26260, 21807, 26264, 4216, 29353, 12369, 4416, 3094, 29122, 6332, 12473, 32263, 13564, 19613, 19703, 24794, 747, 30017, 1523, 4798, 14427, 12335, 8561, 32725, 662, 10952, 10259, 7072, 26241, 27040, 28323, 19734, 16079, 21819, 23950, 12664, 1420, 28366, 15758, 30542, 1930, 28232, 30038, 15494, +15077, 16973, 7520, 15824, 14222, 9044, 20622, 28650, 21379, 29184, 28607, 22042, 7368, 6098, 29114, 842, 370, 24669, 20576, 16449, 13720, 11758, 29113, 15140, 7356, 12103, 12915, 9287, 7567, 10185, 24781, 22644, 27158, 32302, 5701, 8613, 8578, 26323, 4495, 29957, 22739, 334, 19231, 30108, 6432, 15578, 30950, 6802, 7479, 18758, 23251, 21200, 30516, 19596, 3572, 5104, 31699, 16487, 14391, 6499, 26672, 6405, 29143, 21063, +5939, 2076, 29676, 14517, 28400, 1403, 11706, 18371, 1737, 30938, 15711, 8169, 13748, 13893, 14971, 21227, 32651, 5454, 9659, 30399, 25050, 13232, 2736, 23981, 29719, 17127, 30480, 23624, 23532, 26856, 11919, 29471, 28932, 8827, 11220, 24564, 10230, 22927, 10168, 11967, 21097, 25879, 20136, 2077, 7005, 2339, 23304, 6888, 7793, 196, 4520, 75, 13428, 7256, 24056, 10379, 24383, 21769, 1235, 15148, 15857, 13154, 11851, 12021, +21981, 23072, 3818, 32211, 13231, 13986, 11410, 1560, 7097, 31546, 3637, 14102, 1117, 26941, 20991, 8910, 27137, 25511, 8985, 7797, 32767, 274, 18177, 24382, 22043, 19412, 6762, 5132, 32567, 18614, 17153, 21780, 8918, 20971, 21224, 22149, 2189, 32634, 23709, 9287, 31413, 27346, 23389, 32530, 21519, 11612, 8673, 15889, 4355, 17658, 23686, 4354, 17932, 9095, 28737, 7207, 28508, 2731, 12339, 28307, 21345, 29493, 17319, 30263, +17696, 5775, 19644, 19886, 5642, 10585, 29173, 4287, 5163, 19794, 4049, 26683, 31407, 12722, 9804, 2994, 30381, 722, 7349, 15545, 9818, 3318, 22753, 5558, 6049, 2324, 1097, 27395, 31817, 18416, 24890, 16746, 24192, 11767, 3864, 29834, 22352, 269, 1353, 27516, 20063, 5402, 21431, 18702, 18125, 31235, 21697, 15738, 31957, 29046, 31283, 9007, 32364, 21268, 14565, 5645, 23593, 15662, 272, 22642, 1311, 25163, 6620, 25503, +4162, 10484, 22569, 26514, 10753, 23922, 21262, 30817, 29324, 9925, 16751, 14681, 8392, 5680, 30419, 7582, 1958, 28935, 16589, 1554, 17435, 31155, 7200, 8260, 14049, 7472, 30903, 15360, 32635, 4755, 8095, 4029, 15240, 30664, 30544, 25993, 21818, 19038, 24042, 18375, 28964, 8026, 288, 4588, 13706, 30708, 12170, 15665, 26875, 28760, 17219, 11542, 27147, 24419, 19803, 8428, 31892, 17938, 23789, 31759, 22693, 31884, 3021, 5165, +29781, 797, 31159, 18831, 19835, 22433, 4438, 16031, 30459, 4727, 20620, 11398, 2667, 22, 27063, 29542, 28782, 11514, 8316, 23161, 3166, 28119, 31590, 2290, 13289, 22611, 1281, 3215, 21727, 4302, 8380, 18740, 5099, 6771, 4804, 24935, 29205, 9242, 8198, 26896, 13969, 28818, 5526, 16636, 28841, 32589, 13410, 24855, 11336, 21727, 15249, 14502, 17078, 14071, 16792, 30368, 3914, 18073, 815, 25641, 22376, 9195, 11614, 27475, +15967, 16418, 19642, 12404, 25660, 27841, 6532, 6862, 23891, 12059, 23498, 19964, 11880, 4141, 12052, 23216, 25868, 27301, 4950, 10178, 8604, 21742, 7778, 12518, 7048, 8593, 5391, 29424, 17789, 17005, 24131, 988, 655, 11006, 13392, 26316, 6079, 19924, 410, 29970, 31983, 23908, 17167, 11096, 28049, 29219, 1544, 21149, 23752, 6495, 31328, 32356, 28237, 6338, 12106, 2517, 14932, 17497, 31941, 32721, 1735, 23305, 941, 2390, +1543, 14333, 28706, 7622, 1489, 29116, 4824, 705, 20257, 21991, 11801, 15538, 18442, 13345, 3920, 9426, 19840, 2480, 9014, 15310, 8818, 21120, 17827, 23750, 5850, 17001, 23703, 7585, 7538, 24644, 9975, 9081, 6209, 5914, 16703, 7699, 2262, 21527, 8404, 22519, 10751, 20205, 5290, 29193, 782, 9210, 5852, 20623, 11690, 14866, 3165, 20508, 3219, 20992, 11491, 9069, 5225, 2426, 16654, 12763, 27071, 26629, 21844, 512, +32543, 5779, 8211, 2038, 27307, 16615, 24557, 5290, 4052, 29847, 1715, 4835, 6289, 7567, 25458, 17979, 22434, 28623, 5720, 25653, 16847, 17211, 1954, 22073, 19637, 18608, 2068, 13940, 12469, 23913, 14453, 12245, 29692, 22664, 14283, 24231, 6512, 6072, 29521, 10564, 3152, 31237, 15399, 9441, 6036, 8089, 27421, 28470, 3944, 373, 21355, 20792, 17584, 23309, 10097, 4453, 9149, 12165, 18394, 21619, 3310, 79, 1096, 235, +22743, 15379, 24466, 29255, 21451, 21220, 7052, 24603, 19689, 22451, 1277, 25725, 30541, 28698, 21428, 1717, 29071, 10015, 22509, 13887, 557, 32606, 18340, 9706, 12004, 3966, 31325, 15314, 4045, 32421, 15549, 26789, 15032, 7248, 23276, 3716, 28468, 30328, 28319, 15389, 20012, 29596, 8346, 17785, 25526, 29774, 19502, 21829, 7022, 9244, 2948, 7579, 9082, 21289, 17285, 21086, 25255, 15843, 3633, 29301, 15496, 19182, 23322, 30529, +26430, 13830, 1477, 22130, 11391, 29796, 4751, 31403, 26625, 13098, 16420, 19383, 10104, 3154, 8445, 17126, 12398, 11393, 24705, 21481, 32682, 9223, 9799, 25170, 25066, 13432, 21703, 7794, 32615, 12257, 5555, 26277, 26087, 7032, 15640, 4710, 4061, 20391, 3345, 30686, 721, 19765, 17301, 10826, 22920, 25746, 27952, 2550, 4372, 19890, 24031, 4286, 29113, 1063, 29456, 21411, 14495, 18391, 29205, 14342, 30648, 1993, 7852, 23968, +9025, 23492, 28678, 13086, 11115, 32024, 11004, 11837, 19021, 28306, 22663, 9173, 21284, 17847, 11724, 25656, 4969, 2987, 29943, 1314, 4050, 26631, 22725, 18546, 12255, 19163, 120, 10135, 21156, 7972, 1335, 30181, 31464, 30014, 10500, 9812, 29270, 21504, 21649, 15523, 17042, 11544, 24697, 5559, 29391, 3653, 31215, 1593, 6640, 28390, 2907, 10691, 22254, 25633, 29237, 1741, 12028, 29357, 11876, 416, 4562, 13212, 30597, 3258, +10458, 8329, 13070, 6960, 29834, 1951, 22483, 14108, 13495, 14412, 19667, 10119, 18065, 18115, 11712, 24706, 13737, 14619, 2629, 3223, 7484, 31866, 4964, 19512, 28455, 16841, 19928, 249, 30053, 17758, 3508, 7743, 26087, 16578, 14703, 23153, 18530, 4418, 4494, 32025, 18831, 24161, 9376, 4128, 9508, 21088, 28834, 23246, 2940, 31463, 26469, 10424, 30561, 31434, 29937, 26249, 15507, 17097, 26498, 12792, 2087, 30006, 20535, 28175, +13817, 2470, 18560, 32347, 6888, 23054, 31604, 25719, 14448, 8213, 29848, 23956, 29301, 25914, 14434, 32241, 24610, 8136, 9898, 22403, 6802, 7067, 15884, 22309, 24164, 9615, 2333, 26252, 6853, 22868, 21659, 20670, 25338, 7451, 20249, 32226, 30506, 19086, 25178, 12186, 27299, 22258, 3374, 23832, 15404, 17809, 23306, 7246, 25945, 436, 29650, 32747, 7503, 12766, 22288, 31667, 22381, 24621, 25151, 29235, 14721, 14042, 17137, 7291, +21494, 4619, 6749, 19232, 23705, 31927, 31418, 18236, 21417, 2024, 9300, 4054, 19833, 32606, 11300, 13010, 274, 8182, 12989, 7777, 20949, 2509, 6677, 10562, 27130, 31828, 7029, 9083, 13103, 24167, 16374, 1829, 28786, 23124, 21061, 19723, 22283, 19711, 5191, 10933, 21735, 14491, 14987, 8801, 14330, 26287, 21811, 14604, 1702, 2033, 22382, 22651, 4542, 29059, 445, 31673, 28119, 7475, 7988, 8454, 31642, 24363, 10283, 27660, +14719, 31344, 14615, 4234, 18287, 19806, 15167, 7255, 1529, 30154, 16056, 15859, 23674, 5099, 30464, 25376, 7132, 20078, 15259, 11675, 16369, 15704, 10580, 11720, 23179, 18568, 20175, 22053, 10163, 30458, 16945, 24882, 29035, 31560, 29117, 14554, 18598, 11516, 21809, 20128, 8903, 5097, 3219, 32577, 10197, 915, 25185, 17329, 20993, 7676, 29004, 4594, 23380, 6816, 16315, 13792, 25385, 3722, 3077, 2780, 1412, 20023, 27663, 30447, +18815, 24012, 12234, 4646, 2760, 1275, 24774, 11663, 6373, 27993, 11472, 16570, 28909, 3889, 1131, 17134, 11565, 30136, 21729, 2178, 4184, 5276, 15970, 29569, 8998, 19047, 32350, 10410, 6302, 27245, 8090, 25118, 18489, 20324, 29764, 21249, 21599, 21770, 145, 27972, 16995, 11617, 11774, 13136, 15507, 12906, 30271, 27072, 10274, 19232, 29250, 14458, 24508, 12452, 11260, 738, 31500, 10842, 11148, 5034, 5319, 19238, 30152, 23808, +6794, 27148, 12289, 28394, 16150, 12434, 23598, 378, 24052, 2605, 13514, 6791, 15511, 11017, 1095, 25785, 30249, 30346, 7475, 21989, 10030, 18735, 22727, 8762, 29577, 1108, 13797, 2128, 20346, 11181, 25936, 27141, 5562, 5458, 22767, 21712, 17892, 13597, 22090, 9176, 16202, 2837, 15967, 31713, 13854, 17063, 24730, 11336, 14641, 32206, 557, 24671, 18173, 23285, 666, 14983, 24393, 14463, 17111, 11971, 25644, 10280, 6344, 31206, +15738, 29111, 20151, 862, 9941, 9473, 10039, 26143, 12310, 26006, 25089, 26165, 10301, 17051, 4733, 24942, 16489, 5290, 16846, 1895, 28575, 17512, 16878, 20200, 31975, 1221, 32172, 24851, 11501, 5748, 23290, 27239, 2092, 10673, 28102, 12033, 20146, 5373, 5408, 32457, 31379, 30497, 25854, 8913, 14781, 30587, 1087, 31270, 3109, 17933, 397, 31685, 2677, 17275, 19117, 1884, 18497, 18521, 26736, 29998, 24270, 17258, 24470, 26362, +27931, 19804, 5627, 15309, 25177, 11035, 14998, 23788, 8765, 8084, 32701, 23546, 5903, 1021, 22048, 9013, 18954, 22446, 7930, 21632, 6953, 27047, 23516, 25450, 12801, 17484, 22681, 4303, 1974, 14383, 30665, 29905, 1419, 3524, 12447, 26596, 14559, 27445, 17616, 23324, 2762, 17550, 14102, 8665, 18571, 3383, 17678, 4757, 25829, 25608, 26389, 14, 19888, 17138, 25465, 32689, 1854, 15378, 4224, 3829, 29761, 2121, 966, 31180, +5645, 13413, 25008, 20204, 8091, 9856, 10761, 10853, 27406, 24863, 19518, 13209, 28246, 4429, 17967, 21307, 30037, 11588, 21322, 17157, 28726, 14019, 17078, 30581, 29397, 21302, 1642, 26390, 23423, 2608, 24802, 29068, 16022, 17042, 16505, 24113, 26898, 27266, 2198, 21537, 19361, 21716, 1978, 14840, 26145, 19945, 3379, 23415, 31534, 24701, 7804, 27492, 5952, 24883, 25305, 2581, 13417, 26947, 28971, 4073, 29556, 21005, 373, 12810, +5279, 16878, 4155, 32178, 11376, 6353, 20947, 30738, 28069, 22925, 12810, 21447, 10103, 16189, 12094, 8869, 8123, 19898, 3593, 14075, 12013, 28899, 16657, 25431, 23078, 12860, 29504, 19866, 1098, 29877, 32676, 6377, 13988, 4063, 5787, 25364, 10416, 26734, 23334, 5718, 16892, 3376, 27165, 26995, 19566, 6491, 3096, 27689, 26389, 6689, 8996, 5635, 2820, 25653, 31066, 25899, 5746, 27802, 12997, 6844, 24911, 12906, 13221, 6131, +16969, 19009, 31496, 27386, 12975, 22062, 336, 29867, 25439, 27501, 24094, 12237, 1224, 27190, 7158, 27613, 1112, 16154, 480, 3932, 9040, 31546, 29831, 14786, 26580, 10061, 21630, 18724, 22967, 2083, 24855, 7168, 21092, 23583, 1786, 1300, 12878, 2122, 31167, 5549, 29623, 22494, 17786, 30847, 16916, 24944, 25693, 18028, 8330, 26173, 21961, 17370, 24952, 19024, 32156, 18764, 29085, 21018, 4720, 19284, 23102, 29576, 26453, 11426, +20391, 28239, 12726, 501, 30362, 11126, 6050, 27217, 852, 23836, 25297, 17768, 16012, 18222, 3029, 24343, 11627, 24990, 8945, 3811, 11246, 8334, 22576, 7564, 29352, 27296, 26848, 19686, 24104, 20533, 31113, 11728, 16005, 11071, 12229, 13599, 22197, 18280, 8048, 23049, 9348, 577, 8050, 25361, 18799, 11079, 16936, 30427, 3301, 25881, 1470, 14547, 1447, 24046, 22111, 30800, 18575, 16192, 17718, 9911, 3957, 16063, 21639, 19962, +27135, 1101, 793, 16564, 19381, 8842, 6846, 28729, 9419, 14896, 21322, 28219, 25975, 5490, 25878, 29276, 31372, 27348, 11055, 51, 18627, 399, 30851, 4434, 16591, 15802, 14345, 20548, 31865, 3217, 7743, 26232, 4318, 8536, 10029, 23699, 17378, 16875, 19660, 26798, 31771, 8215, 22249, 24978, 13705, 15359, 21486, 12309, 9939, 32541, 12361, 28566, 172, 10444, 232, 16763, 26246, 14578, 4544, 25344, 17795, 12287, 18808, 22113, +20823, 28837, 13044, 5434, 12944, 32704, 32232, 11947, 8151, 21713, 4157, 21857, 4304, 25643, 1398, 14243, 25417, 13759, 10042, 25589, 24204, 10274, 9585, 17682, 24852, 14129, 10258, 9879, 26416, 29067, 31992, 14471, 25136, 12268, 19905, 5313, 12205, 19369, 17260, 20356, 8314, 21418, 9445, 12618, 14293, 10844, 26862, 6942, 24603, 4136, 32532, 16039, 14410, 9349, 954, 6495, 23478, 11212, 16374, 17126, 7511, 15599, 31597, 32648, +27867, 18735, 5193, 7304, 5336, 22453, 27661, 13651, 11103, 4338, 26269, 25397, 15182, 20363, 32339, 7018, 24499, 32103, 23057, 6142, 8684, 24011, 12637, 32162, 2456, 29011, 16520, 9967, 11842, 15350, 9847, 6942, 1317, 15040, 14246, 6653, 4726, 9139, 20304, 15829, 13478, 13806, 8458, 28660, 1401, 8030, 2910, 25901, 7365, 25968, 32043, 16050, 17211, 11912, 15444, 19667, 8155, 31965, 29635, 19998, 14547, 6714, 26940, 15864, +21755, 8418, 22517, 26481, 17558, 10054, 9542, 31036, 23860, 18001, 26928, 25261, 26031, 29839, 18394, 628, 23039, 17669, 16678, 7482, 29581, 32123, 27150, 4969, 31320, 24017, 24967, 13099, 30731, 19139, 28963, 19718, 27557, 18712, 13431, 12347, 28766, 22974, 10615, 19858, 8207, 4776, 12352, 1470, 1847, 30746, 2098, 24886, 15648, 18777, 32368, 12461, 18132, 26750, 17430, 16684, 17999, 9629, 29783, 15963, 28768, 25978, 2913, 23558, +11922, 16345, 3137, 7921, 6551, 13753, 27779, 14758, 18529, 7363, 16228, 20376, 5342, 18326, 12494, 20990, 4335, 12094, 683, 22467, 6077, 18114, 6383, 24076, 27743, 3398, 7271, 23744, 29376, 10185, 14534, 8531, 26530, 17671, 16452, 313, 31424, 11463, 15071, 17185, 18827, 31299, 4793, 24169, 16857, 17287, 12391, 21193, 29382, 13074, 10892, 2691, 31188, 17276, 26767, 26164, 20674, 1271, 17140, 17283, 11456, 31674, 25814, 5218, +16577, 9498, 5531, 15234, 20961, 20602, 32419, 7020, 19133, 4445, 31189, 3222, 21732, 10812, 24415, 18346, 23887, 2540, 21037, 22307, 19816, 15037, 15703, 7722, 16308, 75, 25005, 27764, 31749, 18051, 214, 15559, 27549, 5745, 30793, 15743, 26347, 30444, 22763, 12712, 2121, 21185, 15934, 23854, 31997, 7582, 9432, 23116, 10122, 30470, 12656, 29938, 12739, 28359, 4892, 29047, 28435, 29898, 24043, 27416, 15181, 24257, 10207, 9963, +30002, 8232, 25706, 23581, 5909, 15701, 3525, 8030, 4118, 19459, 31884, 3348, 27041, 8549, 26464, 4395, 6251, 6352, 1565, 18990, 1944, 6458, 15269, 30379, 3588, 6544, 25027, 18769, 30801, 2467, 28732, 28035, 10699, 21670, 18848, 16608, 4604, 22373, 24639, 8722, 9064, 23755, 12070, 3338, 32304, 5767, 7733, 5787, 12119, 9299, 24777, 14063, 15757, 7278, 11674, 19345, 13822, 3934, 5346, 11855, 6401, 1311, 7122, 17100, +22981, 25970, 941, 27585, 15575, 25580, 3540, 24640, 16567, 15610, 27978, 16104, 21377, 2943, 21891, 729, 12242, 13901, 14792, 27999, 21179, 26467, 14576, 2234, 30401, 19923, 14089, 4034, 21234, 21212, 21134, 11447, 14414, 22075, 6265, 29990, 14887, 9805, 21862, 31455, 25415, 17072, 14791, 14025, 20015, 3914, 14754, 32258, 17815, 29546, 27489, 6227, 23245, 9298, 8461, 20878, 29221, 22550, 24912, 17687, 10994, 13279, 29134, 25409, +2586, 2631, 22631, 17474, 12436, 11725, 16161, 5084, 28797, 30952, 19109, 16044, 2098, 1095, 15534, 19914, 30641, 10256, 26141, 21119, 19554, 1834, 9229, 16007, 24384, 1374, 926, 2611, 14653, 30060, 28020, 17239, 32692, 17883, 1945, 12360, 29608, 18106, 17444, 25637, 16290, 3785, 8913, 18389, 4880, 24448, 5535, 2754, 1936, 31676, 23873, 21490, 742, 334, 4729, 25126, 1708, 5655, 27737, 16361, 2947, 22989, 833, 2871, +8104, 2778, 15232, 4944, 20885, 32676, 30581, 4407, 3694, 6727, 22796, 8574, 31175, 28331, 11328, 343, 27239, 2433, 21833, 27981, 2768, 26562, 20340, 4476, 32217, 15309, 20838, 2396, 5531, 21671, 5268, 13635, 24449, 20500, 18580, 12566, 20408, 16393, 16974, 24102, 23120, 7002, 32677, 21527, 2566, 11237, 21870, 29805, 13671, 10935, 25019, 16439, 4729, 12591, 20915, 4178, 27900, 8985, 6575, 663, 30656, 11843, 14299, 22338, +32343, 111, 2136, 19983, 16504, 19110, 11318, 6857, 26113, 11227, 28384, 28679, 22464, 17487, 25716, 3367, 28422, 17967, 19806, 384, 30558, 7954, 4562, 25691, 16939, 11137, 26354, 14828, 22980, 7885, 4398, 22555, 7996, 6534, 9771, 24501, 25645, 21089, 31358, 18990, 32316, 26974, 14901, 22012, 11693, 7849, 25380, 7348, 25817, 12418, 7732, 23607, 20372, 12294, 16530, 4544, 23432, 10117, 19372, 13644, 18002, 23770, 3432, 25999, +30304, 13203, 17732, 23181, 1524, 16322, 9403, 1072, 10528, 24304, 23084, 22222, 32154, 15696, 29570, 25203, 28115, 4534, 16042, 15719, 16828, 32573, 20263, 7492, 9922, 6867, 21137, 27924, 30637, 24569, 21155, 28174, 5004, 6119, 18587, 6528, 22441, 27991, 7600, 202, 19527, 30684, 22424, 18913, 13613, 19226, 11348, 8960, 23760, 27391, 24679, 7820, 27196, 12175, 15313, 4350, 19042, 3682, 32274, 16912, 28251, 20662, 12318, 487, +26781, 30905, 7015, 16455, 26128, 14615, 16657, 12888, 12531, 6313, 31801, 26144, 25539, 10382, 2336, 16531, 5005, 27016, 24351, 32201, 6423, 6896, 3783, 25465, 10578, 3289, 9609, 6061, 23951, 21927, 6548, 17965, 20065, 13563, 1652, 13425, 28178, 18309, 26313, 7942, 24622, 25347, 1318, 17393, 2961, 3655, 1156, 7966, 30671, 25507, 7399, 4326, 32404, 11182, 29791, 10214, 14471, 6633, 16276, 5655, 28560, 22824, 23620, 15857, +3620, 25272, 29283, 31798, 10813, 22828, 6972, 2667, 15407, 8291, 20060, 18368, 11946, 21216, 26334, 9849, 13955, 965, 14175, 13591, 12147, 11198, 23806, 26619, 17831, 7314, 32274, 13624, 30138, 23126, 29481, 990, 15630, 25996, 21, 26443, 16057, 6993, 29110, 31464, 15284, 16402, 17065, 27230, 4850, 10631, 4311, 18805, 11597, 18486, 32397, 23744, 29685, 23435, 17595, 14748, 30749, 17101, 28372, 28119, 7459, 25086, 29110, 23089, +18314, 29131, 16764, 1603, 3356, 13106, 300, 18641, 29508, 17365, 13103, 1590, 27996, 17415, 20396, 6825, 3133, 20025, 30570, 50, 10692, 15397, 14799, 8673, 32499, 10403, 4024, 7190, 2721, 366, 30280, 21036, 29497, 14276, 22639, 86, 27383, 22939, 18727, 24123, 7536, 31830, 25714, 2765, 16477, 13342, 9590, 19611, 599, 7392, 19661, 11291, 22790, 1692, 19964, 22521, 12096, 23988, 29711, 14817, 24355, 27223, 3085, 21084, +8732, 25725, 21170, 3347, 15896, 7129, 27470, 23433, 6192, 20416, 26198, 22669, 990, 3020, 9512, 1589, 10413, 29174, 12880, 435, 30866, 76, 22956, 10194, 24065, 19899, 25012, 15652, 14355, 28097, 3968, 23087, 21054, 25139, 26434, 4183, 32268, 21136, 27616, 5692, 8785, 21046, 28362, 9775, 24066, 5106, 11365, 1711, 1512, 24245, 2146, 32379, 24322, 25102, 9805, 15619, 12234, 2049, 31271, 26589, 30147, 2471, 16908, 18433, +27610, 10574, 22616, 27111, 31710, 17464, 35, 7727, 5742, 28397, 17503, 29809, 736, 28868, 31520, 2248, 20345, 899, 1859, 11899, 26001, 11665, 27518, 5467, 13714, 26021, 32056, 11093, 28493, 16196, 29527, 23335, 26770, 19375, 17678, 25713, 4072, 17714, 672, 9814, 13343, 18175, 6855, 14079, 14275, 5608, 16328, 1853, 6507, 18187, 13752, 32508, 29852, 8503, 5208, 10799, 1756, 4496, 21892, 30249, 20693, 18651, 20817, 14695, +5259, 5727, 7640, 9331, 23441, 8313, 19145, 4017, 26488, 26001, 18096, 7996, 31609, 1656, 9849, 5348, 19844, 23601, 5088, 16928, 32104, 10296, 27727, 1093, 14793, 16852, 31342, 2718, 2735, 19391, 17413, 7994, 25119, 25054, 17325, 15792, 599, 3703, 19809, 27087, 29704, 5138, 2315, 28545, 6794, 12164, 1125, 26638, 2998, 6213, 10799, 2334, 16510, 5758, 3427, 31303, 22610, 2002, 1253, 25346, 21393, 18666, 572, 13744, +10952, 17898, 29537, 11551, 21601, 16578, 5871, 18537, 21716, 8186, 14314, 28511, 20351, 15439, 22381, 23349, 21652, 412, 25683, 5394, 6171, 29111, 3929, 28781, 31113, 5182, 21359, 19738, 23849, 21932, 715, 2033, 7062, 30252, 13585, 28663, 14062, 19456, 14432, 3011, 27642, 28746, 31522, 15225, 11417, 21135, 5806, 301, 21548, 31490, 5696, 27719, 27833, 9625, 23732, 26178, 14808, 12324, 13148, 5889, 1488, 13863, 7922, 8550, +11347, 21507, 4445, 25410, 8195, 18877, 28421, 3070, 14855, 27175, 18295, 26272, 15542, 24102, 26573, 4322, 22824, 32269, 32041, 17889, 9127, 23006, 11299, 23935, 2562, 24447, 29824, 4050, 5543, 4978, 12600, 16890, 26486, 17045, 9532, 1913, 3154, 5185, 4983, 18009, 32360, 23279, 11513, 15135, 14613, 5318, 19457, 4669, 4820, 18731, 22558, 13947, 8969, 1089, 5114, 11531, 25536, 2170, 15581, 31079, 7148, 28181, 15202, 866, +12458, 24734, 2780, 15612, 29920, 7763, 853, 29512, 31042, 12366, 11879, 12887, 17684, 31337, 17556, 22504, 17300, 7346, 3683, 26269, 8435, 8797, 5032, 1204, 10967, 20613, 32283, 18116, 16026, 14717, 18982, 28484, 6684, 21762, 11328, 3836, 29526, 12181, 580, 27800, 24547, 12460, 7920, 9463, 11029, 25476, 31968, 28329, 55, 2883, 21830, 8490, 11681, 26862, 9694, 22648, 14707, 9210, 7996, 30733, 23927, 26979, 26449, 30611, +15973, 5009, 1679, 12731, 17190, 2260, 7764, 8969, 14720, 15684, 18432, 25749, 8392, 17632, 21310, 8447, 20516, 10372, 16938, 32197, 4466, 26632, 22077, 19173, 3074, 30074, 17138, 27002, 24285, 10819, 24845, 7490, 15828, 26525, 20222, 250, 28785, 27986, 9219, 10737, 10902, 27651, 3718, 19294, 12516, 25028, 27742, 264, 2632, 11912, 32461, 7098, 5776, 21770, 26271, 8851, 19076, 10641, 3085, 10593, 21460, 27930, 18084, 4520, +21687, 5538, 4770, 17704, 756, 13989, 28441, 11658, 8872, 32159, 30952, 21388, 24419, 25926, 21652, 27051, 5070, 21345, 1381, 10847, 10348, 27652, 19698, 29424, 5525, 22783, 7250, 26985, 17945, 25334, 31505, 6865, 30872, 3507, 24569, 31628, 17496, 20243, 10518, 26369, 19634, 8702, 14989, 11286, 1861, 3874, 5569, 6931, 25219, 6951, 17778, 2799, 1835, 4708, 32224, 7361, 27491, 6706, 1578, 12669, 32040, 316, 19534, 30144, +3823, 11335, 29004, 21320, 31578, 6754, 14921, 18445, 15456, 29910, 29731, 17317, 1016, 2532, 24249, 26236, 9483, 9259, 29035, 11319, 13968, 28491, 18680, 8691, 2429, 20258, 21360, 1701, 20574, 8126, 31845, 24398, 19462, 28081, 12950, 18272, 2067, 27871, 3949, 17524, 25013, 912, 2073, 26030, 3445, 26322, 19498, 12928, 2814, 15765, 24247, 16782, 11489, 10159, 25473, 13918, 30418, 14066, 15620, 18224, 22192, 14697, 9854, 8886, +10011, 22804, 27159, 12078, 17907, 31108, 29602, 10153, 32021, 31676, 3415, 2698, 25230, 22913, 15626, 28044, 5910, 7106, 12058, 17399, 17265, 4764, 31318, 14915, 18830, 14170, 372, 8254, 28867, 10226, 17141, 6110, 263, 11532, 18189, 18170, 9872, 15023, 28323, 9125, 13931, 31738, 11823, 6394, 21883, 27450, 1670, 27794, 1788, 13729, 12425, 19053, 18493, 10975, 1201, 4555, 25145, 1573, 12809, 21245, 11799, 29950, 27355, 12062, +8714, 12776, 30233, 18587, 27800, 25788, 27712, 8963, 24759, 6768, 15357, 13874, 1450, 17028, 8900, 3238, 30757, 21326, 22291, 16482, 32301, 23492, 21037, 24679, 25065, 1078, 13156, 4097, 31029, 7743, 16159, 6975, 20520, 13624, 25562, 15552, 6645, 20507, 24515, 31404, 27275, 7105, 12510, 28725, 24133, 21411, 31963, 22122, 9969, 21486, 5836, 9502, 12211, 26873, 1413, 4508, 27951, 14569, 8605, 26212, 22313, 24765, 420, 10065, +5621, 25982, 25617, 12266, 13721, 17364, 10902, 8228, 24469, 23413, 4185, 15834, 12056, 3380, 5188, 22025, 24867, 11024, 31527, 4310, 5129, 173, 8818, 313, 14742, 17424, 26525, 4287, 9421, 26945, 14352, 15042, 20160, 7201, 27309, 1113, 24566, 5443, 9342, 16267, 28856, 13527, 32102, 8144, 16908, 4522, 30169, 9007, 15547, 28929, 13317, 20676, 29102, 22135, 20989, 11076, 6791, 14747, 15364, 16212, 8924, 29716, 31255, 29084, +4150, 25796, 30198, 28716, 31239, 6772, 12215, 27328, 20299, 11549, 2704, 4439, 16072, 106, 13446, 31619, 29035, 26763, 19527, 25369, 16131, 7749, 3677, 22922, 22496, 19041, 6367, 31420, 15990, 4854, 27737, 20140, 30650, 25167, 16088, 29121, 31939, 28303, 23681, 19470, 7085, 26386, 23910, 23157, 26492, 4588, 22008, 22759, 31352, 8767, 15360, 14715, 16516, 19037, 4869, 6244, 5311, 11236, 4897, 21301, 16090, 32634, 8673, 13972, +25033, 24761, 10326, 24204, 20296, 1239, 10906, 27381, 27625, 2048, 17770, 21349, 6637, 7010, 11340, 5221, 15778, 26700, 19936, 32294, 12970, 24805, 5771, 18281, 3274, 10668, 6814, 19364, 10534, 15487, 569, 2799, 7480, 10895, 27003, 27776, 12134, 5141, 22390, 6992, 7190, 7392, 28341, 13827, 14403, 6914, 19048, 30181, 846, 6216, 29707, 13816, 31021, 2710, 32097, 1527, 13378, 6143, 20892, 23912, 21630, 21461, 26711, 29110, +32356, 20946, 24119, 11722, 26088, 13741, 18714, 510, 21133, 14288, 14337, 2768, 21202, 617, 181, 22048, 6833, 29889, 3097, 5086, 32599, 2426, 6614, 13210, 8570, 27506, 4354, 30200, 16199, 31066, 26543, 15787, 19244, 17894, 27509, 12564, 31635, 13456, 13074, 20000, 27744, 27411, 22769, 16178, 28028, 22950, 5458, 2093, 20071, 8555, 7180, 19903, 10982, 13794, 345, 19552, 8532, 4699, 16984, 24731, 2997, 10759, 7750, 22242, +28653, 2491, 2038, 27520, 15947, 15113, 14753, 10923, 9756, 4754, 27101, 5017, 27704, 32560, 7110, 15008, 8347, 14290, 2143, 19329, 28084, 2488, 6113, 3848, 7187, 23098, 28579, 10185, 1089, 3561, 32427, 29743, 6053, 1697, 24495, 22000, 16810, 6480, 156, 26567, 11234, 27257, 31584, 6171, 27049, 5926, 21179, 2629, 20217, 23322, 21958, 15533, 25810, 28072, 19382, 229, 18402, 15193, 10414, 19491, 18755, 10073, 16466, 24808, +11771, 8194, 14040, 28581, 14674, 14196, 22380, 25909, 8686, 21196, 32080, 2967, 27123, 20491, 5596, 14572, 11045, 27555, 30105, 4087, 22859, 16719, 4316, 8493, 31913, 14731, 27984, 17900, 24804, 11683, 9940, 3807, 19877, 23980, 32389, 1783, 5409, 22001, 27692, 14095, 10430, 27004, 17062, 4785, 14727, 22659, 19357, 25772, 17446, 16694, 29859, 7537, 646, 1408, 16030, 32559, 16139, 11246, 17691, 8175, 22929, 27631, 11983, 10038, +18843, 11604, 11822, 24252, 837, 6746, 5579, 11267, 983, 22642, 16052, 15710, 12533, 2641, 8715, 29979, 19336, 5806, 4748, 19982, 7214, 20778, 19773, 23353, 32024, 4696, 31529, 22186, 32327, 10744, 32224, 18402, 22348, 11278, 9887, 23185, 18025, 15466, 1685, 19008, 5340, 17737, 1950, 17873, 20379, 10665, 15084, 6947, 16472, 19832, 26929, 23686, 7842, 13934, 14272, 7099, 18630, 13033, 29285, 18189, 23777, 28741, 3823, 13357, +7252, 13710, 3774, 25277, 29177, 5459, 11517, 1749, 23197, 13467, 19623, 10808, 24133, 1939, 17755, 7837, 21772, 11916, 31523, 29614, 25850, 13027, 3945, 11712, 26060, 462, 29901, 17069, 29204, 956, 30426, 3688, 14667, 1433, 28965, 11076, 6892, 7714, 12825, 30089, 21181, 32448, 8129, 12546, 1620, 25884, 20383, 23392, 5032, 19139, 20238, 30882, 32166, 24184, 9826, 25459, 24646, 6959, 9760, 21082, 7916, 7419, 24770, 22583, +8852, 20967, 891, 15744, 28681, 13716, 13066, 17095, 13397, 21195, 29641, 15017, 14312, 17257, 5641, 19344, 3628, 25879, 17459, 3026, 17295, 27285, 28485, 9174, 1477, 5478, 30256, 9393, 12897, 22259, 31976, 21749, 10458, 99, 4725, 6372, 13815, 17791, 23467, 27212, 6219, 20340, 9461, 20531, 4829, 15102, 7107, 8457, 8214, 24566, 11484, 25509, 19084, 7201, 1915, 20561, 12679, 32172, 29954, 25576, 21663, 29162, 14557, 32121, +29261, 19283, 5725, 10308, 4306, 29192, 4753, 10525, 16765, 14214, 31056, 21594, 29317, 5396, 30052, 4763, 29962, 8768, 30272, 16278, 15969, 32188, 4071, 28649, 31592, 1257, 21457, 20487, 30419, 3247, 19840, 26912, 22530, 25566, 4453, 26836, 21990, 9206, 4594, 5987, 23420, 2882, 27582, 19969, 8278, 24866, 24732, 5473, 866, 22237, 21751, 16835, 21657, 25823, 12716, 20481, 27080, 1406, 8200, 24732, 4653, 28040, 18876, 27183, +20838, 23329, 21251, 10061, 32535, 25845, 16048, 23188, 28728, 10862, 10389, 4238, 2960, 2354, 9711, 3826, 24591, 31463, 20662, 13480, 24518, 610, 1193, 18830, 2016, 9393, 10794, 6669, 4665, 29671, 1084, 25504, 20232, 22336, 2797, 20000, 15413, 18845, 10420, 11373, 29708, 20809, 15612, 32668, 23163, 25323, 3727, 14986, 24018, 24389, 28466, 15768, 24999, 29659, 1831, 27016, 6284, 12625, 917, 10950, 9528, 2002, 3686, 29761, +24338, 6483, 16993, 6983, 25328, 27413, 18357, 22268, 15454, 1201, 22169, 5850, 26524, 25896, 20836, 17775, 17517, 16535, 775, 9748, 13426, 2606, 3996, 19711, 15232, 4914, 30661, 24760, 6916, 1579, 21753, 31254, 8062, 5978, 5469, 622, 623, 23826, 22891, 16078, 25027, 12292, 21928, 18784, 5420, 9996, 3791, 22937, 26531, 4566, 32685, 7190, 7173, 3914, 26901, 22405, 8828, 24794, 14397, 15744, 26373, 3383, 14230, 1667, +9361, 19699, 2289, 9985, 10758, 25180, 26063, 3017, 4704, 15223, 21801, 10124, 25219, 25592, 293, 18983, 30159, 211, 26173, 4564, 4125, 20306, 26969, 12953, 12332, 8598, 28697, 5937, 11981, 10159, 7604, 21343, 29858, 9893, 31328, 7848, 2306, 24623, 10866, 7010, 7078, 32667, 17135, 32297, 25492, 17428, 18512, 22883, 17639, 11917, 27447, 21764, 32223, 21648, 1949, 11787, 30246, 30646, 17724, 9460, 8037, 25328, 30803, 5128, +2454, 29363, 12976, 4760, 21218, 23842, 11770, 28296, 23742, 28905, 27825, 16466, 13566, 13570, 6581, 31205, 25487, 1260, 20202, 24943, 22908, 22151, 3962, 20386, 20030, 21687, 29846, 28067, 14247, 27881, 427, 16701, 24476, 13404, 21461, 12926, 4478, 464, 8454, 28220, 29369, 3512, 11918, 10167, 17082, 18499, 8605, 9801, 19759, 28807, 1976, 9899, 18190, 5939, 30286, 5452, 27626, 27364, 752, 9105, 22478, 1179, 25807, 14186, +14583, 14500, 27113, 19062, 14964, 2799, 14514, 11566, 6311, 26433, 21733, 23393, 12164, 30338, 427, 31924, 26377, 2403, 9055, 11800, 8342, 6573, 17252, 3200, 1170, 18004, 12306, 23648, 19184, 5345, 5066, 999, 19845, 32179, 20061, 2042, 2211, 1808, 13608, 8522, 28241, 2573, 31916, 7637, 144, 32343, 6793, 26521, 1978, 15849, 5553, 10321, 22422, 22806, 13521, 23592, 8042, 25827, 14472, 27226, 31172, 19539, 28226, 18250, +18950, 15519, 20292, 21161, 17327, 1132, 29684, 12800, 3705, 28832, 20438, 3849, 28407, 27231, 30371, 30385, 10312, 3156, 7938, 32735, 25962, 21460, 23559, 1237, 14519, 5264, 28463, 12924, 24803, 23921, 31174, 10985, 6673, 18698, 32147, 24000, 19830, 29063, 4033, 23535, 25127, 24471, 27385, 20766, 18934, 24988, 18383, 29247, 28144, 26322, 29214, 21339, 15014, 20005, 22576, 29533, 25269, 18271, 9689, 17304, 9425, 8095, 28290, 16098, +26793, 27669, 7330, 13855, 23964, 11363, 4623, 16323, 3066, 32008, 4321, 22001, 24228, 22704, 18480, 19604, 16258, 14926, 8175, 31272, 2163, 30751, 28038, 27433, 16255, 4959, 11969, 25680, 13055, 7491, 9010, 7080, 2392, 16340, 20936, 26356, 27704, 25559, 9911, 30770, 24799, 14232, 20003, 16259, 4169, 5715, 3095, 20427, 20641, 11271, 18932, 22805, 9254, 14202, 17470, 25509, 19161, 29439, 18421, 32216, 4163, 27431, 6529, 6555, +11004, 27465, 144, 5940, 20256, 10055, 3942, 12287, 24288, 23946, 28546, 28457, 29661, 31641, 16116, 17535, 10144, 2280, 7572, 19399, 16482, 25042, 12140, 2876, 21713, 30562, 2324, 25876, 25225, 8853, 32432, 3461, 3550, 32576, 9401, 23806, 9863, 13344, 3325, 1383, 4522, 31871, 29840, 1415, 30745, 13189, 18950, 8121, 15469, 26522, 27520, 31952, 18796, 6893, 2060, 7742, 4687, 4384, 850, 29912, 13238, 514, 606, 16788, +322, 10007, 7827, 10186, 23351, 11152, 11569, 27873, 10256, 8642, 29289, 8233, 21831, 15471, 16354, 4532, 9226, 11107, 3716, 28022, 18000, 5776, 2996, 22687, 10161, 3847, 19831, 23399, 4361, 20437, 7419, 4684, 30445, 15246, 14870, 21028, 26399, 26439, 16134, 3887, 2313, 12655, 12120, 24144, 28126, 28474, 28677, 4584, 6813, 32393, 32607, 24813, 5402, 2835, 14732, 15563, 6682, 1796, 6194, 11044, 22233, 13613, 15728, 19910, +28860, 30598, 8171, 22491, 24269, 24305, 26378, 26583, 4192, 5730, 17959, 32318, 1436, 13868, 4135, 8250, 13494, 3974, 295, 18896, 6809, 15028, 1691, 13492, 16824, 7885, 24536, 6289, 21498, 7496, 26200, 17590, 5326, 1603, 7313, 29595, 25908, 923, 23410, 30100, 6653, 8602, 29650, 8090, 22470, 1017, 16340, 3196, 4991, 16635, 22092, 11801, 31663, 23783, 25293, 15719, 31668, 17061, 22009, 20399, 24557, 15441, 5221, 29883, +17044, 12535, 26710, 10184, 13458, 17353, 7516, 20112, 25955, 4398, 28202, 15657, 5416, 11774, 18854, 10407, 28409, 8178, 22208, 27305, 31962, 14733, 10256, 30862, 31794, 32265, 18493, 23583, 14938, 23715, 20698, 31982, 3482, 14641, 9398, 16940, 31994, 16914, 4284, 25181, 21313, 32486, 8070, 26729, 11492, 26924, 4368, 7134, 2335, 26577, 1671, 1529, 8542, 11927, 32391, 7569, 11425, 18117, 31152, 26363, 9064, 19083, 25578, 12546, +956, 2208, 29486, 182, 19123, 1003, 25363, 7668, 721, 665, 1629, 12214, 27590, 5997, 19348, 29925, 32574, 21019, 31454, 8349, 178, 31077, 15918, 11603, 16426, 14302, 5199, 25490, 617, 30777, 5268, 1573, 217, 1987, 1755, 19340, 2990, 27118, 27008, 3711, 27784, 28637, 15925, 22606, 1867, 2505, 19763, 1673, 23524, 18449, 10022, 23703, 16758, 25940, 2538, 417, 7475, 7737, 25907, 8092, 5746, 31176, 9666, 5964, +395, 11421, 25304, 3385, 5772, 19545, 7096, 788, 15414, 23022, 23394, 17281, 25527, 10389, 18955, 16284, 28838, 28977, 7219, 12828, 22150, 9757, 13245, 29625, 17495, 6385, 4949, 23241, 4793, 14615, 29205, 5188, 26037, 21742, 8573, 31809, 8519, 15669, 32597, 23933, 5923, 23223, 8447, 31451, 844, 27402, 14967, 29682, 23611, 22186, 9742, 12993, 31943, 22988, 9850, 16670, 29373, 14800, 7144, 1398, 29415, 3581, 6586, 22684, +25323, 15159, 21725, 1074, 30828, 21554, 25008, 3984, 12009, 687, 2667, 12853, 28089, 17634, 9767, 18932, 7052, 19510, 31926, 6227, 9730, 9008, 22898, 6335, 23808, 30042, 7733, 20456, 855, 14319, 10372, 26179, 29478, 32098, 27253, 27538, 20884, 19493, 31522, 126, 20180, 1421, 12979, 15501, 19055, 22747, 1666, 26107, 9489, 824, 32335, 19219, 9832, 22465, 25554, 873, 19739, 519, 21329, 20594, 14838, 31701, 14005, 11548, +31031, 8491, 6318, 19148, 27984, 5073, 19274, 15397, 6494, 32253, 30898, 25550, 22232, 32564, 18889, 31721, 620, 18456, 18172, 10453, 8153, 10958, 11326, 27892, 11477, 32655, 15719, 26315, 31588, 29724, 5095, 29852, 5447, 11414, 16232, 664, 16487, 2738, 16061, 22981, 2223, 14191, 15763, 24456, 13988, 1885, 23409, 14608, 20341, 8814, 25061, 28495, 19772, 3619, 23619, 31250, 3506, 6570, 24797, 2327, 3527, 29893, 32179, 8974, +8539, 15643, 9638, 25026, 18381, 25699, 15239, 20604, 7123, 31003, 12292, 21111, 120, 2934, 2951, 20461, 11748, 28013, 16188, 31520, 31632, 7040, 30002, 2371, 13610, 22032, 4698, 17137, 19157, 4109, 26112, 27696, 19752, 2982, 19954, 5365, 28682, 2425, 25969, 3037, 660, 5494, 24148, 780, 8428, 27099, 21242, 20176, 22344, 4662, 18928, 21209, 11702, 16163, 23580, 25313, 5427, 28278, 9682, 24584, 32387, 3026, 19512, 19371, +6009, 6698, 24736, 1923, 9123, 17937, 4960, 9784, 23431, 29108, 10564, 31859, 23439, 31806, 19267, 13016, 3701, 5428, 1457, 15403, 21591, 25037, 7948, 27018, 20547, 17631, 18834, 20166, 20657, 5578, 6769, 26666, 12276, 31505, 28589, 21399, 16674, 781, 31183, 7338, 29889, 8980, 6429, 20561, 8018, 25697, 809, 11719, 31125, 2266, 27123, 19948, 27303, 2303, 14198, 15082, 19934, 264, 2480, 7824, 5842, 9249, 1722, 18118, +7986, 30312, 6749, 24660, 31093, 5165, 31998, 28215, 14145, 5660, 16008, 22163, 31357, 16817, 1115, 29714, 19083, 28238, 16894, 13618, 30541, 31092, 28700, 17708, 31356, 31180, 25532, 4430, 7661, 27254, 22548, 15647, 24798, 29297, 7539, 23124, 1694, 6770, 18571, 15839, 12430, 1811, 5235, 11019, 18628, 6350, 7965, 4943, 1820, 24859, 18561, 32361, 23183, 14493, 17301, 21771, 12905, 10065, 26201, 20566, 4552, 15981, 3445, 29350, +12510, 10984, 19706, 14205, 17754, 5509, 30044, 30184, 7320, 2511, 8435, 25948, 8861, 16400, 30891, 10681, 8491, 16684, 10275, 31674, 31177, 27576, 20677, 11314, 4874, 14110, 31880, 9426, 30091, 2557, 6008, 9834, 13542, 25715, 24039, 31296, 31224, 21315, 28713, 5777, 23827, 4380, 31725, 32688, 20781, 29849, 10602, 29272, 13765, 20877, 28179, 12175, 15685, 16088, 23489, 20559, 30199, 22602, 29985, 27522, 25159, 3226, 4588, 5933, +28941, 28627, 4462, 27397, 17175, 407, 406, 8234, 4787, 32132, 8154, 25568, 29213, 18756, 22073, 10210, 6865, 17484, 22385, 22551, 804, 13107, 10342, 31003, 2941, 7560, 25758, 28100, 10786, 30346, 1266, 6959, 26206, 5728, 1588, 10613, 6135, 1995, 18847, 10922, 1359, 27001, 3723, 30572, 12990, 25796, 8014, 19855, 10512, 30400, 9638, 11316, 10739, 19981, 9552, 13680, 27541, 2542, 9012, 5559, 120, 10278, 12518, 26326, +16006, 14106, 4171, 22141, 16101, 23018, 296, 17460, 17252, 4019, 15264, 30242, 29815, 23279, 17329, 7559, 20911, 26968, 18875, 31650, 14181, 28427, 12562, 8954, 30969, 21574, 14513, 31090, 31853, 27031, 24648, 15091, 8369, 28820, 4465, 24471, 19070, 4761, 9163, 3554, 8780, 24428, 1028, 5827, 14939, 18358, 13386, 3082, 12558, 32261, 1964, 26739, 27921, 14526, 2925, 26122, 3332, 17438, 24444, 2417, 11701, 16325, 17509, 20070, +12377, 21974, 11773, 31447, 26735, 20937, 2234, 2747, 12597, 3262, 8574, 27536, 21620, 21960, 30618, 1410, 21453, 32582, 28149, 16606, 14340, 31074, 9961, 17672, 15744, 1637, 20090, 27445, 17962, 4831, 14748, 30339, 26805, 26521, 29019, 20772, 14690, 31253, 23519, 27287, 1747, 32093, 22055, 23368, 21285, 19905, 24778, 9970, 19719, 20160, 26577, 1291, 18466, 3770, 18964, 1443, 5407, 6286, 28888, 23370, 11117, 10868, 20941, 5154, +4622, 17192, 25926, 19312, 15677, 16677, 13832, 17425, 16002, 3119, 8025, 4519, 23025, 35, 14489, 9976, 20195, 8298, 11268, 5894, 12068, 30232, 7337, 17476, 3750, 3457, 8078, 14867, 14326, 29019, 20021, 18948, 13444, 13179, 5492, 29121, 29856, 19324, 13778, 13090, 22444, 21803, 17609, 12701, 21839, 32098, 22677, 9266, 7629, 1177, 15160, 19697, 31409, 22497, 4405, 2391, 25955, 12483, 17258, 7513, 8735, 4511, 26461, 22179, +17690, 31953, 18532, 14778, 18510, 32311, 27868, 8186, 21346, 12709, 20887, 10417, 12040, 10796, 19684, 19669, 11974, 2076, 6598, 10615, 24574, 11004, 13007, 17761, 23487, 30265, 25274, 32222, 2009, 18967, 21633, 19699, 18152, 7398, 1710, 3894, 6941, 29578, 12080, 28287, 9520, 199, 5937, 21560, 10996, 25621, 8461, 22970, 27697, 15059, 817, 19503, 26063, 13824, 4496, 16783, 11322, 29770, 16237, 13331, 15969, 5103, 262, 1354, +12501, 1972, 5248, 19442, 31551, 17329, 14961, 8303, 17528, 20898, 29863, 28524, 13751, 5556, 18726, 8681, 20615, 19544, 28184, 13911, 600, 32681, 30694, 11922, 29683, 14163, 25253, 12885, 19266, 25516, 14239, 31767, 27488, 19487, 18441, 26271, 4048, 635, 1806, 21577, 21533, 31669, 17333, 2517, 4457, 3292, 11198, 25073, 22836, 6614, 6216, 23436, 6527, 4142, 2591, 3443, 18305, 27844, 16328, 4804, 20592, 30567, 3803, 15313, +17286, 22245, 8816, 21335, 22880, 10623, 10144, 11645, 9524, 27477, 14162, 13982, 30769, 25360, 6287, 20837, 31975, 12503, 11506, 5734, 16645, 14097, 9177, 2182, 9173, 25505, 6986, 29766, 23304, 10790, 12311, 7823, 267, 21127, 29158, 23147, 31750, 6534, 2024, 8507, 1243, 16187, 22489, 32013, 8779, 28776, 20082, 7986, 8511, 31588, 13721, 25156, 12917, 22898, 27338, 22091, 15636, 1557, 19089, 6172, 12347, 31400, 13995, 12614, +19759, 10385, 2993, 18742, 16919, 5017, 27249, 18163, 21204, 16970, 17408, 29984, 12978, 4722, 5202, 21489, 3543, 18923, 13877, 16460, 9054, 8447, 5783, 24690, 10004, 24872, 30862, 22351, 23504, 12090, 2197, 10496, 22475, 5190, 29238, 6627, 10208, 23719, 24790, 31412, 7921, 9430, 28628, 20899, 14152, 1063, 9620, 17695, 19986, 23497, 1388, 29040, 31944, 7171, 20962, 9181, 32044, 19057, 31532, 22780, 31147, 962, 508, 20854, +6152, 29746, 27481, 16360, 20697, 19503, 15005, 28618, 28933, 10865, 16749, 10318, 11928, 26369, 28013, 31915, 17098, 29401, 28187, 16275, 3805, 16382, 25456, 3081, 2671, 24220, 25861, 1050, 25182, 26370, 21904, 31335, 23348, 16618, 14927, 11278, 3353, 29932, 7128, 32287, 8030, 23878, 9837, 19958, 17479, 5082, 19105, 1810, 1716, 14525, 18085, 5521, 30907, 10773, 8602, 810, 2225, 1695, 1860, 27408, 28065, 23764, 25975, 18646, +7614, 8134, 29924, 10968, 5299, 4284, 10487, 13329, 28162, 20324, 519, 12874, 25406, 19625, 14684, 27122, 1382, 1, 32643, 32289, 10774, 8477, 331, 12999, 10173, 2191, 7639, 5470, 25955, 846, 24116, 802, 8981, 21272, 11770, 14280, 25557, 22257, 27609, 20951, 9813, 28128, 1057, 2451, 14985, 15741, 29574, 16367, 15742, 29449, 15888, 26516, 5159, 16219, 6748, 15332, 18410, 14387, 20802, 11598, 15234, 12151, 12400, 24215, +655, 24170, 5727, 26212, 13659, 568, 14396, 23472, 28696, 15453, 25923, 10914, 31195, 22729, 27281, 14169, 19411, 10402, 7918, 24570, 26621, 14666, 7134, 12264, 29053, 27936, 23862, 11519, 7319, 3494, 2966, 7975, 27664, 8693, 1419, 8555, 9261, 15815, 32027, 5190, 31269, 25182, 16104, 29696, 15144, 10617, 11097, 1787, 21019, 19015, 26357, 14873, 913, 723, 27137, 29967, 28659, 18231, 8718, 3211, 21725, 11685, 11186, 16621, +20378, 12605, 25176, 29640, 28421, 24435, 2062, 26922, 16849, 18166, 23850, 31993, 28783, 2179, 1012, 17035, 21195, 27369, 31908, 22108, 28092, 26277, 19307, 23984, 11740, 28026, 27195, 697, 6943, 5613, 17318, 27321, 18218, 9726, 24193, 13871, 1393, 26255, 8025, 18242, 11653, 31875, 17468, 7669, 1287, 18480, 24704, 22482, 13082, 23844, 11822, 8406, 17353, 31130, 32390, 29093, 26388, 26817, 29790, 563, 32430, 14340, 27884, 17881, +24066, 19310, 31752, 25459, 12797, 7010, 10933, 24451, 6117, 28401, 32120, 7404, 14114, 24056, 29886, 27196, 15132, 8941, 2834, 32485, 7303, 2457, 28810, 923, 29274, 25832, 1486, 28937, 7404, 29370, 14050, 31470, 15912, 13034, 24161, 28710, 20044, 2326, 20393, 26162, 30728, 19745, 798, 12074, 11033, 30685, 6502, 26165, 6858, 9336, 25882, 14161, 11793, 21924, 15084, 8300, 14988, 16570, 4469, 22392, 13172, 18519, 21094, 29085, +31553, 12487, 25027, 18830, 14813, 12652, 12224, 12773, 32397, 13022, 24847, 10662, 10939, 31349, 4059, 17797, 7918, 29941, 31958, 19711, 19097, 14274, 28011, 1317, 30844, 32480, 23709, 11249, 18231, 12035, 7566, 17017, 24522, 32593, 3079, 6567, 12477, 15303, 19341, 12106, 28325, 11420, 22768, 6497, 10002, 26827, 24294, 17920, 24000, 23485, 4863, 10329, 4991, 107, 11646, 3068, 32587, 2587, 14317, 18051, 14622, 21883, 2300, 6376, +21708, 5379, 12943, 1417, 20682, 32284, 13523, 16239, 10937, 3523, 22736, 20939, 30350, 14263, 6091, 21582, 4980, 10954, 31911, 9971, 11061, 10789, 13039, 10881, 13376, 27356, 28932, 27998, 16471, 31232, 1606, 5411, 3843, 14549, 6828, 24525, 14066, 20351, 7996, 25003, 23874, 30733, 13174, 21456, 12228, 19265, 10270, 17208, 30219, 9413, 27179, 8513, 20202, 7451, 19394, 810, 2039, 15558, 28808, 18511, 14022, 30414, 23922, 17865, +12196, 30751, 9622, 26262, 18334, 17618, 18497, 9441, 15583, 31671, 30897, 27811, 18168, 8400, 12251, 15619, 17813, 6663, 24132, 5248, 14114, 10758, 6058, 16153, 26316, 2099, 1896, 7570, 32513, 25819, 25435, 11941, 23802, 2289, 5435, 9368, 19908, 23932, 18809, 2723, 22835, 16939, 30535, 8235, 25339, 10018, 23855, 10384, 16681, 15219, 15632, 30795, 25978, 21691, 14181, 19526, 23790, 16077, 27097, 23535, 9128, 19764, 2709, 162, +22054, 8144, 9531, 9194, 32077, 28340, 11917, 22144, 12511, 9684, 30380, 5082, 19703, 21467, 15467, 3616, 3918, 31099, 1644, 29896, 20022, 15825, 16655, 11044, 31902, 10984, 1812, 8263, 30748, 4521, 8425, 20034, 12665, 17956, 29228, 11974, 13529, 8378, 1351, 26040, 18062, 31731, 31123, 4997, 20430, 13822, 8614, 24348, 12153, 10258, 21477, 32176, 26083, 5364, 10452, 25217, 16348, 12264, 712, 14328, 16785, 9138, 1595, 29451, +27094, 30823, 8657, 7855, 6433, 10008, 1128, 24496, 8971, 32251, 29493, 29401, 13305, 5339, 20982, 25458, 15597, 9691, 24866, 8912, 15055, 2551, 1362, 31403, 14815, 2074, 12963, 31601, 11212, 14558, 28284, 5539, 12614, 4173, 13394, 19047, 14182, 14522, 10775, 23153, 14005, 7501, 19787, 27310, 12840, 8001, 20001, 28438, 17692, 12099, 4582, 32747, 14650, 5944, 31382, 29466, 8019, 11577, 28299, 19231, 26136, 23815, 24770, 5982, +27988, 5397, 25029, 9402, 19919, 3037, 32556, 1157, 10538, 19575, 28467, 23378, 27576, 15700, 19048, 12500, 27800, 23631, 12479, 9682, 29575, 11093, 6380, 4826, 22670, 1911, 24058, 16038, 25726, 16060, 22020, 20947, 21457, 14282, 30349, 8609, 17319, 30137, 9766, 27857, 16944, 5465, 18467, 11752, 21166, 4748, 24252, 16198, 28379, 3963, 25880, 25186, 15056, 32261, 30013, 4959, 1404, 21303, 20997, 27131, 4595, 10250, 15310, 26053, +24532, 12891, 1894, 9083, 10261, 11660, 4172, 27205, 17125, 22639, 6190, 5523, 27387, 30442, 21721, 22998, 1638, 14834, 15417, 16694, 14327, 12662, 21653, 15731, 1197, 9883, 10094, 5792, 20133, 25404, 31845, 11897, 5528, 971, 20980, 15789, 12631, 25152, 10226, 29757, 15023, 16416, 2512, 9643, 14091, 24234, 32641, 15729, 6300, 15290, 32423, 20627, 27952, 21309, 3590, 29149, 31192, 13685, 2174, 18557, 6321, 1251, 30454, 11849, +2223, 18666, 27638, 14854, 11050, 5097, 11843, 26073, 21513, 14356, 2948, 2836, 5822, 2822, 18565, 12122, 18112, 18221, 32749, 13297, 6762, 3571, 9678, 5186, 17256, 11852, 23743, 23578, 13104, 21429, 2659, 15327, 7327, 30298, 30181, 18377, 2627, 9257, 11682, 24140, 23613, 14631, 26977, 29435, 17453, 12774, 8789, 2797, 30995, 8770, 16094, 4989, 12341, 25773, 10175, 29598, 4857, 1150, 20408, 17961, 22579, 23067, 520, 29906, +20597, 30702, 15515, 23224, 7191, 27198, 14597, 30804, 9061, 8806, 27471, 26514, 21580, 3492, 29311, 19808, 12262, 12638, 24797, 24603, 5643, 2205, 21433, 10500, 3355, 9073, 28462, 25935, 32141, 28982, 23073, 19970, 26916, 5821, 10427, 1339, 251, 25024, 32143, 9312, 1062, 26846, 3058, 22642, 30338, 32369, 9682, 9832, 12239, 1712, 1668, 17882, 3917, 23101, 28383, 7272, 32175, 24077, 439, 31548, 20291, 23513, 18750, 14440, +29334, 29177, 15779, 29585, 21433, 15155, 6129, 22495, 9233, 9187, 12370, 6804, 8788, 22052, 16636, 21028, 23764, 18304, 6142, 27681, 8638, 1757, 2186, 8045, 25834, 2625, 6825, 13358, 26138, 25575, 27798, 22704, 21985, 10809, 19521, 10650, 25964, 25650, 378, 2430, 2069, 12748, 9234, 10858, 2032, 25870, 31886, 25797, 11407, 5260, 20710, 20045, 7018, 22896, 28090, 84, 25522, 2147, 13442, 18892, 27722, 8472, 8829, 16939, +19282, 28350, 27590, 12478, 21233, 27968, 14908, 23302, 7948, 24142, 1392, 9980, 17245, 510, 3009, 28652, 5771, 23720, 15929, 12789, 13848, 11251, 12873, 6602, 13398, 26316, 25495, 8352, 2020, 1556, 25292, 21302, 29906, 20114, 1013, 18371, 15314, 15921, 8906, 23262, 7296, 10298, 474, 24541, 10809, 3484, 20425, 16580, 27204, 3586, 29369, 8284, 14837, 9474, 14887, 28235, 3022, 7614, 3819, 5043, 9170, 29111, 26345, 6308, +16457, 27358, 24680, 31771, 10512, 818, 22265, 17808, 11116, 22740, 9581, 21925, 26224, 30006, 5737, 20660, 824, 2338, 28944, 15661, 11813, 11063, 11128, 14835, 18677, 14947, 19878, 27847, 11291, 13456, 1388, 27748, 8046, 26068, 26752, 18558, 26886, 16249, 3598, 5234, 6221, 13179, 27160, 32445, 10417, 129, 20337, 11241, 2468, 16514, 26902, 14281, 27577, 5262, 29116, 13487, 20210, 16227, 8566, 31501, 29683, 9954, 26481, 4961, +3254, 20465, 23520, 30140, 3947, 27118, 2607, 10168, 7530, 29767, 9846, 17947, 29896, 30183, 29189, 32364, 13929, 23323, 13877, 8739, 28586, 10226, 22226, 16028, 26453, 30792, 14761, 23368, 7979, 8474, 28329, 11233, 28940, 19081, 8606, 119, 13432, 11213, 10287, 20962, 8212, 20133, 6141, 5340, 17549, 2562, 4937, 31478, 25886, 18814, 7449, 21704, 29040, 29675, 4964, 22725, 27700, 19725, 13325, 2911, 28199, 8887, 14144, 24371, +27968, 22750, 24490, 8632, 1195, 2010, 29594, 9407, 22143, 2968, 14748, 6924, 5530, 19685, 5635, 31416, 5731, 13084, 20352, 2004, 9992, 25316, 24729, 4924, 12273, 5287, 7835, 7705, 14174, 21979, 32076, 9374, 11962, 23799, 18007, 13157, 25809, 14833, 22565, 15184, 17801, 4545, 22109, 23332, 24230, 27744, 21980, 29961, 8060, 9565, 31965, 18052, 2113, 23927, 22976, 14387, 29214, 30811, 22092, 10620, 20023, 21400, 19994, 31985, +12431, 5233, 12374, 5472, 20067, 2171, 20657, 5100, 6716, 9998, 28432, 30946, 4974, 17645, 28140, 13034, 27210, 27337, 31087, 29323, 18496, 21295, 10942, 14942, 19339, 266, 25562, 6594, 21667, 12789, 5811, 1330, 18022, 18185, 6803, 5321, 20357, 27460, 10422, 27073, 4690, 6086, 25252, 9664, 23731, 20624, 22698, 18173, 15193, 21017, 14729, 922, 9545, 25671, 15864, 28884, 25938, 8659, 2710, 14837, 21448, 8521, 16167, 6702, +26706, 22970, 12024, 14295, 17662, 22446, 8601, 22352, 28532, 1085, 32016, 19496, 21709, 21947, 4901, 4134, 10196, 19630, 5056, 19741, 12534, 20921, 15857, 5704, 29580, 18567, 20541, 18260, 27088, 3940, 24962, 21027, 26911, 4218, 2554, 11805, 26664, 11155, 1390, 22429, 12240, 638, 9157, 1181, 22585, 14058, 5316, 14, 921, 10372, 19755, 13455, 31293, 2845, 19159, 28105, 21412, 6932, 13597, 15733, 10872, 5792, 3992, 5015, +10010, 6546, 16821, 3907, 17702, 18211, 26336, 29942, 18849, 2725, 31124, 8667, 16783, 3672, 8681, 17704, 14044, 28436, 31159, 12570, 31281, 17550, 7907, 19926, 24482, 21505, 2891, 2587, 27297, 6883, 7602, 4539, 13429, 24423, 8446, 31131, 9866, 2014, 28306, 28716, 4739, 26662, 4615, 21523, 30334, 13296, 6459, 11610, 8964, 4851, 24180, 7478, 22401, 32088, 27404, 14116, 20825, 30295, 16703, 15354, 4410, 24305, 19893, 17839, +15961, 28340, 16203, 25827, 30354, 11741, 21775, 2326, 5635, 26390, 23849, 3201, 6918, 30308, 14811, 15883, 2391, 6224, 23361, 24793, 5544, 17997, 6141, 26369, 15524, 22844, 8955, 19934, 14381, 28848, 5005, 30342, 24420, 21208, 23402, 22007, 181, 12409, 24333, 5816, 6032, 15414, 9017, 12950, 12954, 23829, 28833, 15346, 30053, 19426, 7371, 2829, 4655, 13512, 29198, 20179, 3588, 5385, 7345, 17969, 1465, 12351, 15544, 25886, +791, 6178, 15125, 973, 18587, 6690, 6789, 24619, 22104, 15807, 4802, 2290, 6868, 867, 17636, 4153, 20294, 25007, 6982, 24949, 5751, 3412, 12361, 9339, 8797, 19706, 27309, 10262, 32057, 10085, 3380, 81, 16263, 18505, 1054, 2082, 25195, 7843, 26702, 14531, 23650, 31504, 16822, 30518, 32371, 1690, 1903, 19897, 26698, 8885, 12079, 32449, 12297, 24440, 9021, 21094, 11378, 3562, 31357, 10668, 13647, 1969, 10749, 29910, +20475, 11803, 31992, 12902, 19646, 25926, 27434, 10529, 24662, 11488, 8279, 24266, 13178, 10183, 11395, 7108, 19068, 23474, 6790, 31366, 15146, 15811, 19692, 26525, 19373, 18281, 4425, 252, 20251, 15174, 30162, 7958, 26977, 29386, 20860, 13855, 22545, 15526, 24384, 14439, 27014, 32664, 5937, 7425, 10079, 17333, 14533, 29147, 8039, 21323, 27745, 23186, 4366, 14670, 16943, 23739, 183, 21368, 23991, 20434, 3774, 21385, 28392, 30751, +18004, 16485, 11838, 7781, 32011, 3455, 22220, 26258, 3351, 28158, 915, 13430, 12723, 15448, 9809, 20762, 4004, 4787, 11180, 8370, 19457, 28123, 32110, 19640, 16723, 23333, 7307, 20497, 11951, 2931, 18480, 29955, 19416, 30319, 4968, 18660, 1006, 27188, 12150, 4357, 22578, 13065, 17787, 2533, 28513, 27596, 23296, 32517, 32383, 1708, 8120, 19072, 29832, 7462, 5945, 13787, 30795, 13252, 1517, 9978, 16183, 19997, 7165, 2832, +17548, 12133, 21492, 18554, 6554, 874, 22911, 29132, 13939, 7930, 31666, 9684, 2759, 22194, 9434, 2374, 23902, 17554, 21447, 20966, 25016, 27392, 1986, 23043, 7876, 3503, 254, 24059, 23500, 7419, 26891, 8281, 19553, 15615, 26835, 26107, 16489, 16979, 22471, 30428, 24909, 21369, 7345, 27668, 10795, 16779, 30043, 1930, 1565, 18722, 22896, 26581, 13346, 24882, 16856, 21222, 28385, 17110, 12513, 19118, 24530, 6637, 27399, 11315, +22252, 21466, 4654, 5974, 5677, 27125, 3634, 30587, 15727, 10979, 25487, 26522, 27758, 22762, 28452, 29323, 8716, 18581, 23136, 22062, 10695, 7225, 10516, 6313, 24335, 23030, 25431, 16097, 29667, 20062, 27412, 19151, 8760, 32066, 25125, 14438, 26424, 28760, 12257, 9383, 6971, 4976, 3137, 1962, 27739, 31590, 31285, 3687, 17403, 21654, 25750, 28098, 28879, 3498, 1643, 20446, 26528, 27074, 3776, 23427, 14368, 31188, 9811, 23129, +30487, 2168, 4799, 24143, 30928, 17056, 758, 5132, 22032, 3895, 7094, 17003, 2717, 5611, 20691, 20120, 27265, 13673, 15451, 23376, 17171, 17094, 11055, 10932, 11401, 14831, 1591, 25769, 13251, 11402, 16130, 10970, 13571, 20929, 2345, 11731, 5217, 3103, 16863, 27250, 6999, 23957, 11485, 9716, 29569, 32176, 29837, 24066, 13081, 12520, 14675, 30253, 29614, 25730, 8417, 8247, 7793, 10008, 1249, 21044, 21411, 17379, 32015, 2214, +5541, 1592, 13945, 10758, 4696, 30809, 5240, 11695, 21998, 16726, 21411, 18799, 16134, 18480, 10098, 29216, 31000, 24773, 26701, 27847, 17735, 2350, 3326, 25528, 12358, 4575, 13804, 1001, 21955, 13051, 3215, 27496, 14644, 17161, 5486, 19340, 15202, 10727, 31035, 4432, 27453, 19678, 23232, 10819, 5391, 562, 7267, 3623, 25335, 1200, 31470, 10302, 3550, 2029, 3062, 15909, 6604, 16866, 16910, 28559, 29918, 20126, 23287, 11794, +4519, 28774, 31134, 19721, 6733, 29401, 24153, 1418, 16311, 14617, 12237, 21702, 15179, 19505, 25326, 7746, 20705, 24028, 18048, 24256, 26057, 21110, 7397, 32662, 5209, 24307, 28453, 2359, 11665, 18973, 14153, 16184, 14979, 12519, 3137, 21712, 9152, 27291, 23130, 25463, 9140, 2599, 14398, 24320, 22104, 6956, 32066, 10042, 30984, 17347, 1530, 24274, 5689, 8927, 24168, 10898, 466, 19853, 13257, 12132, 6058, 27410, 28316, 21037, +7161, 31454, 9981, 16313, 25977, 343, 9009, 2349, 2943, 23407, 26669, 25047, 30363, 25968, 2321, 28579, 10547, 3851, 20085, 16236, 12778, 11485, 27135, 13245, 31339, 7624, 25377, 4629, 2267, 20925, 25667, 9428, 19611, 2880, 25742, 12820, 3224, 1983, 15170, 6167, 25390, 9071, 31214, 22985, 2271, 768, 18796, 12818, 4619, 6114, 29055, 17398, 17599, 23422, 30643, 16170, 31046, 23252, 20800, 545, 11409, 13699, 9974, 31021, +16579, 2948, 11073, 19803, 4931, 26243, 25970, 30321, 2547, 24417, 20538, 4818, 25185, 6566, 17637, 29804, 12680, 13924, 14434, 30280, 4578, 12309, 13682, 2856, 2793, 1714, 3402, 14203, 15413, 13376, 12456, 31993, 16324, 23529, 19028, 21255, 17005, 12231, 18808, 19552, 3880, 6578, 24370, 29065, 13144, 9239, 26101, 25825, 23163, 7768, 23337, 27741, 20077, 4251, 30598, 22871, 5966, 1232, 4306, 21379, 14608, 16762, 20604, 30932, +7523, 6865, 19419, 24528, 19096, 5459, 11312, 22976, 12037, 2915, 19273, 25181, 12154, 12606, 18238, 2550, 20374, 8807, 30291, 7684, 13059, 28121, 30555, 19025, 29353, 2093, 7636, 11193, 18855, 28241, 9357, 26378, 2338, 28776, 18139, 21434, 1467, 29451, 11642, 13504, 32366, 30915, 5918, 11753, 10753, 24156, 14303, 31128, 196, 11826, 6044, 13255, 7180, 3831, 32280, 3765, 5924, 7148, 14959, 24779, 2621, 24316, 18389, 4959, +20325, 3760, 26393, 21792, 444, 5267, 2529, 42, 3414, 8447, 11795, 14168, 32603, 26098, 12528, 31, 5157, 18572, 13286, 12337, 22403, 12798, 16102, 28327, 19947, 31061, 20338, 22568, 22610, 5959, 27528, 10167, 9720, 21153, 31959, 10164, 26421, 1720, 10206, 29835, 10167, 22002, 11235, 10003, 15332, 23763, 10034, 20489, 9567, 23321, 58, 31970, 3351, 16161, 27529, 23298, 14454, 15099, 13099, 4296, 21059, 7859, 14463, 30779, +29012, 13655, 8175, 22665, 15375, 18381, 19733, 25543, 7615, 30968, 2778, 22948, 21964, 12812, 10669, 31531, 3365, 10728, 30734, 6717, 26889, 25495, 30015, 8575, 7827, 10346, 12872, 28886, 18205, 27335, 26897, 14450, 8222, 2304, 4347, 23598, 20685, 24080, 16373, 28301, 22281, 19151, 18481, 11477, 31963, 29150, 10240, 2561, 7110, 8206, 9278, 1231, 934, 6525, 9807, 8761, 16872, 22679, 4879, 2309, 17246, 31776, 16759, 25469, +1312, 21107, 16299, 21997, 12419, 32672, 17530, 1932, 19055, 3243, 13409, 18250, 32394, 23650, 20811, 6736, 31856, 30089, 7968, 22, 3847, 17775, 8783, 20719, 7686, 13662, 23028, 24932, 12670, 7020, 17633, 13982, 28127, 1164, 3212, 7778, 1068, 20742, 9711, 20123, 23986, 23120, 5606, 23612, 14002, 26417, 30348, 13091, 23739, 5548, 13113, 27586, 23323, 21897, 15537, 31009, 2791, 5797, 23174, 15462, 12817, 8039, 29444, 8176, +9204, 32656, 15955, 10272, 20631, 25666, 30396, 11849, 16018, 3234, 2693, 30021, 29651, 273, 10344, 20622, 5822, 23457, 15440, 29145, 12586, 30977, 27387, 15378, 4007, 17793, 30840, 16824, 25832, 27516, 25001, 2268, 27405, 8188, 12541, 15268, 1086, 10169, 27117, 17104, 13403, 29810, 14357, 10286, 30083, 24701, 30909, 3137, 15391, 13581, 32283, 27977, 11791, 26902, 10587, 15798, 11927, 8659, 32622, 4991, 3408, 24855, 7260, 30813, +275, 19801, 13313, 1361, 29970, 7662, 18466, 10605, 4704, 55, 20891, 2019, 24757, 19032, 5157, 7380, 32614, 4672, 2589, 11637, 31574, 13177, 27435, 10733, 21836, 27289, 15724, 25244, 19377, 22984, 23289, 19652, 10017, 3834, 21014, 7219, 11496, 6712, 17824, 16200, 6767, 5948, 18220, 31524, 24980, 23377, 6136, 24826, 28049, 8726, 3695, 26855, 21903, 31130, 4820, 10971, 25652, 20544, 3448, 12261, 10761, 26737, 31913, 20778, +30572, 20159, 27998, 9300, 26871, 13054, 25501, 871, 19002, 10953, 32395, 11215, 1562, 5764, 3273, 29611, 14490, 6969, 23698, 3625, 5331, 28518, 14596, 30983, 16294, 18044, 10476, 27055, 12014, 9622, 15066, 9818, 29781, 10296, 19118, 23885, 23350, 11851, 24756, 9585, 22804, 24383, 20800, 24366, 30147, 24073, 21209, 11869, 31042, 12139, 15494, 3606, 7889, 30091, 1821, 24184, 15367, 12298, 18471, 27381, 21920, 769, 4431, 18933, +11065, 23550, 10050, 1648, 2633, 2038, 11233, 25438, 26422, 32033, 17036, 23801, 23338, 5478, 2903, 21613, 17617, 18397, 25219, 25507, 15720, 27040, 16923, 31088, 6570, 2626, 25701, 28490, 3396, 30133, 14656, 14461, 20915, 24706, 16109, 23548, 26745, 27342, 16218, 20399, 26607, 487, 11432, 17178, 5965, 14335, 6023, 23582, 32733, 31242, 16321, 15685, 25514, 476, 14005, 32085, 3103, 6939, 27807, 6499, 4304, 9695, 20960, 25219, +1634, 4302, 15999, 28379, 31644, 32218, 16010, 25484, 32705, 27442, 9894, 5902, 9010, 15917, 29484, 8975, 14391, 13038, 24660, 7137, 13514, 5898, 6454, 16617, 12837, 1494, 23116, 17141, 11189, 11309, 9592, 12823, 15611, 25591, 8434, 14487, 25041, 24444, 7203, 24978, 19119, 17097, 30880, 28129, 246, 27597, 4336, 14637, 7867, 28996, 21775, 21381, 2126, 28229, 5231, 14963, 29723, 28347, 32104, 8145, 6888, 8928, 20968, 22499, +1752, 29403, 4219, 26793, 21079, 11422, 19004, 7430, 28520, 17116, 2791, 28766, 11945, 7127, 10636, 19812, 3356, 32411, 8426, 5482, 27872, 13657, 20446, 24828, 9236, 19782, 205, 16125, 28711, 21173, 5856, 30463, 17808, 10075, 24488, 6120, 21498, 10724, 13550, 17250, 27841, 16342, 13248, 7018, 23469, 23884, 26831, 26825, 23527, 2489, 32308, 18632, 16146, 19986, 10692, 25382, 7000, 10897, 8739, 2943, 32070, 14596, 638, 17111, +24671, 25127, 23231, 13401, 3083, 4013, 30651, 30924, 20355, 11132, 5175, 11057, 2248, 32006, 5114, 25776, 1727, 4654, 11640, 17873, 24640, 22332, 10487, 31641, 461, 19227, 1816, 32531, 1055, 2455, 16874, 25726, 27582, 7337, 6360, 30665, 11351, 4243, 28822, 31706, 15375, 1229, 9995, 17624, 467, 15110, 10632, 2194, 19764, 22272, 20067, 11637, 11836, 30554, 10510, 12297, 17013, 12326, 12060, 18068, 14781, 28935, 11027, 9595, +3504, 17387, 7493, 14855, 21630, 3547, 13794, 4238, 4776, 23789, 21862, 5243, 6131, 32494, 7437, 25896, 21998, 27504, 4765, 1066, 25290, 15275, 13363, 9536, 27601, 25423, 27604, 9615, 21590, 5863, 19210, 25095, 23250, 26703, 7182, 12113, 30250, 20976, 16351, 2258, 11998, 5445, 7501, 18129, 5171, 14938, 11257, 27169, 9674, 16022, 28235, 2197, 31297, 8830, 11733, 26131, 1485, 6569, 2978, 23076, 12433, 22188, 15403, 2915, +16124, 22585, 15028, 13606, 10794, 31379, 15865, 22792, 4056, 23366, 8153, 9227, 5537, 19411, 3628, 15211, 2665, 31863, 17408, 1195, 7925, 29141, 27326, 9411, 2943, 30304, 32487, 15376, 19724, 15122, 18291, 3080, 4939, 552, 16687, 15733, 31931, 32552, 5757, 3220, 23150, 13911, 12447, 28687, 554, 16076, 11131, 3219, 15171, 28539, 4414, 23097, 24913, 31740, 32508, 27856, 29276, 32227, 10464, 16233, 14581, 28755, 19313, 19520, +29307, 3232, 2486, 28471, 3016, 8243, 31691, 26167, 22154, 11370, 22086, 22708, 27446, 449, 25928, 9850, 28989, 30342, 179, 21134, 29315, 32687, 16222, 25823, 32146, 26686, 9288, 13959, 22673, 28602, 711, 19213, 31834, 3197, 14916, 2083, 11441, 13839, 28250, 827, 25209, 17568, 23536, 19888, 18018, 16696, 29738, 14239, 14270, 29917, 2605, 10817, 29836, 18827, 3873, 29214, 12745, 13161, 10405, 2650, 8995, 11116, 21863, 8062, +14314, 4011, 10145, 25755, 17850, 5627, 26582, 10292, 23195, 17350, 30180, 8445, 1278, 27150, 22684, 15549, 24299, 25289, 26366, 21367, 11348, 30239, 17813, 24093, 10633, 28218, 26744, 19628, 6566, 15839, 27690, 20880, 19851, 5067, 13867, 4933, 10694, 7682, 15225, 1122, 25032, 12637, 9567, 26311, 7019, 32252, 9092, 31318, 24773, 2690, 19917, 3354, 162, 4962, 27447, 10795, 412, 21423, 30423, 6979, 4495, 25346, 27859, 24346, +30413, 8959, 29279, 8340, 16641, 11737, 9462, 8905, 24374, 19029, 2448, 31394, 18513, 11540, 29944, 10519, 14231, 17094, 13873, 14393, 22056, 8552, 25188, 22469, 29976, 22843, 29448, 1703, 15421, 24539, 26049, 13067, 730, 22560, 21407, 17371, 1529, 30869, 26277, 25904, 17130, 28725, 24530, 2876, 7498, 21706, 13395, 21729, 6032, 27268, 3354, 28089, 3052, 28542, 17790, 260, 18617, 14470, 1963, 1271, 6241, 28012, 14338, 6972, +17805, 2977, 24343, 19334, 1078, 17852, 12470, 18208, 13810, 4232, 21084, 21308, 25939, 1711, 10269, 31971, 28979, 13623, 27292, 32032, 9397, 12314, 32292, 28014, 26784, 1488, 29285, 258, 29500, 10855, 7230, 14537, 13832, 31573, 1104, 14910, 16658, 13574, 351, 30468, 17807, 21435, 19008, 10978, 23147, 29277, 10181, 19358, 10132, 4706, 18622, 19529, 17020, 18147, 14775, 11037, 19635, 11293, 11295, 16367, 22148, 18525, 30905, 3213, +17330, 32009, 18123, 1220, 12815, 18474, 31688, 30622, 7142, 17928, 8832, 30289, 14437, 19014, 16879, 24569, 23720, 2734, 11330, 7972, 20881, 26106, 19009, 7748, 4631, 30304, 24115, 26779, 16061, 22252, 29992, 624, 21493, 15348, 1844, 1541, 1054, 765, 32163, 8196, 18693, 8228, 5717, 363, 27242, 22597, 24932, 18194, 25331, 3495, 26166, 13444, 29601, 12408, 21192, 1464, 9944, 12539, 28243, 26006, 2024, 25468, 26630, 23517, +8048, 28474, 25058, 9102, 29239, 24454, 17299, 15165, 32682, 23016, 15528, 27156, 12845, 7692, 12582, 5408, 11187, 5980, 18852, 8020, 18388, 7276, 9484, 28333, 19816, 4960, 21571, 21840, 30428, 15433, 12589, 5708, 11139, 4880, 14810, 7611, 29334, 32109, 22776, 29248, 22358, 5536, 23636, 2435, 13228, 3450, 7844, 24416, 9430, 26696, 32436, 27819, 1205, 9153, 23384, 21021, 14113, 12187, 10093, 11773, 27620, 22682, 17481, 5991, +27562, 32291, 13602, 24128, 31633, 3610, 20608, 21223, 9146, 11476, 23658, 22375, 14926, 31502, 14023, 24357, 25431, 13691, 19408, 26636, 22844, 10024, 14889, 4189, 22211, 24982, 15962, 17063, 14896, 675, 23054, 9691, 199, 3889, 1051, 31832, 7499, 21660, 20287, 16646, 368, 11177, 6253, 15295, 9912, 20276, 6884, 2575, 1199, 26292, 29211, 24044, 3548, 11332, 28233, 25759, 3546, 11428, 10054, 18442, 12103, 340, 28133, 12302, +4229, 29185, 11366, 11729, 18077, 31653, 28375, 18445, 10063, 1860, 972, 19975, 22136, 7856, 22550, 23335, 1380, 18993, 14611, 4928, 30325, 10077, 30687, 1103, 21505, 7973, 19545, 840, 8314, 14911, 13143, 12543, 11328, 24509, 24272, 29405, 23395, 19879, 15082, 690, 21739, 16055, 20665, 11107, 23911, 10447, 1675, 25292, 29440, 16286, 30220, 26997, 26363, 28140, 28100, 15100, 3345, 14877, 15941, 11659, 29788, 29084, 24203, 8348, +20825, 15707, 4985, 11452, 2819, 20068, 12142, 24558, 3355, 39, 2898, 27266, 10486, 4573, 19790, 7158, 20859, 17243, 1387, 14455, 12615, 29487, 29555, 15960, 11597, 12728, 27620, 8617, 9044, 19055, 16966, 29870, 1994, 21951, 8554, 4813, 9251, 20697, 29372, 12606, 20736, 32270, 7105, 31223, 4075, 26895, 5613, 24934, 11370, 7001, 6621, 23985, 3720, 3409, 7178, 15317, 16137, 2030, 23935, 25182, 21085, 8133, 22284, 23079, +30084, 30838, 27893, 6568, 18767, 24497, 19174, 6736, 23999, 26279, 5191, 28074, 20407, 10804, 20240, 31777, 17805, 26862, 22995, 21526, 30271, 30173, 4075, 13640, 32203, 28010, 6054, 20520, 3375, 28338, 10831, 692, 26409, 5956, 7260, 12408, 30453, 26434, 19144, 21684, 19946, 24335, 16990, 7585, 2372, 4463, 6594, 20177, 31325, 29589, 8935, 28828, 26994, 13011, 9700, 26429, 8253, 15755, 14181, 11629, 11325, 25013, 12321, 4966, +30969, 19581, 17375, 28655, 13247, 3751, 17571, 425, 28087, 1794, 8010, 30459, 6257, 14605, 17868, 4814, 11426, 26804, 874, 5653, 7047, 10574, 32082, 15300, 26329, 13496, 26929, 4887, 5741, 6482, 9853, 3942, 26063, 27228, 32597, 6543, 30980, 17401, 6968, 26299, 19195, 14979, 23990, 25452, 29584, 9090, 30266, 8242, 3126, 31140, 13895, 10173, 8946, 13210, 25474, 2508, 26706, 19635, 7395, 32447, 26118, 17248, 3621, 19413, +11709, 3451, 25956, 9921, 20852, 157, 3452, 7279, 15136, 27442, 32731, 11952, 3764, 30229, 20194, 6891, 28601, 1322, 17064, 4779, 14532, 9770, 7287, 8470, 29406, 14682, 8149, 22756, 31931, 11770, 9401, 10872, 15221, 2590, 20793, 3305, 2747, 24245, 10584, 17883, 18919, 10547, 29835, 22683, 8008, 17261, 29574, 3841, 18583, 13871, 8621, 347, 23641, 15908, 8817, 20279, 30591, 16966, 10267, 29754, 28737, 19669, 7858, 11190, +22259, 28651, 14496, 25006, 20128, 25080, 10121, 6279, 2860, 7188, 28962, 10868, 24449, 25769, 14710, 10265, 6872, 23331, 10612, 30513, 6471, 19430, 18025, 4294, 3628, 28292, 1280, 32365, 15193, 9138, 10788, 4684, 5021, 25284, 29690, 25149, 17596, 7043, 31428, 20456, 14231, 27623, 31325, 5913, 20624, 13267, 16178, 27496, 3830, 26790, 25241, 10301, 13452, 10498, 14596, 17081, 6023, 15876, 16678, 21216, 25015, 27466, 25901, 30036, +19982, 22823, 22418, 4811, 29867, 21078, 25267, 11330, 15933, 23824, 17243, 3789, 4323, 653, 31285, 8153, 27444, 23759, 18455, 8128, 1489, 283, 25209, 7512, 16159, 9120, 28729, 8406, 3818, 21862, 5675, 23801, 11917, 28093, 28612, 9016, 16403, 21111, 20347, 32337, 12168, 4822, 3358, 16491, 5476, 1876, 24645, 152, 25635, 10332, 8280, 27124, 10615, 722, 1869, 26774, 9842, 30598, 2413, 13660, 19692, 8088, 4693, 31609, +3413, 537, 7858, 19816, 21649, 28205, 19385, 1049, 259, 22744, 17540, 5735, 24620, 9417, 5887, 17487, 19749, 14168, 11843, 30364, 14890, 13712, 24371, 24732, 11542, 26784, 5624, 31234, 2104, 10318, 30076, 5517, 10855, 5166, 25333, 32504, 603, 11951, 785, 862, 1927, 18326, 6598, 26547, 27743, 12485, 11266, 14725, 26653, 23109, 12321, 8775, 4054, 3924, 739, 15596, 30708, 6364, 14063, 44, 16682, 11371, 5561, 27537, +16537, 30895, 27274, 17140, 10078, 28059, 18002, 12005, 13617, 24600, 5784, 8593, 4318, 17050, 23318, 30971, 7391, 2871, 6979, 11445, 6796, 7718, 27042, 4736, 14082, 8337, 4781, 30764, 19708, 10342, 25534, 3477, 8469, 20040, 20617, 18547, 15331, 5851, 30552, 28949, 30452, 3568, 4774, 2002, 20618, 28092, 205, 28010, 30963, 7184, 6687, 4991, 14903, 961, 9728, 28985, 9298, 14509, 26982, 29006, 24851, 19748, 32483, 553, +7020, 20332, 19100, 22351, 26184, 16885, 18532, 23868, 20453, 23306, 25870, 8304, 18630, 26075, 3546, 16826, 492, 10233, 21817, 15395, 11195, 31545, 11612, 20493, 13286, 5826, 16732, 5370, 25574, 16447, 5923, 32594, 4012, 25023, 22178, 30196, 9140, 7942, 21296, 29594, 31249, 14398, 5130, 17111, 7705, 8676, 1169, 8197, 18909, 22987, 23592, 30104, 21764, 2437, 17830, 2283, 8263, 1794, 7653, 1070, 18241, 13576, 896, 22253, +5831, 23074, 19681, 14972, 31017, 8209, 11798, 29498, 22607, 16928, 13841, 30313, 25604, 15011, 5742, 11745, 5230, 29335, 9082, 26994, 31772, 26912, 29277, 7267, 28706, 4162, 8337, 14179, 17738, 9234, 3665, 23570, 32308, 23346, 5774, 30557, 31556, 17572, 27287, 21395, 1732, 8361, 18940, 27336, 23372, 24683, 6313, 28602, 21250, 15395, 22828, 20254, 9539, 19338, 27521, 5477, 23500, 3091, 19657, 8471, 12325, 23322, 32041, 11865, +13900, 5047, 9655, 12688, 22619, 4174, 1316, 24351, 12535, 20256, 18919, 3139, 12171, 25232, 31741, 653, 7860, 21802, 20907, 17399, 8372, 15661, 22877, 31872, 18752, 9766, 7575, 31077, 320, 6848, 10174, 14220, 11895, 19829, 26909, 1746, 24004, 28225, 26097, 3771, 15713, 12248, 6911, 27885, 4713, 5884, 28538, 12573, 27686, 16678, 29972, 3290, 32339, 20081, 2395, 18323, 29847, 9970, 16632, 30167, 16819, 26806, 11620, 28714, +13868, 5761, 30461, 5104, 1218, 23790, 8875, 16931, 3271, 15786, 12048, 7984, 21671, 7819, 20557, 16589, 24497, 17761, 19880, 24068, 5075, 22275, 9623, 2154, 32245, 26255, 32322, 16296, 20293, 11174, 12243, 1393, 16935, 9936, 6497, 18153, 958, 15373, 2316, 4229, 31159, 14365, 12213, 20062, 22184, 2, 3884, 13913, 17764, 23764, 5213, 22839, 13271, 14836, 24993, 12748, 8323, 24547, 29045, 28616, 2953, 8520, 30010, 19888, +18456, 3739, 5273, 19414, 19112, 7590, 23644, 17504, 21955, 3089, 4798, 11371, 3092, 8682, 25284, 20856, 32446, 30497, 10927, 12949, 12565, 3152, 25698, 20888, 27700, 21975, 16736, 30653, 30495, 13978, 17774, 16183, 17718, 23047, 2829, 4062, 30637, 26473, 21566, 19824, 29563, 26365, 31195, 32655, 2279, 23711, 20743, 1958, 21440, 31670, 14907, 1237, 2054, 7837, 22125, 29754, 29812, 6094, 27640, 27539, 20072, 12646, 10954, 5022, +2925, 13784, 9085, 795, 7489, 30651, 20619, 4284, 24248, 19047, 4171, 26528, 9990, 24914, 28486, 31431, 23816, 10625, 32668, 25871, 18463, 22026, 22857, 15507, 28120, 17729, 10279, 15424, 30375, 21233, 20447, 533, 2249, 29532, 1328, 9739, 27415, 21947, 14023, 18896, 8226, 18195, 12656, 18217, 10341, 8374, 16880, 1390, 18999, 16780, 27261, 4694, 6038, 17350, 20202, 1390, 2312, 30481, 16815, 32687, 18946, 4494, 452, 21196, +1258, 1780, 30935, 28673, 23728, 12190, 14801, 31954, 30385, 27457, 17403, 7959, 3063, 1515, 9349, 22063, 18296, 3842, 26757, 24334, 21192, 14191, 25725, 23504, 11904, 9772, 23424, 30851, 14266, 23876, 19279, 15524, 25657, 17446, 11429, 16617, 29636, 26231, 15803, 27254, 20920, 439, 2445, 23984, 1954, 11794, 13279, 20250, 15636, 7268, 11817, 4060, 21460, 4774, 27565, 596, 14546, 18221, 31447, 28812, 9329, 17958, 11568, 2218, +2636, 22997, 18835, 32273, 16460, 1871, 26759, 4613, 2310, 29204, 28597, 4264, 8230, 9108, 24515, 23866, 16376, 3564, 27926, 5068, 8338, 22723, 5665, 22884, 8176, 4344, 18928, 17506, 22303, 30496, 19724, 24939, 20725, 5792, 24444, 4418, 7663, 18435, 9031, 9973, 14871, 4860, 14237, 23101, 13968, 5984, 14199, 30344, 9548, 9358, 2645, 17886, 32081, 8310, 8002, 7490, 12654, 26930, 24996, 2189, 24658, 11952, 27129, 12616, +17744, 18805, 17034, 25407, 4473, 26065, 2612, 19344, 30925, 16850, 9678, 12125, 22834, 23877, 9701, 32383, 467, 12346, 17501, 32549, 20656, 25504, 7271, 543, 19666, 32267, 2732, 11557, 11451, 29861, 24173, 29196, 15899, 8439, 21835, 20372, 1736, 24448, 6948, 32661, 8530, 16626, 12018, 31364, 7736, 21719, 30979, 8203, 1298, 15713, 7984, 21954, 8449, 15255, 22497, 28115, 14754, 25230, 6904, 26206, 22323, 31077, 22634, 5454, +6748, 11701, 25826, 8484, 3381, 7, 8377, 11911, 16633, 20395, 10508, 24369, 9347, 8719, 32573, 10645, 24432, 7789, 32599, 113, 23045, 22329, 28229, 5031, 14791, 2365, 31237, 4346, 675, 21103, 9801, 7423, 37, 2859, 15908, 3418, 2866, 24285, 15330, 19500, 11913, 25838, 11101, 21260, 1789, 10906, 31905, 26222, 18696, 31736, 26335, 8973, 21297, 21796, 14004, 3320, 24162, 12474, 7667, 24837, 809, 17468, 32260, 846, +20327, 15400, 4265, 23194, 6918, 19595, 9926, 18831, 12665, 21027, 7323, 14454, 31934, 6460, 7908, 17862, 5428, 1476, 26835, 26726, 23272, 8071, 30046, 14666, 20545, 4945, 6735, 21355, 22413, 6228, 22201, 9973, 21628, 26466, 399, 28546, 13293, 10325, 14609, 25958, 31352, 21932, 7645, 30518, 28392, 15553, 15612, 1053, 17029, 9679, 27779, 7534, 17751, 25057, 22200, 5528, 30003, 28936, 26883, 19648, 2396, 16317, 29621, 24024, +10015, 30020, 19803, 23309, 7577, 1644, 16499, 6162, 23577, 24144, 3912, 19201, 6930, 19525, 20254, 23959, 29204, 15265, 31493, 14187, 7555, 20926, 19716, 4790, 17094, 13831, 24438, 19490, 30148, 21292, 10746, 7396, 18544, 30549, 30705, 26122, 32194, 14436, 32284, 23003, 5813, 3428, 9436, 12743, 22953, 29691, 3934, 19390, 12188, 2660, 809, 19743, 23586, 20525, 24533, 7912, 1589, 16204, 27402, 31737, 4728, 5380, 6365, 23272, +3162, 4302, 16626, 2588, 18739, 16142, 25591, 24552, 19571, 2259, 4527, 9756, 31950, 8461, 29146, 11371, 11121, 29956, 31114, 1939, 17713, 22880, 9851, 19302, 6316, 4485, 18272, 11044, 9866, 24637, 1548, 13028, 28940, 18175, 15616, 14911, 1549, 8439, 6695, 21120, 10698, 11222, 30877, 9881, 19683, 27255, 21252, 30805, 24443, 19598, 32744, 9389, 9710, 9828, 28691, 16026, 14313, 14195, 27070, 24179, 6065, 28619, 4439, 2237, +14026, 20055, 17148, 15575, 28494, 23843, 3928, 6425, 2297, 2037, 16306, 21980, 29292, 4790, 20017, 20968, 24388, 19994, 30357, 1331, 29822, 26280, 17357, 11367, 7708, 11660, 2779, 13773, 7511, 7218, 16010, 21537, 27274, 390, 4344, 23000, 24233, 8272, 29425, 26530, 10309, 12963, 15742, 6834, 17753, 2992, 27802, 9374, 22986, 25391, 10705, 20040, 18903, 28062, 31407, 26611, 6954, 1418, 7616, 14465, 8637, 23626, 3234, 3143, +24016, 7579, 26143, 15481, 15851, 22801, 9243, 26161, 2996, 24986, 227, 20750, 27978, 28029, 30124, 18196, 20652, 8061, 5468, 6787, 3355, 4107, 631, 10310, 5526, 8247, 24775, 14163, 31874, 28010, 17306, 23122, 2821, 10681, 5836, 18672, 714, 15079, 12065, 3711, 7297, 12292, 24461, 2507, 7553, 21817, 20703, 28205, 29878, 26171, 2225, 465, 30279, 2856, 10775, 3037, 11103, 2783, 17200, 10209, 30793, 1738, 564, 846, +12419, 6400, 19518, 13134, 21479, 31584, 16845, 28777, 11108, 8538, 31284, 18662, 30355, 19220, 14099, 27465, 12623, 16324, 27930, 10134, 19180, 5938, 13171, 30284, 8721, 30371, 7725, 6746, 32109, 8289, 7592, 11761, 14689, 27110, 24895, 3401, 25926, 8972, 32178, 4267, 17510, 30694, 22929, 15097, 17146, 4260, 9794, 29770, 20585, 4956, 7136, 6997, 10894, 20308, 4513, 19615, 17911, 12239, 26361, 17253, 20528, 1185, 29014, 2450, +28296, 21141, 5851, 21454, 30113, 5261, 25721, 14855, 3187, 15882, 29952, 20334, 20143, 6978, 17336, 7960, 11934, 24472, 14957, 22829, 12012, 19471, 9676, 29924, 31710, 3270, 14409, 19470, 4455, 10655, 21920, 32751, 31796, 27771, 21438, 29141, 264, 14391, 11228, 3452, 30274, 8412, 23786, 17649, 15390, 8354, 25609, 27324, 58, 7798, 17385, 12071, 27269, 27062, 9227, 26211, 30332, 23636, 12914, 2019, 1523, 2066, 2003, 551, +29838, 23441, 29692, 30102, 5064, 8152, 786, 2570, 16564, 24572, 20219, 31954, 158, 13060, 26510, 217, 20859, 11128, 12288, 15360, 5422, 21515, 8804, 2986, 12383, 21718, 5005, 13906, 23784, 7008, 14457, 20854, 30449, 11381, 18189, 2746, 19533, 18975, 5316, 3329, 10780, 25536, 2515, 10938, 5828, 29025, 11155, 26687, 7385, 23443, 9280, 12807, 12190, 18084, 15793, 24573, 7034, 20799, 5711, 30818, 27807, 20168, 18905, 25489, +31549, 4326, 28235, 18314, 23301, 783, 21643, 1313, 26319, 24158, 12252, 32148, 20416, 23407, 26067, 27801, 14083, 2579, 7841, 26273, 20663, 23634, 18079, 27697, 11665, 23790, 25748, 6705, 11191, 11885, 32194, 9972, 16211, 27661, 28287, 6744, 28444, 17162, 8058, 21996, 8553, 20310, 21376, 28969, 10949, 14675, 24002, 25032, 17255, 31843, 18538, 5150, 22710, 3849, 80, 1607, 27639, 25828, 8312, 6062, 4945, 7738, 16035, 21156, +2631, 11554, 27900, 31076, 28716, 3190, 20304, 4501, 23500, 8912, 702, 1682, 23587, 24705, 26714, 8074, 23780, 12484, 13225, 13722, 16333, 13305, 15330, 11205, 6365, 23642, 17267, 11310, 31381, 534, 32466, 1244, 12088, 27598, 32320, 8037, 30789, 19856, 12538, 21521, 28768, 13241, 23203, 19588, 5178, 17150, 27662, 28958, 29634, 8119, 9913, 13200, 21424, 25243, 24405, 27789, 16117, 8904, 6331, 14730, 9439, 6029, 15975, 21527, +860, 15527, 29564, 31649, 2616, 9335, 20402, 31384, 22576, 10838, 18204, 27754, 27988, 13099, 23944, 24854, 21218, 1089, 5286, 9875, 26332, 29691, 4896, 9682, 5828, 11228, 24412, 15267, 17257, 7619, 4026, 18117, 23147, 823, 16998, 25763, 10158, 4633, 24379, 32734, 15471, 9816, 27720, 10691, 22915, 18896, 2777, 11365, 19986, 8064, 21240, 13550, 4987, 26137, 23232, 10815, 4597, 14877, 26082, 21854, 22496, 30109, 7204, 12875, +30932, 24202, 5870, 8322, 28835, 30250, 8288, 11538, 7298, 3240, 22229, 30213, 22136, 25007, 8810, 9354, 303, 30051, 22905, 5290, 23420, 13369, 16106, 28017, 28246, 9420, 17103, 17975, 6761, 24307, 30850, 4925, 15742, 3953, 13247, 11809, 1435, 21535, 23348, 8733, 24775, 12809, 6178, 14144, 5048, 14988, 23498, 5351, 12271, 13635, 10642, 2923, 27005, 26748, 30940, 22483, 3400, 15276, 7690, 10162, 6815, 5773, 15087, 22557, +9726, 28335, 1599, 11161, 17102, 24947, 19894, 9110, 4988, 26072, 23254, 10037, 8292, 13984, 15388, 20564, 27620, 26030, 23487, 21857, 20010, 21660, 11572, 23411, 4168, 19263, 805, 10983, 25036, 15892, 773, 1994, 11459, 2372, 13155, 28562, 27319, 281, 4904, 32307, 26353, 28158, 9576, 1877, 9374, 24965, 22441, 4226, 18227, 13161, 26083, 5470, 2053, 4888, 28881, 6221, 24151, 29686, 17204, 16419, 12810, 17977, 18413, 24270, +20349, 31568, 20064, 14900, 31849, 24968, 14440, 25434, 20358, 24016, 27311, 29732, 16213, 16985, 1191, 1673, 30146, 27274, 7143, 32199, 32162, 3256, 5652, 23545, 174, 22856, 7196, 12984, 8066, 25609, 4486, 28415, 24409, 24550, 10548, 23490, 16750, 24988, 16156, 4340, 16236, 10700, 1305, 32450, 27685, 2496, 1355, 25063, 29770, 8498, 24494, 29165, 11754, 30146, 19942, 11928, 20234, 27139, 24912, 28300, 19980, 29399, 23948, 11622, +21181, 1728, 2344, 5164, 26716, 18501, 9504, 10184, 29201, 10809, 9866, 24118, 13305, 11221, 16413, 10308, 19719, 8139, 6705, 31473, 5517, 26647, 10633, 25751, 21018, 2778, 21284, 8231, 32177, 12464, 19853, 20590, 14192, 22197, 25754, 8140, 7930, 2491, 18324, 4363, 13300, 28191, 28481, 26606, 6644, 12126, 4146, 26364, 20265, 10851, 25069, 25782, 4730, 2935, 18766, 25749, 5713, 7282, 1212, 5122, 19746, 21065, 25712, 1170, +10494, 18699, 9310, 18425, 21190, 27634, 22788, 1722, 23057, 18502, 28328, 29702, 30628, 32474, 23298, 18126, 10557, 15599, 11140, 15288, 18534, 29906, 8269, 24247, 4420, 9481, 29369, 24166, 30546, 22314, 25336, 8272, 8245, 1878, 26697, 29435, 29513, 16718, 31157, 19802, 2452, 26718, 16736, 312, 26424, 7266, 18438, 4214, 22866, 29579, 19502, 8632, 26717, 27771, 112, 31138, 4484, 29481, 22536, 2262, 19027, 15105, 10534, 27272, +16983, 4464, 23939, 13728, 21182, 22329, 763, 23634, 16279, 17499, 23946, 9935, 24766, 9617, 14149, 14864, 6428, 883, 23496, 377, 28654, 23608, 31515, 370, 20322, 21284, 2632, 6581, 3621, 13167, 1086, 20604, 17631, 25025, 1565, 6045, 14586, 2328, 29679, 30865, 19827, 20857, 8033, 11825, 30474, 22182, 26689, 4134, 23066, 17418, 4512, 18952, 8258, 3259, 19323, 28580, 24543, 21955, 2394, 28164, 2354, 3480, 16001, 19985, +28505, 17566, 26030, 10324, 19894, 22941, 8421, 6953, 11031, 16454, 18779, 8737, 5869, 12700, 12872, 28935, 30118, 17384, 15119, 5609, 20643, 1674, 1421, 12419, 23630, 3815, 7815, 25984, 7295, 23816, 13202, 3033, 8614, 6464, 13357, 28508, 29406, 21778, 2694, 7669, 5465, 21473, 16406, 11334, 1405, 29278, 7501, 31524, 13894, 22620, 4365, 1770, 24295, 5786, 14189, 15157, 9602, 22004, 8373, 16897, 13053, 21575, 19930, 21667, +28040, 519, 17408, 24678, 22298, 20102, 32347, 27763, 8807, 15985, 6329, 10212, 12496, 13830, 8968, 26390, 3682, 13333, 28160, 27977, 19120, 9581, 10366, 28722, 31586, 18740, 12851, 11871, 7547, 14, 770, 2819, 533, 18178, 27497, 22831, 5512, 27076, 17826, 14319, 10294, 24155, 24532, 22790, 5217, 732, 16412, 8900, 14066, 11805, 4109, 418, 21386, 14476, 29140, 20204, 448, 9223, 32075, 7995, 9237, 78, 10815, 9771, +18256, 5544, 32602, 23769, 32621, 17661, 5320, 10147, 9048, 29852, 169, 14266, 30585, 16581, 23166, 11883, 28386, 27275, 12301, 17005, 8983, 8673, 4441, 9431, 17896, 3749, 17427, 27134, 3827, 28242, 4137, 22083, 1018, 3971, 13084, 871, 21632, 18405, 11018, 30681, 15489, 11187, 12179, 13306, 27769, 2577, 25189, 23387, 29852, 4722, 7624, 6068, 13395, 12066, 15499, 31292, 15815, 158, 25658, 19642, 28400, 29795, 8957, 29419, +998, 22042, 30290, 22631, 7679, 8541, 20544, 23168, 19728, 32723, 3707, 14729, 2532, 28896, 5349, 32384, 851, 12973, 5684, 14246, 25039, 21184, 12770, 8086, 21342, 5660, 27728, 16975, 2687, 3918, 13626, 3686, 25960, 11148, 26317, 871, 19689, 14093, 24039, 6650, 14048, 27746, 21379, 16580, 23875, 26728, 16196, 24726, 6934, 21881, 6204, 31973, 10297, 18975, 7292, 31639, 24635, 2252, 15846, 27323, 6170, 29472, 31009, 32130, +7853, 24558, 233, 27542, 5883, 24273, 1424, 19931, 19251, 22804, 3743, 10358, 16764, 19939, 2316, 23698, 9052, 8521, 22904, 19349, 27496, 30196, 18221, 19363, 32448, 1299, 13918, 5851, 30772, 12159, 5213, 5857, 3949, 5447, 631, 9832, 29720, 2056, 29763, 16203, 24860, 738, 26562, 8856, 20678, 28878, 32555, 29730, 4631, 22691, 16312, 32127, 20119, 1765, 18723, 19799, 3064, 32641, 25650, 1068, 12033, 30864, 6925, 15982, +3543, 7557, 25815, 495, 9613, 22810, 16698, 1705, 23549, 10492, 10561, 11459, 6603, 10348, 8421, 11234, 271, 24733, 10594, 20390, 26498, 29317, 7422, 29563, 29190, 304, 30631, 8455, 31168, 4789, 24438, 1943, 12346, 17485, 2438, 21959, 7527, 19137, 23664, 31076, 29629, 1457, 9767, 3464, 11806, 18189, 14699, 12077, 10154, 25293, 32468, 3885, 21842, 7122, 680, 18264, 7426, 31311, 26720, 5827, 3332, 18390, 7770, 15678, +3107, 10209, 4869, 10634, 29346, 28533, 8943, 26207, 29991, 18710, 29672, 9029, 4131, 11603, 21106, 14286, 4128, 20806, 18171, 25970, 27928, 18851, 11466, 2587, 17394, 5418, 8414, 20727, 23808, 16184, 3637, 26915, 26393, 8507, 4782, 22971, 4272, 13725, 16411, 1495, 32435, 13315, 10524, 3799, 24918, 31631, 18085, 29046, 19669, 3488, 22248, 14830, 22339, 946, 17417, 6965, 6365, 25831, 27692, 30173, 9247, 31330, 24321, 2873, +7069, 29103, 25844, 11341, 10060, 9487, 12837, 9727, 22802, 23361, 13526, 14952, 22224, 31611, 11230, 9126, 2331, 710, 23956, 24670, 1657, 8605, 31636, 8022, 1668, 26560, 5427, 10915, 25122, 29748, 13788, 32191, 26083, 6865, 10765, 3375, 16352, 23602, 13103, 6387, 14195, 26629, 21339, 3652, 25473, 32570, 12778, 27804, 512, 3966, 19707, 2169, 12571, 18575, 10191, 14239, 12367, 15619, 25154, 4722, 12599, 6175, 4145, 5915, +13040, 14910, 9290, 29392, 5744, 22393, 3011, 19940, 16255, 24351, 23592, 8960, 24153, 3602, 3996, 24665, 7568, 23703, 26835, 20139, 9510, 4258, 1610, 21878, 19877, 26764, 26600, 32477, 171, 30745, 5624, 13211, 12888, 14914, 9836, 18632, 4540, 12847, 5804, 20795, 4430, 29396, 29755, 28583, 230, 983, 20481, 7798, 24687, 14548, 27937, 1429, 18806, 29547, 23307, 5916, 23544, 17139, 5625, 23715, 15117, 11249, 4159, 28005, +26163, 13995, 13869, 30703, 26842, 19674, 18730, 31273, 16302, 15717, 27088, 16533, 16701, 14801, 24331, 8620, 29349, 19501, 10049, 15388, 16280, 589, 21304, 7056, 17728, 26929, 30772, 77, 5410, 2163, 28082, 31573, 16158, 9184, 29509, 10232, 28858, 15471, 8737, 12392, 31189, 3058, 28925, 15122, 17859, 20489, 23742, 14441, 7222, 1023, 29829, 23502, 1612, 18365, 30559, 19341, 12526, 28563, 19418, 17936, 30726, 14733, 16741, 14116, +23917, 13482, 24348, 20007, 28954, 318, 32399, 27375, 3376, 28557, 9729, 21235, 16278, 703, 2908, 23500, 1726, 32737, 14234, 3339, 18334, 12025, 22680, 30860, 7820, 9330, 16028, 5778, 24063, 2, 19894, 15212, 13484, 11475, 2451, 9670, 11793, 2083, 4277, 15169, 30640, 14006, 3636, 14150, 14709, 6545, 4882, 16436, 6514, 19116, 19775, 24849, 31142, 9687, 22941, 6194, 19017, 6202, 11973, 10313, 6204, 31867, 25525, 19688, +10574, 27977, 29359, 22367, 30060, 868, 4768, 27932, 14875, 8405, 9314, 29584, 14950, 14196, 13252, 21464, 544, 259, 13545, 31686, 9946, 3719, 5113, 28964, 9921, 17086, 6509, 16125, 16185, 32034, 3045, 26760, 27243, 32404, 16359, 24535, 505, 21128, 19699, 15380, 29533, 29013, 12196, 11715, 10441, 25449, 411, 10986, 25708, 13957, 9904, 2887, 17676, 15017, 31851, 27597, 32103, 5592, 10954, 15521, 4858, 13999, 9513, 32102, +13636, 25872, 23869, 14141, 14232, 10801, 29521, 10997, 7046, 8949, 22712, 17488, 1630, 23124, 28474, 27339, 4313, 5610, 30226, 21989, 20628, 29309, 16818, 19963, 2133, 27772, 2716, 6991, 9003, 12229, 6325, 22639, 5334, 30195, 4012, 19566, 8228, 765, 30564, 15274, 9715, 20508, 32762, 11345, 10864, 28468, 5916, 15177, 1311, 3374, 4398, 21939, 32683, 21216, 9134, 2048, 16220, 11851, 9040, 25224, 24080, 15365, 15095, 29414, +12792, 19108, 16213, 21020, 19873, 14009, 3527, 29588, 1749, 3521, 8166, 12614, 31990, 14082, 27791, 533, 17457, 32190, 22472, 17372, 20638, 31606, 19421, 4091, 10689, 28461, 29315, 2002, 11058, 11642, 31416, 23851, 30750, 14861, 12103, 17856, 28870, 15630, 14676, 30620, 19152, 22842, 10466, 18374, 4157, 5489, 18907, 21614, 4911, 8611, 6218, 25550, 7449, 25639, 29641, 18139, 21332, 26188, 20141, 32391, 5062, 18789, 23474, 3045, +883, 2809, 20901, 29753, 18440, 2809, 27605, 4824, 25652, 5303, 23198, 29809, 10793, 9337, 18655, 15704, 17948, 24873, 8486, 25397, 17745, 5359, 10768, 6309, 31547, 30909, 5932, 3842, 16931, 29406, 6887, 17814, 32216, 27788, 14799, 17888, 30597, 9637, 22712, 23481, 14940, 13142, 20522, 25733, 22479, 6409, 8670, 7659, 31283, 17156, 288, 16260, 22516, 11057, 22569, 21295, 9198, 28502, 25137, 26129, 25140, 32024, 11175, 24588, +27044, 25975, 9708, 24874, 2844, 32420, 15587, 17784, 12794, 3342, 10750, 2505, 9751, 19420, 10164, 8266, 3808, 10453, 24526, 26324, 21510, 14328, 14852, 30708, 10062, 7221, 24070, 2434, 6478, 2477, 27023, 754, 28452, 3963, 25628, 31296, 3616, 8448, 16313, 16410, 11790, 27063, 18916, 21541, 13715, 29080, 29808, 17523, 6765, 21566, 11080, 28275, 3126, 25932, 26216, 13188, 385, 17518, 15623, 6863, 19995, 9878, 7618, 15680, +13841, 478, 14208, 17457, 8926, 30521, 1100, 20716, 24816, 20016, 9490, 5763, 16328, 6530, 23287, 23094, 28096, 1599, 18601, 31223, 27531, 12049, 11643, 27916, 29567, 27266, 2012, 16795, 4376, 9630, 32475, 18218, 10108, 13915, 2907, 19035, 11669, 4007, 6983, 3717, 24023, 16473, 9481, 7584, 23003, 0, 30678, 18332, 1599, 16511, 16787, 29130, 28561, 28430, 24278, 25360, 22929, 26290, 9387, 27305, 3152, 9094, 12755, 13261, +23010, 15663, 32296, 1911, 19670, 6511, 5628, 10926, 22985, 15109, 18510, 13220, 15109, 16420, 31552, 16708, 163, 15571, 13070, 28724, 11234, 4581, 21317, 1395, 30871, 30704, 28700, 1256, 7031, 8688, 14517, 30041, 24351, 14045, 31952, 11253, 20556, 4812, 22179, 10773, 19922, 7921, 23994, 2263, 24341, 22778, 18972, 24505, 5582, 32042, 20461, 16816, 3855, 9010, 18211, 1959, 6947, 14143, 3215, 13978, 22831, 17732, 11251, 14414, +31777, 10435, 25668, 19565, 15247, 15079, 30339, 2401, 23001, 21565, 4665, 14574, 11575, 23637, 6311, 17157, 22911, 26773, 1205, 26767, 3015, 19416, 28726, 9962, 792, 31941, 23940, 23623, 16905, 2423, 5270, 15914, 12858, 30938, 2711, 28106, 13249, 282, 30507, 3482, 21847, 2404, 18057, 655, 26041, 24368, 17812, 16185, 18373, 19018, 10184, 21389, 5666, 6142, 31351, 6458, 5315, 22524, 30082, 22220, 24947, 2584, 5366, 5038, +754, 8077, 376, 14003, 8360, 30883, 17486, 30207, 520, 2775, 30862, 26561, 27143, 15907, 9978, 12749, 2157, 20162, 1370, 7823, 26304, 32721, 14282, 31619, 22477, 11596, 21071, 14657, 14180, 26437, 19695, 14934, 1747, 20071, 28937, 10107, 18186, 13655, 7546, 18706, 16430, 5641, 12500, 10806, 21548, 22478, 23555, 23705, 9873, 24925, 31528, 3409, 24878, 13042, 2261, 14588, 24638, 23332, 29245, 6050, 17002, 16172, 20984, 18749, +3475, 17154, 28856, 21661, 30809, 3634, 7600, 14472, 9275, 20100, 25278, 30823, 9810, 16065, 21760, 19683, 8222, 20521, 23093, 332, 795, 25354, 14920, 25434, 15918, 11397, 31484, 152, 27569, 19701, 18901, 31044, 4087, 14989, 19938, 2128, 18624, 27538, 16600, 27899, 14870, 9110, 25955, 24680, 25175, 14947, 11596, 629, 2700, 1921, 962, 3496, 27275, 15882, 28930, 10425, 27280, 27646, 10578, 22081, 14579, 29479, 20358, 18666, +11701, 7528, 20795, 30325, 2298, 4627, 25456, 17168, 13738, 18643, 9080, 6145, 823, 20676, 6775, 3523, 22597, 7737, 7019, 17104, 23619, 3181, 27530, 18131, 30828, 5340, 7445, 12639, 2051, 27803, 31306, 13752, 2563, 19333, 11309, 4861, 23960, 3998, 22029, 4930, 22641, 31109, 11076, 23464, 19018, 17851, 26988, 8847, 25588, 1239, 25952, 16439, 4421, 20714, 1803, 2481, 26054, 9248, 15120, 28105, 4283, 13658, 9090, 6846, +223, 20399, 11707, 24184, 24397, 968, 29114, 14271, 32077, 7422, 4967, 18327, 25273, 31955, 27175, 18093, 427, 20359, 1765, 4848, 8305, 3568, 7329, 1591, 12816, 22449, 29696, 17099, 3340, 6018, 23945, 3563, 26418, 2884, 27747, 18047, 3852, 24094, 32318, 3161, 31516, 4518, 21489, 24022, 3705, 15896, 9347, 4132, 3487, 11112, 8980, 11792, 14680, 16309, 13383, 27496, 5991, 10311, 11827, 9331, 16330, 3004, 12894, 9980, +5888, 7874, 28027, 9740, 31968, 27578, 12902, 30716, 32096, 1623, 21970, 3033, 17519, 31318, 7166, 21006, 9662, 16146, 30, 24343, 32456, 13413, 19071, 5679, 23724, 30899, 15010, 7286, 1135, 27904, 17266, 7024, 3010, 12526, 16764, 2210, 7336, 29666, 159, 6664, 31289, 22129, 9697, 16040, 20679, 16863, 4278, 30342, 242, 4308, 21917, 32698, 17721, 8220, 5609, 8678, 6351, 20619, 15964, 7487, 15755, 463, 14511, 18766, +12989, 31275, 20976, 20325, 28174, 21135, 26989, 26695, 10497, 3918, 9968, 31176, 20782, 14246, 28750, 21024, 18555, 17899, 20954, 3508, 26120, 26563, 12186, 32471, 14414, 28151, 7190, 30169, 28614, 21701, 16167, 8835, 20209, 4376, 29160, 15615, 25511, 23381, 9542, 3240, 27299, 19510, 1649, 15313, 989, 30399, 3569, 19544, 15531, 24523, 23052, 8883, 18318, 2471, 8586, 32732, 30622, 15777, 30134, 26468, 4710, 13533, 2535, 24919, +17909, 31695, 7766, 10653, 22308, 17309, 13893, 16839, 4051, 15542, 32153, 5040, 13174, 2954, 24584, 28705, 27478, 14869, 4820, 13028, 17340, 13406, 12993, 15194, 29183, 10359, 8894, 1126, 23892, 11429, 26045, 9034, 10356, 1044, 19687, 32664, 18353, 812, 16735, 22404, 16355, 16120, 27445, 29529, 19075, 19261, 25466, 13785, 1362, 30286, 26813, 18702, 10924, 7038, 1128, 7340, 17397, 10022, 8466, 8522, 21451, 1743, 17556, 31807, +2787, 4475, 31703, 21140, 5287, 15671, 10777, 21642, 31791, 5454, 18403, 18098, 24715, 11101, 31883, 26078, 8619, 25929, 12012, 19544, 199, 13141, 26884, 17597, 23163, 2582, 26119, 11847, 4325, 10907, 10886, 7113, 15382, 9822, 28253, 20669, 25493, 6262, 9544, 24516, 11716, 27947, 9847, 3664, 6281, 8962, 29742, 14900, 2123, 8986, 1676, 2323, 22127, 28560, 19920, 12523, 31142, 13271, 24370, 2700, 24178, 2488, 9813, 6792, +12310, 5298, 27461, 5035, 11561, 4237, 29552, 23277, 32185, 6631, 26941, 5698, 15593, 23915, 20598, 17717, 134, 22275, 20040, 22261, 18067, 7192, 2016, 16442, 20463, 26386, 19142, 11873, 28875, 28955, 18665, 8417, 1485, 13358, 13453, 13046, 17596, 10237, 3556, 17013, 16868, 30497, 22711, 32461, 21645, 10541, 17410, 21779, 48, 4682, 11272, 18116, 11874, 13289, 1790, 32337, 6907, 20932, 11442, 3014, 17119, 30107, 11432, 18604, +10698, 24885, 31651, 28294, 2354, 2439, 12539, 19222, 168, 2482, 18915, 21813, 13023, 3558, 10824, 13072, 8240, 22097, 31188, 20115, 2618, 210, 19684, 9525, 21142, 31127, 12540, 5493, 28466, 23972, 24097, 6396, 16089, 22980, 1922, 18443, 25419, 14461, 4897, 25588, 16943, 23812, 14633, 29967, 27370, 25458, 10271, 2843, 14787, 8691, 22958, 17405, 8901, 9874, 26930, 30043, 8233, 6702, 2768, 3932, 30674, 26865, 10328, 13995, +17078, 12251, 32438, 9729, 26712, 4567, 2549, 10888, 28380, 17183, 8087, 22982, 9873, 18358, 25825, 24660, 27049, 16015, 9297, 3182, 25890, 3459, 457, 1355, 10162, 3225, 5287, 8068, 30090, 15616, 22064, 14400, 27867, 21734, 24130, 21811, 26302, 26679, 32699, 21914, 11094, 8018, 12128, 20967, 26376, 5186, 12859, 20657, 21201, 22156, 23839, 14323, 25616, 24296, 15679, 3010, 27521, 20966, 11078, 24844, 3814, 374, 6476, 31681, +22109, 30606, 20725, 15643, 24518, 20656, 4789, 2844, 28675, 16917, 23812, 22283, 22103, 3903, 10173, 10537, 26060, 1244, 24860, 18908, 25541, 7771, 21918, 20294, 28738, 228, 12370, 32552, 603, 18847, 31466, 22712, 16685, 19423, 5587, 8435, 7311, 10376, 11280, 3218, 27293, 2324, 25502, 16629, 6227, 2907, 27166, 32287, 4151, 19258, 18427, 29692, 27030, 7577, 17219, 23000, 7806, 29589, 22784, 8409, 15668, 21482, 31121, 32354, +8137, 3940, 8021, 15449, 14316, 19301, 18667, 8841, 21625, 11401, 25470, 27853, 14308, 19868, 27372, 18460, 6359, 13032, 15384, 621, 20609, 32603, 23621, 28415, 29425, 13637, 4056, 12325, 2352, 2409, 11911, 10489, 6349, 19933, 25938, 20665, 6466, 11838, 29507, 28092, 23239, 22209, 23177, 4780, 9310, 17781, 23240, 15669, 30813, 5856, 16290, 18655, 5692, 7143, 14302, 2349, 20780, 18359, 14674, 23132, 20768, 26586, 854, 27118, +13751, 26792, 15015, 20217, 5862, 11754, 15541, 29102, 1196, 5950, 1114, 10506, 23732, 24354, 26175, 21777, 30210, 9697, 7664, 3134, 16840, 21967, 5483, 4852, 7558, 20158, 27985, 28326, 13976, 28839, 22676, 27727, 22863, 4924, 15176, 28726, 16678, 30718, 25060, 17874, 3900, 26174, 28380, 27632, 17760, 21787, 16642, 15202, 31484, 24306, 18337, 15556, 13505, 23820, 20409, 21063, 11210, 15626, 16622, 25186, 11697, 6530, 20145, 1792, +11454, 2554, 30518, 28133, 504, 22810, 13239, 4404, 16216, 8852, 32037, 1208, 30639, 15911, 16411, 29356, 7449, 1980, 12144, 20955, 25800, 32553, 9250, 4243, 15411, 25872, 29429, 27108, 32403, 16807, 28901, 11089, 19361, 26651, 6454, 19865, 16694, 19694, 24269, 142, 28546, 23538, 1351, 26417, 6681, 17762, 23005, 14131, 19742, 2382, 2318, 12774, 2167, 11568, 17017, 17579, 4673, 13679, 11919, 4308, 30486, 8052, 15397, 17079, +1936, 21852, 4176, 18630, 8778, 28445, 18772, 4556, 19216, 20123, 30973, 25897, 5117, 21211, 7260, 24859, 23593, 9578, 4866, 25760, 21147, 21883, 10571, 25820, 2794, 22491, 30128, 512, 30543, 12757, 17591, 32479, 1841, 21767, 18341, 10619, 17445, 4346, 15175, 3893, 24469, 13381, 29790, 29587, 1824, 4283, 21678, 25417, 13861, 26544, 18409, 2240, 15660, 28981, 28060, 18454, 18704, 25420, 18967, 16479, 5410, 3790, 16191, 7251, +25558, 1764, 17871, 10235, 6110, 278, 14128, 30580, 13659, 11150, 27399, 15483, 15433, 16309, 8132, 29295, 10086, 26542, 31535, 25746, 22755, 26828, 11432, 8691, 19480, 30399, 25170, 24890, 1422, 8593, 32142, 26980, 10358, 17245, 4447, 16468, 17523, 18575, 14280, 31183, 29725, 8911, 13898, 12391, 25221, 22031, 8918, 2539, 15805, 7685, 28285, 5792, 1745, 6949, 14483, 21226, 4581, 6885, 13348, 6003, 15479, 12722, 215, 25837, +29967, 4662, 9537, 14723, 23237, 23818, 13138, 20194, 32729, 27036, 32585, 25182, 16299, 8735, 27721, 32104, 16421, 23238, 5128, 18166, 30188, 19611, 6624, 2001, 26497, 19973, 8004, 9208, 32695, 8219, 2277, 29895, 12881, 11814, 11850, 3350, 2864, 24988, 23544, 2826, 19256, 23362, 28008, 2788, 32097, 22962, 2124, 15750, 13432, 7253, 1149, 10852, 26864, 7773, 12853, 20593, 27746, 20857, 29801, 27674, 29076, 32078, 24801, 9189, +11125, 3883, 12539, 13989, 28871, 3316, 16815, 15359, 26678, 12056, 18147, 26007, 2250, 20272, 8990, 15682, 27525, 10139, 26535, 21621, 17912, 6620, 9447, 12891, 27478, 6480, 7797, 23786, 5791, 32598, 208, 16916, 3713, 12747, 30905, 32584, 16063, 14953, 15175, 9973, 27009, 555, 3213, 29259, 20827, 12203, 12173, 15584, 22342, 5940, 4437, 7486, 12561, 13884, 20377, 7271, 20365, 28174, 31057, 26156, 28004, 31265, 10304, 31717, +11245, 8441, 31533, 27308, 23394, 13941, 4514, 17635, 14496, 7727, 14126, 2555, 19930, 26300, 18139, 9504, 32240, 22576, 16990, 12033, 3693, 4600, 19304, 24058, 6, 17594, 17446, 28011, 16091, 27750, 26960, 27336, 3423, 25726, 21877, 26818, 6899, 26391, 11685, 21395, 1350, 25812, 23950, 21280, 19344, 9321, 30784, 18816, 31897, 15006, 30850, 2822, 19606, 17386, 26880, 19613, 2212, 11558, 14856, 18304, 6540, 9048, 12872, 9964, +2006, 1981, 4014, 8905, 28372, 15699, 30300, 29722, 8743, 21482, 18234, 28087, 30803, 16250, 14136, 29933, 31257, 12218, 32755, 18095, 29604, 26868, 4940, 31817, 5658, 19796, 17353, 12199, 28845, 30225, 22163, 30851, 32207, 26177, 6989, 27811, 9108, 4521, 24766, 17852, 26004, 10232, 13171, 24039, 26483, 27307, 21204, 24972, 6757, 21192, 10299, 3594, 15292, 15240, 2643, 20950, 2268, 19996, 381, 31113, 17453, 22544, 29197, 16892, +15953, 3418, 11936, 25062, 7939, 3934, 10146, 1175, 14166, 23317, 25215, 7881, 17857, 13651, 85, 24614, 2075, 10385, 28208, 17367, 25625, 30851, 5550, 27893, 18079, 5931, 26239, 2765, 28476, 22668, 19657, 11661, 26086, 31593, 3955, 1257, 2759, 14101, 2433, 16926, 4651, 27648, 24807, 22508, 8531, 24893, 14354, 10607, 2510, 9795, 27974, 28135, 7878, 756, 23260, 25958, 6688, 16731, 28723, 2396, 6631, 15612, 14057, 32717, +14438, 18013, 1207, 17197, 32114, 3640, 1355, 3997, 31288, 26163, 26505, 7051, 18288, 8092, 17658, 20798, 17887, 12865, 16165, 25765, 13621, 6657, 18955, 20309, 23389, 14910, 22705, 30020, 30523, 3995, 29970, 12193, 22008, 31177, 29390, 21354, 2049, 30746, 25352, 569, 24141, 19089, 7620, 9661, 27181, 25279, 30459, 12300, 5376, 13856, 5298, 18997, 20513, 24253, 6539, 11134, 6396, 29244, 8387, 4151, 471, 5589, 16344, 22479, +3998, 12966, 11066, 6047, 10944, 3650, 6616, 2317, 22739, 14236, 11978, 17153, 6747, 9669, 29453, 12123, 23525, 1983, 31121, 11271, 26237, 4892, 22405, 32633, 1368, 30792, 4016, 1840, 3613, 20360, 24319, 7611, 558, 2617, 13658, 11503, 6267, 20274, 13820, 29007, 1743, 25799, 13392, 8490, 2700, 10077, 20614, 26226, 12061, 18967, 4729, 5530, 23859, 27134, 5395, 25227, 25159, 9411, 27067, 28772, 29771, 18619, 3616, 30329, +21236, 17274, 9064, 27504, 4781, 22885, 23743, 6524, 15916, 4367, 15014, 18616, 14444, 2860, 12074, 26505, 21827, 16803, 32035, 12918, 11170, 4662, 5378, 3561, 14073, 32445, 32333, 11076, 18296, 3181, 8638, 6765, 20456, 17702, 1501, 25237, 7819, 25244, 31761, 23735, 29611, 14007, 9584, 11287, 16868, 21658, 5025, 5927, 5694, 4292, 18846, 16864, 8955, 24224, 20425, 23028, 23901, 19990, 1337, 9430, 23172, 9975, 16195, 10860, +27677, 17696, 3329, 2729, 10172, 2322, 26464, 7015, 16329, 3280, 18302, 429, 24939, 23327, 6357, 30633, 27620, 25203, 14729, 3807, 16659, 2386, 26835, 7792, 22376, 28172, 17222, 12780, 5379, 649, 23640, 289, 18345, 26969, 3018, 28517, 29291, 29482, 2764, 12853, 32763, 21067, 13282, 24934, 11626, 19639, 22799, 6478, 12074, 4760, 10285, 28733, 7146, 4353, 3758, 29522, 32525, 20980, 9535, 5137, 21630, 407, 5426, 7207, +27377, 8444, 2957, 23900, 5158, 5721, 3985, 5153, 26788, 17268, 30087, 5647, 4139, 20118, 12125, 16214, 24878, 22411, 12179, 32024, 26764, 15937, 28779, 26521, 4150, 5546, 31658, 25780, 5953, 4316, 219, 562, 12760, 3176, 24463, 17919, 8898, 28448, 23072, 2918, 12948, 20392, 8565, 17088, 7742, 20691, 534, 32621, 10334, 12713, 31877, 4330, 28651, 27888, 30851, 33, 666, 29742, 25813, 6620, 1290, 26032, 7182, 14051, +29209, 31645, 31970, 5339, 27326, 22274, 8257, 7506, 9898, 16823, 24594, 17641, 4746, 25128, 17494, 15080, 5074, 16603, 19410, 957, 11724, 17493, 990, 12390, 14467, 26803, 19010, 15758, 20067, 26193, 29809, 16508, 25070, 29011, 21847, 19628, 18517, 30105, 27135, 28416, 14160, 18961, 13289, 18906, 11322, 30783, 1218, 16396, 14618, 20628, 17353, 26342, 5353, 18343, 5965, 19821, 12378, 24975, 2811, 32445, 18400, 32620, 16186, 10703, +28863, 5265, 30331, 14612, 2602, 24698, 10260, 16762, 10892, 23549, 2900, 22214, 21564, 4118, 5842, 3415, 24746, 23195, 29757, 30100, 8770, 2954, 17153, 21148, 27930, 19964, 20825, 13562, 19816, 4243, 24265, 15911, 9509, 21829, 30523, 12111, 13759, 8016, 28874, 24651, 31565, 31774, 14097, 20362, 3125, 19939, 23777, 27871, 10366, 20766, 25203, 19136, 23721, 9588, 7516, 18883, 29552, 28342, 32445, 16600, 32585, 23943, 32511, 9326, +13004, 30267, 21438, 26763, 5515, 17544, 18647, 4312, 16550, 32744, 24674, 19675, 19916, 15683, 14779, 30282, 3682, 7214, 16651, 27403, 16803, 24167, 13518, 13587, 19741, 13195, 30188, 19559, 4370, 29931, 28885, 17374, 27430, 17555, 11370, 177, 2331, 30017, 4490, 18882, 29993, 29164, 5789, 17141, 12080, 20568, 14656, 15762, 27783, 31307, 10397, 11818, 22706, 23915, 25405, 9680, 4342, 22825, 29239, 8713, 19989, 25356, 26087, 14651, +10144, 4689, 14829, 12475, 1938, 19319, 31357, 31932, 15715, 4379, 16305, 27795, 24947, 30961, 10789, 19962, 29500, 21186, 31780, 19439, 12333, 24418, 29119, 16676, 14475, 25590, 25389, 1696, 18178, 18708, 16348, 28322, 23398, 31177, 8030, 25336, 17728, 6619, 24500, 675, 10998, 8038, 28471, 3178, 6231, 6492, 23140, 2964, 27679, 22153, 22403, 7244, 13803, 18754, 23920, 28278, 11576, 16541, 29975, 29754, 2482, 13555, 25309, 25880, +11964, 571, 18448, 29692, 7190, 10181, 30367, 18189, 18219, 26070, 21367, 24450, 32563, 11739, 27414, 27474, 1124, 17049, 1950, 14927, 3035, 25871, 10438, 14611, 9644, 7645, 11598, 12126, 21200, 4139, 5238, 396, 4710, 23687, 30088, 11900, 1100, 27687, 30089, 19319, 20990, 18688, 11001, 20785, 30428, 5648, 15491, 31552, 22697, 17441, 13712, 25733, 10544, 24150, 7576, 20189, 31795, 19174, 32315, 20227, 23313, 4786, 20623, 28023, +28473, 17943, 7156, 29573, 12862, 4477, 16124, 1084, 23166, 27125, 21869, 20826, 5, 4592, 19610, 22703, 22034, 554, 15668, 32578, 24704, 23244, 19999, 23731, 9651, 19547, 11190, 196, 24333, 31813, 28220, 20038, 16988, 2608, 16843, 29851, 7085, 199, 30935, 30251, 27324, 20037, 18309, 27330, 24629, 5152, 17265, 13895, 5706, 165, 13706, 30411, 23409, 937, 21374, 292, 20484, 32565, 489, 12049, 31610, 28709, 32087, 15831, +31317, 16162, 12914, 5634, 16361, 11081, 3118, 10918, 31118, 21427, 5480, 22980, 26579, 22745, 4107, 32286, 22910, 17813, 29929, 13551, 18751, 18535, 13844, 6467, 18332, 14333, 18517, 17175, 10274, 17836, 238, 8823, 1231, 13152, 14457, 17592, 24233, 17575, 28510, 22584, 6235, 1222, 12796, 46, 23967, 16903, 32332, 14109, 1949, 29493, 27661, 20700, 15261, 8737, 27167, 825, 23070, 12916, 18000, 576, 30753, 18238, 9399, 31984, +31390, 23856, 16808, 22856, 8664, 12551, 12672, 14899, 13773, 25468, 14945, 4973, 9603, 14510, 19082, 11552, 11235, 13975, 32252, 26496, 22712, 26652, 27322, 13014, 6800, 12554, 13590, 4785, 30793, 22989, 4001, 29415, 14078, 20810, 19503, 22742, 593, 32175, 4873, 14366, 24875, 19818, 19339, 1711, 1560, 5654, 13263, 12796, 19629, 12748, 6524, 9574, 6632, 1078, 22588, 13432, 13633, 3411, 18218, 11658, 26400, 22219, 8305, 7710, +10261, 27809, 30452, 10854, 27216, 2557, 25221, 19324, 22376, 11792, 21035, 23936, 17446, 1530, 3964, 4308, 14278, 10489, 13882, 20910, 11567, 3702, 1575, 25200, 7113, 19793, 4090, 746, 9244, 12396, 8456, 19506, 7437, 6141, 30360, 1885, 8698, 22813, 21209, 31074, 1838, 9476, 22243, 19284, 11007, 26207, 23592, 25285, 3928, 4706, 13428, 15496, 8409, 15003, 7928, 15522, 2028, 12019, 16268, 11272, 24415, 24725, 30778, 31852, +30866, 28371, 969, 6796, 18416, 22179, 5103, 20254, 31655, 27346, 6771, 9894, 20785, 30363, 2412, 24714, 2302, 15840, 7442, 10711, 30843, 15370, 26233, 103, 27389, 9734, 11375, 19036, 1691, 9386, 18120, 32557, 4989, 19090, 6585, 23405, 8501, 11688, 10892, 7388, 6266, 17663, 17283, 27052, 15258, 19695, 18998, 17560, 2767, 26440, 28271, 842, 9042, 21737, 945, 3664, 31471, 12320, 22700, 394, 21706, 8053, 183, 26695, +27143, 6768, 17333, 2876, 18457, 28225, 10264, 24723, 13120, 27547, 19007, 28378, 14474, 5237, 13171, 17241, 31677, 8674, 18083, 7952, 30411, 19028, 11616, 29114, 31349, 1548, 29508, 20287, 9601, 29691, 14215, 3976, 3692, 31548, 6852, 22149, 27005, 17117, 14104, 7357, 11896, 344, 2967, 26371, 5581, 16138, 10844, 4491, 24813, 28928, 12443, 22456, 15188, 24059, 18803, 13769, 25607, 15543, 1289, 2441, 12467, 15504, 6417, 16159, +14284, 13270, 5540, 8521, 30387, 19644, 15878, 9515, 19988, 18845, 3118, 25570, 2216, 13963, 30061, 27029, 10123, 9736, 16717, 25311, 1027, 2752, 6313, 26634, 18296, 7602, 29075, 30763, 23106, 2725, 14154, 4622, 15995, 19694, 13143, 13614, 6570, 29021, 23129, 26559, 15098, 26248, 19361, 17314, 7443, 16654, 11575, 17566, 26390, 28293, 10109, 27417, 31045, 16422, 21283, 16573, 24024, 17591, 14568, 14362, 20316, 28722, 18984, 3543, +15648, 32127, 17157, 22219, 28380, 7518, 16010, 10711, 998, 2603, 28025, 8441, 19257, 6833, 26007, 12879, 2358, 3349, 7528, 635, 19771, 28811, 17209, 11028, 13634, 31777, 25390, 1182, 27732, 11607, 4725, 10612, 10966, 21882, 63, 6579, 29401, 16073, 17290, 30399, 18676, 12547, 6073, 5165, 19380, 32080, 18044, 21738, 2661, 25572, 22374, 22433, 21616, 6815, 693, 2482, 5824, 26083, 3665, 788, 4922, 8390, 11401, 15889, +30273, 11464, 22468, 26906, 27538, 6990, 24537, 13446, 19537, 30610, 18612, 6150, 29923, 3888, 27888, 32584, 29461, 17494, 22249, 18309, 24309, 22942, 20791, 30134, 16258, 24456, 30922, 21180, 79, 9555, 4301, 30352, 21020, 26769, 24490, 15790, 991, 16259, 29236, 20529, 14102, 15080, 26679, 11257, 18969, 21799, 11073, 15662, 6526, 555, 1203, 30835, 23497, 21994, 28201, 6987, 13683, 26356, 28168, 13762, 3143, 32469, 11346, 24163, +26471, 3068, 7185, 27462, 19327, 3654, 15223, 661, 18734, 9134, 11918, 4935, 30934, 22992, 20597, 4692, 23547, 21800, 2759, 14276, 11027, 30961, 21264, 24710, 24549, 16664, 5704, 27692, 16365, 17050, 19088, 10068, 20118, 26273, 4763, 6677, 29927, 19986, 7339, 15894, 29121, 19257, 20829, 27287, 9481, 8659, 31979, 260, 30459, 1970, 14537, 8718, 163, 3033, 660, 24712, 19697, 6364, 19637, 3294, 23414, 5957, 13363, 10764, +32230, 18126, 17442, 29390, 5344, 24781, 12516, 1697, 11270, 577, 28984, 20752, 9236, 28195, 21012, 6928, 30166, 2781, 15646, 30329, 5814, 16307, 22274, 25511, 22671, 9143, 28806, 13318, 15100, 9401, 24082, 14562, 27527, 8756, 11184, 103, 769, 23700, 1801, 12040, 24278, 30785, 24, 746, 26213, 21036, 7674, 23611, 23818, 23321, 21172, 29632, 6860, 10678, 22376, 29531, 19821, 18414, 10081, 2153, 27815, 1396, 16716, 22574, +10152, 27900, 22677, 10922, 18833, 24478, 22962, 10343, 22496, 22986, 11089, 15941, 11254, 18764, 6784, 2304, 9317, 27956, 31937, 16177, 5867, 21545, 12940, 25688, 7191, 23022, 27842, 2238, 24418, 11790, 24812, 1802, 6922, 14721, 12724, 25755, 6432, 2918, 3330, 28928, 25904, 14420, 12101, 4391, 416, 18885, 6695, 9733, 14073, 5864, 25910, 19940, 27409, 6082, 12861, 1832, 29104, 7935, 4070, 20754, 19725, 28882, 22557, 26647, +10836, 2513, 19635, 17268, 5432, 22965, 13428, 31336, 4617, 25529, 2959, 5033, 11646, 9655, 14766, 25719, 15519, 7908, 12892, 10161, 13991, 25753, 11993, 10327, 920, 16064, 31082, 20645, 12178, 20871, 14524, 23014, 23384, 1391, 7514, 28816, 24357, 20942, 27385, 28974, 13703, 30344, 1240, 25349, 7231, 16006, 18301, 22751, 23915, 31193, 144, 5138, 24178, 12137, 15465, 25098, 28201, 13779, 12975, 7612, 1882, 27499, 30626, 25267, +28891, 5373, 21315, 20480, 26315, 15932, 16686, 7251, 13509, 17926, 32600, 20740, 1165, 18133, 10723, 25080, 16558, 10867, 30218, 7968, 23005, 12915, 298, 18438, 26695, 13273, 26050, 28577, 8005, 23909, 21076, 4128, 29282, 9624, 24608, 22829, 25556, 8526, 30080, 6297, 26453, 29913, 27038, 27618, 15278, 4993, 19930, 31837, 15861, 17380, 7037, 6098, 30295, 7336, 24536, 24222, 20609, 17819, 20032, 28614, 8960, 8340, 32742, 5474, +17964, 24582, 28303, 10753, 341, 25616, 17050, 26794, 22761, 11320, 21644, 5271, 16314, 8806, 4340, 32175, 26186, 11378, 5505, 23713, 18714, 30041, 15168, 6555, 15092, 2432, 2402, 24052, 10772, 2376, 29526, 28737, 26959, 25062, 6722, 27300, 17910, 23772, 21326, 7903, 2325, 10202, 13174, 18639, 19008, 17515, 18046, 12426, 28893, 23551, 3371, 14839, 20824, 18539, 21394, 3149, 20971, 23796, 27201, 31744, 26173, 23960, 27713, 20364, +16254, 1667, 14896, 1396, 25439, 3454, 9299, 27764, 13656, 22473, 13635, 32664, 7220, 31681, 12322, 3345, 22464, 15693, 18184, 10521, 1465, 6811, 13670, 22436, 30607, 8103, 21412, 24012, 32063, 16357, 11608, 15549, 18024, 26504, 16945, 10696, 29958, 26244, 5692, 10846, 15950, 19328, 10742, 23170, 18241, 23064, 26516, 7938, 5990, 11932, 18459, 7455, 18743, 32129, 29891, 16583, 7464, 18536, 7827, 6760, 2125, 19436, 22309, 20150, +13172, 6487, 30846, 10363, 32731, 3770, 21209, 15913, 23098, 31952, 6316, 8572, 22248, 64, 16510, 28238, 11996, 2201, 2925, 30740, 1562, 49, 14555, 9026, 18585, 22382, 15786, 20710, 9050, 5328, 8092, 22223, 11815, 6170, 32586, 11778, 9941, 21027, 27692, 271, 20211, 1240, 8843, 9692, 1304, 25353, 5162, 13300, 27554, 8088, 11272, 29116, 8137, 25827, 5375, 26722, 15442, 21161, 14664, 24492, 26489, 22757, 13947, 5536, +28927, 13765, 17315, 6100, 2025, 12239, 6372, 22236, 13479, 15215, 31928, 14783, 7801, 4323, 28083, 2587, 12411, 6588, 31704, 20548, 32415, 4311, 14502, 15089, 25472, 29166, 6814, 19194, 19155, 20761, 24730, 15315, 1759, 9277, 21415, 3784, 21516, 27787, 26020, 2227, 10235, 25181, 17010, 18036, 29504, 12326, 20623, 9147, 18914, 19559, 29695, 18561, 23870, 11429, 883, 16575, 7827, 7697, 3001, 26983, 28458, 27731, 9530, 30217, +4241, 30945, 1233, 25757, 25965, 27254, 27985, 3432, 19667, 12227, 21468, 16403, 24553, 9323, 25550, 10699, 28883, 22477, 29261, 19985, 1138, 30144, 3792, 8965, 5073, 6793, 3180, 763, 1757, 12710, 30981, 5998, 10888, 32214, 31755, 4085, 26700, 26972, 7517, 13599, 6432, 28985, 30002, 30985, 5540, 22784, 8917, 1655, 12493, 5410, 21641, 13631, 2786, 25433, 22597, 7859, 32227, 25777, 8622, 1216, 5720, 6835, 7214, 16608, +6282, 6201, 20693, 214, 406, 28210, 13814, 6838, 24427, 11048, 5055, 29967, 1065, 13972, 31623, 13558, 19382, 20496, 27190, 22168, 13161, 17019, 30027, 12620, 10028, 5882, 13836, 15748, 12717, 21050, 32356, 18999, 27252, 20281, 19214, 27658, 15723, 260, 1728, 7382, 11308, 6783, 4582, 12373, 20756, 3437, 25932, 7370, 23933, 20354, 29539, 4326, 4605, 26798, 16947, 14633, 32680, 30783, 30382, 12630, 19066, 29970, 31629, 13550, +17484, 18075, 8440, 439, 18335, 10168, 7822, 29644, 16951, 12404, 9249, 4939, 15841, 2413, 12310, 7006, 22767, 9081, 11332, 27372, 3111, 28279, 9238, 3024, 26295, 6852, 15654, 12593, 4054, 14515, 26143, 21538, 32591, 1815, 21978, 18158, 11983, 29800, 15034, 28934, 9436, 24284, 1106, 25277, 26697, 13416, 32283, 16697, 22497, 10847, 11301, 25608, 6359, 20539, 28632, 32654, 27391, 11518, 12479, 31446, 26034, 5854, 20216, 25857, +7669, 9426, 11247, 19652, 6458, 26282, 15818, 15894, 17798, 16924, 8403, 11727, 30340, 7918, 28424, 20069, 18766, 6958, 12910, 25125, 27497, 8774, 25011, 22121, 20293, 4722, 20799, 13559, 10576, 8247, 6648, 18245, 17674, 17895, 5129, 24132, 11409, 20947, 7259, 29207, 5104, 15662, 8167, 2676, 23581, 3823, 22746, 9579, 10781, 2888, 1936, 5511, 11662, 26947, 27632, 31955, 31669, 15663, 12746, 9477, 23910, 19394, 27722, 8816, +4522, 83, 181, 15931, 21030, 7440, 12371, 26134, 23102, 20538, 28811, 13915, 24361, 18789, 23494, 2375, 21677, 25430, 7886, 571, 19609, 2750, 32527, 18510, 18413, 12505, 27987, 9555, 31900, 22941, 18372, 3654, 23024, 18553, 19585, 11287, 25993, 31956, 4653, 16327, 19726, 696, 30243, 11320, 19485, 20969, 13695, 8394, 13632, 21581, 8966, 473, 24331, 8725, 18984, 9976, 21230, 14203, 19531, 20362, 4377, 5135, 24016, 27401, +23688, 10834, 5920, 16913, 10022, 10574, 473, 29749, 11270, 30716, 8301, 30756, 18917, 21996, 6382, 32549, 10809, 15348, 255, 2372, 24073, 19239, 12348, 12536, 674, 31879, 130, 5051, 4247, 24147, 32453, 27935, 2213, 5605, 12081, 12235, 16179, 12554, 9216, 27450, 10502, 17517, 25438, 29419, 6745, 31820, 29201, 17554, 14401, 29456, 19926, 5706, 15927, 32274, 18242, 16601, 31386, 18373, 21653, 2865, 9752, 21338, 30800, 11965, +26943, 10113, 24200, 10355, 22667, 649, 5037, 401, 18166, 30475, 29821, 24912, 29527, 26254, 9698, 11160, 22942, 29625, 16867, 6101, 29131, 2341, 22702, 27749, 20714, 11587, 30614, 30466, 157, 28647, 9663, 27101, 5992, 1096, 4688, 28660, 1745, 9725, 29061, 19911, 7432, 26114, 12055, 4191, 19600, 21754, 15352, 9774, 18611, 32219, 15875, 14974, 1792, 5810, 9956, 22507, 17397, 7802, 20205, 17555, 3681, 29869, 11888, 9674, +30965, 16576, 5566, 32710, 26301, 1859, 19853, 965, 27974, 31909, 5156, 14806, 20895, 20508, 24581, 6738, 19959, 7688, 21712, 21752, 13498, 31668, 11491, 30896, 6703, 31696, 15683, 10384, 28797, 27571, 20058, 26994, 11379, 25624, 26936, 4912, 27484, 14022, 5877, 22690, 13163, 11033, 4728, 1290, 31542, 29309, 8028, 18733, 4230, 29740, 7717, 17728, 28641, 19208, 15856, 2576, 18137, 31539, 12960, 14166, 26342, 251, 8393, 4953, +25875, 2561, 9865, 20591, 16583, 15742, 10513, 29746, 26776, 15242, 31036, 25550, 11783, 6296, 11515, 16013, 3269, 19233, 974, 31910, 5673, 16830, 1718, 23810, 15602, 14678, 5209, 9176, 14929, 13602, 14130, 8037, 16163, 23995, 28628, 32747, 6970, 6374, 29725, 978, 21616, 27994, 26528, 631, 1522, 5275, 16645, 4791, 24508, 17619, 3933, 30182, 1681, 5651, 21224, 17283, 20330, 26433, 26460, 2491, 7267, 7822, 10528, 23431, +31817, 6389, 23410, 6019, 12763, 20367, 6997, 1611, 15593, 757, 2242, 17116, 6033, 18887, 21907, 30541, 3738, 25841, 27955, 5420, 31492, 16412, 22703, 19054, 10077, 16395, 21546, 17345, 24217, 32074, 8008, 23267, 5695, 31418, 29286, 18458, 19017, 3516, 20069, 1843, 4273, 22312, 18959, 10306, 8431, 8098, 8080, 12170, 1171, 3267, 17590, 32664, 19679, 7525, 18950, 29757, 23921, 7728, 14334, 15370, 7035, 22342, 5869, 12730, +20992, 2388, 31189, 7241, 5904, 18490, 9084, 10177, 8034, 28043, 20484, 16466, 3374, 28564, 28636, 4545, 31831, 13458, 4441, 18743, 20983, 23392, 15732, 12136, 31120, 30066, 27507, 5387, 19640, 608, 18118, 7864, 2996, 16539, 15105, 8900, 2261, 24190, 19078, 10296, 19465, 6794, 26762, 22839, 2590, 22630, 27385, 1653, 3320, 31826, 20396, 24303, 22450, 3360, 3672, 20803, 658, 31179, 26190, 20298, 31787, 11540, 28162, 2016, +28079, 10500, 10916, 30341, 1922, 29994, 7869, 21387, 4020, 1863, 11459, 6610, 24493, 6076, 8264, 27813, 5134, 28660, 19348, 27585, 32021, 23020, 15620, 32679, 21431, 9042, 20210, 20451, 20583, 15604, 22467, 15894, 26104, 615, 13467, 28026, 30610, 21336, 16646, 1862, 23199, 28105, 8473, 14924, 1413, 16737, 9969, 6547, 12629, 29318, 1364, 11882, 19570, 16984, 11794, 8234, 26027, 32004, 28685, 13842, 14840, 18384, 29736, 8177, +18999, 10436, 3435, 16841, 31772, 20081, 18704, 22204, 15418, 27177, 4360, 16831, 11146, 14330, 23379, 23775, 10880, 24743, 2890, 30450, 8960, 14684, 5916, 2219, 13920, 1833, 16061, 28760, 20217, 13029, 4169, 6449, 23465, 7605, 23290, 22470, 27686, 9226, 11906, 10337, 3635, 16266, 27168, 14781, 30596, 17779, 5789, 8708, 9755, 8679, 6391, 18715, 23363, 12307, 20934, 4515, 14141, 4227, 507, 1590, 17256, 4677, 8039, 7954, +12282, 31330, 30424, 7200, 7788, 9562, 17537, 11424, 25828, 11938, 26205, 23657, 29717, 31994, 32365, 6704, 7905, 5988, 25419, 31268, 18296, 13585, 3015, 32437, 17812, 3523, 1259, 2301, 8200, 9299, 10255, 20482, 7861, 7911, 27682, 15649, 17473, 12452, 27073, 10533, 24390, 20511, 1422, 21339, 19737, 1020, 28044, 27643, 7008, 20695, 26143, 25304, 1513, 29159, 24973, 19325, 32682, 26233, 21626, 8114, 2764, 31881, 28596, 10625, +7024, 23510, 26274, 24497, 3194, 20580, 2263, 27584, 8323, 3685, 16156, 28060, 4705, 11432, 22935, 11714, 32127, 16311, 4250, 872, 12702, 29224, 20198, 12616, 22689, 9056, 20730, 25453, 8170, 16558, 3310, 15194, 7300, 29584, 6924, 10495, 17396, 9187, 5311, 25719, 12872, 21467, 21012, 17578, 131, 11179, 29292, 32259, 27490, 774, 363, 7424, 29998, 20561, 20040, 19919, 29618, 8002, 12604, 5020, 24560, 15914, 20214, 31861, +12731, 27138, 9588, 30127, 3557, 14899, 23079, 16430, 3599, 11323, 1240, 3730, 22502, 30532, 3221, 17225, 31306, 3585, 24649, 28537, 24146, 11922, 15688, 20996, 19924, 28293, 26016, 11717, 11439, 13463, 10810, 24170, 7833, 20398, 21530, 11391, 2529, 11841, 27821, 6128, 23164, 29061, 9859, 12898, 26825, 13080, 30123, 25363, 16665, 22005, 21132, 8044, 1159, 4053, 29040, 21083, 32346, 22289, 32, 11017, 2984, 10842, 2420, 10817, +31240, 23950, 22208, 1002, 3023, 17261, 7130, 26187, 13554, 16989, 6317, 7611, 30070, 3673, 207, 13967, 25678, 21339, 22011, 26837, 25392, 18284, 15152, 24970, 7805, 15185, 3220, 10789, 26027, 5640, 21606, 24500, 29590, 11047, 25502, 32613, 28308, 32632, 26032, 9095, 16854, 32349, 16706, 14156, 3254, 16913, 28123, 28932, 5485, 17367, 23001, 30877, 2883, 5386, 23080, 10688, 20571, 26300, 21477, 13830, 31940, 10315, 5562, 28762, +21362, 31064, 28607, 16903, 30929, 21871, 25998, 15015, 21452, 9936, 29171, 24707, 26850, 24526, 20871, 32335, 9125, 11105, 30444, 12008, 16491, 20756, 22696, 4294, 14288, 11405, 18124, 13460, 21721, 23687, 9454, 10315, 21983, 5293, 27218, 20144, 27164, 20448, 2391, 15849, 30385, 31562, 7788, 24467, 23321, 28659, 24034, 32446, 6996, 21710, 11687, 23487, 9699, 1615, 27781, 23987, 13021, 13138, 4680, 1974, 4057, 14134, 12289, 26040, +19428, 6740, 13417, 13824, 27188, 15808, 29673, 24805, 14603, 4693, 16504, 5156, 585, 7770, 4834, 7581, 29481, 16521, 31069, 6412, 18137, 26082, 30399, 31158, 6452, 2311, 364, 10509, 16446, 12653, 3782, 3106, 19393, 17199, 16930, 13814, 239, 13836, 5851, 14842, 18529, 22356, 19998, 19114, 30126, 24833, 26696, 26839, 8586, 24997, 483, 26723, 18311, 30883, 25113, 24764, 426, 25477, 2505, 16872, 5363, 6287, 19978, 24756, +23486, 4141, 5802, 23726, 17977, 11654, 5800, 3738, 1242, 25799, 22853, 31368, 17864, 16781, 25440, 26450, 9010, 25923, 20406, 27321, 24038, 12751, 19317, 24465, 5461, 21823, 8569, 10824, 28110, 28548, 2812, 18829, 32689, 8615, 9787, 17898, 20269, 15587, 21636, 21511, 8618, 11721, 20111, 26482, 28502, 12783, 20165, 4744, 5939, 7803, 32066, 29977, 20554, 18615, 21674, 26015, 7670, 30244, 4071, 3013, 26024, 6884, 21842, 25945, +15499, 31629, 11075, 3000, 14448, 32711, 24511, 23067, 11665, 11854, 16781, 7399, 24638, 4178, 12144, 30577, 11981, 11442, 27786, 32536, 30057, 16693, 25783, 4960, 14169, 29855, 7973, 7425, 3971, 29815, 602, 19470, 28676, 11677, 22470, 10356, 11620, 14213, 655, 23285, 26067, 17437, 30685, 17937, 21615, 10061, 15746, 829, 21503, 10765, 597, 18792, 27458, 26380, 23752, 8859, 23467, 31725, 16284, 27438, 28772, 16886, 14140, 24680, +28563, 3842, 2269, 7415, 18055, 2924, 30701, 11355, 20361, 28618, 29292, 9209, 5911, 12271, 10038, 27414, 23036, 10635, 13438, 17726, 4247, 4423, 26585, 27715, 3380, 10101, 22385, 32153, 26987, 3758, 24065, 22782, 7600, 26334, 30197, 25656, 29259, 28130, 4243, 16852, 23980, 767, 26061, 29891, 13038, 3331, 24537, 3306, 13966, 5208, 21032, 18214, 9631, 14849, 13161, 13011, 24950, 2778, 12396, 19169, 6536, 3694, 9183, 14137, +30028, 6613, 7025, 26519, 1975, 11268, 10604, 25956, 12035, 3897, 23079, 25074, 7229, 14849, 28380, 21195, 20057, 16645, 6641, 29688, 31494, 19802, 9931, 23677, 22581, 22328, 10078, 29117, 26022, 19262, 10486, 23282, 25875, 17511, 17034, 27850, 28779, 27638, 21038, 8047, 31535, 11350, 353, 5996, 26199, 28733, 27192, 13488, 12610, 1065, 10408, 11337, 20868, 20339, 2246, 10681, 9899, 12324, 7030, 3153, 31586, 17517, 26436, 24693, +2260, 10702, 19776, 31040, 5572, 8046, 6319, 4339, 19396, 6672, 10336, 12827, 2637, 4760, 26315, 15248, 5825, 3955, 26585, 26693, 24295, 28831, 4606, 1426, 8387, 11637, 4580, 7206, 29154, 31016, 31899, 31414, 8950, 18907, 29686, 14522, 26954, 3237, 18861, 13582, 9909, 29197, 26410, 12547, 1189, 19957, 27795, 7015, 23913, 21612, 940, 15440, 17675, 5547, 16866, 26062, 17184, 21446, 500, 13570, 19694, 32400, 12216, 28644, +18539, 9135, 10398, 12725, 12372, 29260, 26308, 22282, 25689, 19950, 2061, 26879, 7139, 29856, 1126, 31052, 18700, 2066, 13724, 3607, 7613, 30591, 29669, 24797, 19269, 30170, 5599, 6196, 29802, 17816, 2072, 15573, 26951, 12471, 28299, 6555, 8963, 21839, 28837, 1884, 9021, 30898, 28763, 16160, 27986, 29889, 14445, 13918, 31956, 28169, 17525, 6801, 25992, 14427, 31599, 12494, 11829, 4430, 18690, 8863, 22246, 20762, 24436, 16429, +465, 19967, 22985, 9428, 9038, 19054, 11313, 18059, 17185, 7308, 1452, 12403, 4430, 15897, 26322, 3618, 11298, 11079, 10419, 4523, 25506, 9250, 17017, 4567, 13681, 2939, 13430, 3159, 23701, 5099, 19589, 24167, 25066, 9806, 827, 1337, 28860, 12140, 19396, 13277, 19449, 20848, 25681, 23879, 3977, 19235, 27497, 15276, 30314, 5148, 19799, 23053, 14399, 4048, 27620, 28080, 6987, 8283, 31239, 30688, 13382, 18060, 22087, 5680, +27866, 22915, 7017, 23959, 2287, 26414, 4468, 21736, 14494, 30149, 12847, 18472, 16616, 7576, 980, 14163, 12725, 20779, 4448, 27124, 24827, 32068, 22436, 31814, 7583, 20907, 29734, 20965, 6200, 19054, 26646, 1298, 9201, 895, 25257, 11488, 27309, 29726, 457, 9036, 27107, 13304, 27508, 10956, 20881, 28488, 25119, 838, 16499, 29567, 27962, 8558, 28867, 17630, 7604, 3683, 5769, 4570, 24648, 11969, 23624, 18526, 13268, 57, +19422, 5757, 11546, 13963, 2715, 12003, 22999, 29823, 25307, 17739, 8011, 13420, 13459, 362, 14258, 29958, 29929, 9452, 5748, 26028, 27082, 13352, 29711, 84, 17923, 21592, 12053, 8779, 7350, 25321, 8837, 26772, 31079, 20383, 7968, 1026, 32386, 30967, 30849, 24925, 15939, 6092, 5578, 29398, 6454, 19836, 26589, 3615, 29289, 32337, 29644, 23603, 12922, 26587, 23687, 30845, 15411, 2973, 6856, 22762, 28294, 15693, 16766, 26605, +3308, 24734, 27632, 2926, 22934, 25713, 27852, 6105, 31806, 662, 2735, 5492, 20498, 29324, 9108, 17019, 28894, 5984, 7855, 9048, 32571, 31542, 7125, 15215, 1747, 13981, 5209, 30042, 29675, 21975, 23879, 215, 13942, 18743, 3142, 4108, 11689, 30994, 10213, 10727, 31656, 12948, 16219, 19386, 9505, 25327, 3638, 5631, 31311, 11493, 14679, 31115, 10267, 21804, 13562, 12015, 3017, 18771, 9289, 32692, 7978, 400, 140, 21920, +19144, 3282, 26028, 30833, 1508, 3473, 8792, 396, 16422, 25011, 19782, 25927, 17571, 23420, 31558, 16114, 2145, 13469, 14461, 12413, 2505, 28023, 24428, 5522, 14026, 949, 5447, 22005, 1349, 5587, 11157, 20493, 8869, 4418, 18558, 10377, 7891, 27350, 10773, 24313, 19594, 30555, 17472, 4397, 21208, 16262, 20511, 23353, 29731, 2205, 2998, 32236, 30228, 27426, 4991, 11487, 28375, 10438, 724, 29725, 16025, 11881, 17450, 24894, +16299, 3241, 2503, 24191, 30591, 13276, 15736, 17417, 11063, 441, 21814, 32271, 16703, 9558, 22857, 13667, 11763, 25855, 13135, 9223, 20514, 18126, 20710, 16121, 28564, 21434, 13078, 11821, 548, 30529, 3947, 16847, 1002, 6450, 8270, 31593, 19726, 24007, 16243, 30790, 24448, 5289, 30293, 8383, 14847, 20382, 22050, 26610, 13470, 2418, 3066, 1216, 20544, 23776, 17337, 16341, 12443, 30416, 28162, 12991, 28177, 32110, 29838, 29179, +5792, 5341, 28004, 25519, 29348, 11479, 23541, 21028, 16769, 21066, 29411, 31616, 8681, 18694, 25459, 22151, 21112, 28525, 23367, 8888, 19533, 7936, 25229, 31976, 5584, 20624, 12199, 993, 19966, 9270, 30172, 25758, 14611, 25409, 18509, 11191, 4120, 9282, 32219, 20889, 30349, 28862, 19738, 6262, 14788, 12429, 28413, 3132, 8186, 19012, 12021, 27719, 26948, 4482, 26928, 32533, 25106, 6359, 758, 12304, 15629, 30931, 5295, 30240, +23572, 23804, 8663, 27692, 319, 8114, 15814, 30668, 4209, 2784, 4162, 18997, 15213, 32575, 22130, 23399, 18819, 1383, 18350, 12999, 5865, 12510, 12764, 30972, 18870, 13523, 10508, 1731, 11686, 15803, 31972, 2490, 6840, 7867, 30182, 7159, 15982, 13228, 5059, 20191, 16012, 9221, 6420, 31225, 9028, 28550, 21856, 27847, 29933, 7439, 8078, 3031, 19949, 20843, 1235, 6051, 1598, 11743, 7783, 13284, 27547, 6987, 15774, 1619, +14854, 13188, 8778, 30836, 26417, 13837, 18259, 9661, 23058, 24680, 8119, 32086, 20462, 29975, 27165, 17628, 4646, 2475, 20659, 24596, 23318, 21894, 30647, 24916, 869, 5662, 5432, 28416, 12649, 21206, 30035, 27504, 1627, 6045, 25572, 28044, 19882, 11064, 4937, 10172, 2976, 13056, 9490, 23438, 10264, 3887, 8298, 14910, 6363, 28957, 6738, 29681, 18083, 4618, 21830, 18953, 10280, 27262, 14601, 22930, 15701, 11869, 17666, 17328, +17914, 10470, 12604, 5029, 21534, 17541, 15201, 24510, 30598, 24692, 15181, 8094, 28579, 23479, 23004, 2174, 19669, 29743, 31856, 4984, 1593, 20918, 23937, 11873, 15412, 5771, 2035, 31113, 17640, 19701, 15673, 2786, 30172, 28277, 7815, 18938, 13051, 23017, 10681, 10881, 14941, 25862, 18975, 10752, 16573, 9211, 12927, 3474, 6186, 12015, 8459, 7779, 165, 32396, 19653, 15577, 5399, 21688, 13923, 23039, 8622, 29596, 25826, 6026, +25106, 873, 24964, 5389, 23890, 2877, 16270, 6063, 28739, 2477, 16816, 12545, 11688, 29743, 16019, 17875, 8990, 24478, 25654, 9155, 24107, 12539, 24732, 29506, 1460, 5887, 19778, 10082, 2716, 12836, 16108, 27822, 13709, 8304, 443, 4832, 11182, 16713, 10895, 7153, 19190, 27711, 19698, 30878, 24686, 2950, 15985, 908, 27428, 8872, 10063, 18767, 21411, 2028, 15506, 22871, 7915, 2516, 185, 10631, 15352, 16293, 5685, 29061, +24598, 6128, 1125, 3012, 22841, 12021, 10165, 9263, 6964, 29864, 7374, 31651, 46, 23359, 32559, 27474, 32231, 9855, 13474, 20875, 11883, 28980, 10978, 19798, 31496, 11164, 30430, 14080, 27457, 3347, 10373, 19287, 9476, 11499, 22299, 32317, 23520, 32465, 8813, 30484, 29561, 16187, 29367, 29607, 6778, 29159, 24313, 6242, 6246, 5019, 27117, 18129, 1231, 5327, 5159, 32727, 16491, 2821, 14039, 11181, 6169, 24413, 30468, 15645, +3144, 20000, 15194, 26664, 19697, 24007, 24380, 16490, 7426, 20980, 13329, 14205, 17371, 4874, 20447, 23617, 9894, 14796, 8978, 11125, 20123, 14137, 11085, 3847, 16959, 25124, 15028, 23128, 16769, 12728, 6005, 19913, 32728, 21199, 13809, 19657, 12439, 5422, 3379, 19865, 26402, 16708, 1302, 11005, 21583, 21749, 1854, 31477, 3777, 10832, 9834, 23901, 24969, 20919, 27748, 9160, 13276, 10008, 32288, 30045, 22736, 5525, 17191, 22697, +26725, 31000, 9586, 6396, 3654, 12966, 26261, 30056, 29674, 27564, 8293, 18489, 16545, 10147, 17198, 20323, 20979, 27033, 11456, 13181, 15184, 6436, 22341, 28460, 16444, 21862, 25738, 6412, 27387, 10161, 29109, 21344, 8393, 5928, 27740, 12048, 18894, 21234, 9336, 15800, 16030, 17630, 1522, 32575, 27777, 18720, 20130, 15989, 12985, 31586, 29170, 28170, 5254, 18743, 23862, 21698, 7837, 16832, 28111, 2457, 26993, 24452, 23801, 2619, +30380, 18774, 14667, 16506, 7240, 24003, 32307, 23270, 8865, 1061, 23077, 3875, 19781, 10440, 19864, 32767, 9258, 16266, 28169, 14513, 2241, 19263, 3443, 10079, 3328, 31554, 12536, 30321, 23239, 3569, 172, 20851, 22343, 14839, 4590, 29583, 6075, 4129, 20085, 14940, 5190, 10395, 18815, 24971, 20835, 5911, 24970, 30093, 22177, 20371, 11838, 24419, 6867, 15282, 1730, 10195, 14068, 14266, 7748, 4539, 17835, 7921, 25391, 7411, +22760, 29981, 4226, 28835, 1342, 24312, 11008, 6532, 1939, 29823, 31503, 22774, 2967, 23706, 20099, 25144, 11309, 31938, 16795, 18176, 14452, 18525, 28371, 28520, 23, 3352, 292, 17859, 11273, 25683, 25270, 1265, 22896, 29496, 30101, 24238, 21040, 8341, 30770, 22979, 5396, 29505, 12985, 8363, 20443, 317, 740, 31753, 32255, 17535, 17161, 13939, 3293, 12765, 9691, 3316, 16117, 9983, 21175, 27390, 2898, 13677, 28655, 25794, +10406, 25988, 17264, 31446, 1561, 15266, 21658, 6958, 12004, 1875, 15321, 32447, 2192, 16061, 31432, 1679, 829, 15826, 15618, 4122, 28591, 25310, 7438, 11940, 2525, 28614, 6562, 5424, 9523, 2449, 31218, 19929, 28438, 15715, 18608, 29999, 30981, 7498, 4189, 10217, 9373, 19511, 9897, 11566, 2804, 8561, 13245, 3633, 24387, 28864, 7755, 20210, 21406, 15194, 32150, 23931, 11040, 5944, 29355, 20563, 8394, 27806, 7725, 4064, +10753, 26333, 1295, 8966, 1063, 5485, 19184, 10436, 24996, 29081, 22002, 27800, 4874, 2480, 31434, 29262, 31344, 6421, 16704, 19982, 21615, 16087, 11145, 32655, 22031, 7733, 20451, 30425, 2771, 28176, 1721, 13524, 21741, 3017, 22490, 22804, 8502, 8906, 472, 730, 5219, 22475, 28530, 10094, 24955, 27196, 6588, 23531, 850, 23292, 10745, 22465, 6611, 21890, 22353, 28643, 29623, 10036, 26300, 32394, 5444, 28022, 13150, 27185, +31039, 2873, 17221, 6773, 11779, 17693, 7503, 16999, 7400, 3265, 27093, 32355, 30462, 913, 23118, 31312, 24205, 1095, 21009, 30817, 22986, 10594, 26692, 19841, 20630, 20224, 19468, 26074, 15478, 32618, 20491, 13749, 2723, 4944, 20522, 14503, 22638, 28025, 31502, 30038, 31291, 25827, 29626, 28985, 26740, 19976, 27529, 18177, 21072, 15770, 16226, 11290, 26365, 10150, 31131, 14227, 30375, 17831, 7534, 13085, 17682, 28025, 26835, 20405, +202, 14589, 2140, 22840, 9847, 874, 20110, 8370, 26701, 16968, 4587, 20673, 4177, 32116, 6083, 25249, 15118, 22309, 3771, 8715, 32460, 2134, 22943, 30067, 19966, 30477, 10384, 4880, 25734, 4451, 25285, 25936, 19041, 27426, 16008, 28888, 28300, 3351, 4490, 22234, 20319, 9077, 10139, 24496, 8425, 16222, 16977, 23543, 5764, 20748, 32259, 5456, 22883, 22434, 2755, 10081, 20143, 13139, 14961, 13109, 17591, 7478, 6278, 3864, +2136, 22286, 32752, 30437, 25637, 4474, 19903, 13189, 13551, 30042, 4917, 21976, 13497, 21895, 12751, 19261, 9875, 12242, 24717, 32758, 1908, 27472, 10071, 22051, 7843, 25032, 2393, 25434, 32511, 8671, 29298, 1879, 30957, 29282, 32316, 23827, 988, 19451, 4248, 14539, 16726, 9165, 3747, 30223, 31060, 16499, 16716, 8168, 28741, 8665, 8158, 30650, 3369, 18230, 19933, 11212, 10494, 22326, 3879, 10237, 30997, 409, 12117, 29187, +29692, 11665, 20246, 30680, 31117, 24494, 12452, 15075, 891, 16199, 12530, 31952, 32698, 29246, 7352, 28672, 5143, 15510, 26554, 8512, 972, 13719, 19724, 11467, 3278, 23603, 21704, 1507, 24013, 1053, 30694, 20937, 12719, 18172, 18849, 11068, 9898, 31301, 26143, 10790, 14733, 5905, 9974, 14663, 2383, 17326, 10567, 7526, 68, 4353, 16038, 1041, 18073, 2994, 12508, 21351, 26598, 1444, 22858, 17843, 2498, 20785, 6012, 15217, +6189, 24861, 26285, 16088, 23395, 19660, 26878, 5360, 25565, 4084, 20023, 27948, 21410, 30591, 2706, 21478, 2176, 18744, 22519, 20249, 21738, 2259, 8832, 15568, 3704, 31691, 643, 6202, 19708, 6655, 21419, 25897, 31517, 14936, 9217, 22144, 1828, 3327, 27504, 27393, 7411, 14759, 22573, 28821, 12582, 25279, 17532, 14759, 11255, 7283, 2240, 225, 9543, 11073, 15794, 13247, 9996, 16437, 19449, 29704, 23093, 8100, 22833, 21842, +23036, 32051, 11218, 24864, 2610, 5954, 19489, 10022, 20713, 9294, 6075, 528, 1805, 23607, 15287, 13060, 30891, 17527, 13285, 7666, 28600, 29079, 20913, 5828, 12749, 7594, 2764, 3074, 15694, 25598, 24916, 5962, 24881, 3366, 30826, 27491, 9320, 17547, 4745, 30033, 26841, 10821, 30561, 28646, 1660, 13080, 8938, 32551, 30608, 22223, 7449, 26440, 18535, 28362, 32269, 31284, 3188, 2265, 1590, 18882, 27863, 26506, 24844, 19976, +29872, 22902, 14700, 6424, 7681, 19445, 3689, 1754, 30266, 1483, 30400, 31927, 14563, 6570, 31710, 12403, 28794, 6392, 6076, 14561, 1986, 5577, 13077, 5175, 7842, 14667, 24057, 2938, 8405, 16134, 22914, 5509, 6268, 4846, 11933, 13950, 24292, 15622, 15704, 21790, 17105, 13337, 20949, 31669, 19907, 19892, 11304, 15933, 26284, 17380, 30494, 28270, 22957, 10803, 677, 30800, 25470, 24735, 970, 1107, 8101, 23884, 6616, 14369, +28731, 18549, 28319, 20255, 1404, 11256, 9277, 18509, 24593, 30227, 17410, 11732, 17351, 28715, 27666, 10867, 13327, 25392, 6369, 3517, 3428, 7047, 1549, 28898, 31782, 2519, 30006, 7115, 26403, 3854, 21484, 22366, 22404, 17036, 9853, 23808, 28292, 19131, 9549, 20117, 16590, 26960, 31849, 1173, 22907, 26747, 12040, 3466, 19372, 18409, 6983, 22800, 25456, 8532, 18930, 24470, 11051, 16168, 31585, 4687, 20023, 20302, 27053, 9659, +4570, 4139, 699, 94, 23270, 10248, 20211, 7092, 4440, 19292, 8265, 27347, 13272, 20305, 30814, 32644, 5946, 5029, 22676, 31403, 13562, 8838, 23105, 24613, 25007, 21923, 29300, 12262, 9457, 23586, 21921, 14027, 27725, 22620, 14121, 18227, 100, 1564, 25319, 4541, 20856, 816, 31888, 1360, 21121, 29934, 1236, 27067, 2196, 23912, 25702, 15758, 32751, 16040, 7603, 24990, 5195, 4136, 4484, 14652, 27722, 26405, 28679, 22679, +16257, 10032, 8138, 16357, 11596, 689, 20898, 32452, 1505, 20019, 1045, 22626, 17185, 2281, 16925, 19381, 26194, 9860, 2371, 26177, 25900, 9975, 18399, 31095, 14111, 22883, 12979, 9065, 16520, 8890, 31744, 9, 18922, 7114, 16366, 30518, 7803, 4497, 30202, 9308, 24516, 31247, 31934, 8933, 761, 16091, 28315, 26955, 25951, 30686, 20364, 19083, 7893, 5995, 17410, 22004, 28878, 30389, 31069, 12630, 6511, 30045, 12639, 25433, +4391, 29005, 23183, 12194, 734, 20618, 21502, 25250, 19097, 20668, 1416, 19858, 3992, 29731, 14045, 29943, 27649, 1641, 16259, 2775, 7636, 901, 24779, 3746, 31291, 23081, 16376, 5034, 20358, 29015, 30468, 24750, 25253, 20883, 4176, 25987, 8733, 25679, 18470, 27831, 13579, 19886, 14921, 17571, 16849, 28967, 14747, 11730, 30608, 31006, 14505, 5477, 31907, 6517, 9223, 30430, 29598, 25600, 2697, 17188, 21847, 397, 9170, 14332, +21280, 13347, 7552, 30014, 6258, 26022, 25077, 19837, 13140, 7230, 4641, 29989, 3429, 19388, 8951, 1270, 17626, 23457, 6747, 16765, 29974, 15970, 14428, 26804, 8802, 17125, 11224, 30650, 17522, 20395, 12214, 6034, 974, 19766, 3280, 7232, 13020, 28357, 27069, 26160, 2820, 31710, 23381, 6249, 18330, 32333, 7519, 3188, 23022, 14266, 19954, 20228, 30237, 1614, 14264, 6271, 18739, 25488, 4153, 3493, 13115, 16368, 9527, 14089, +3366, 12808, 21321, 16387, 8397, 15623, 9779, 11217, 14565, 393, 17467, 128, 32726, 24986, 3316, 22980, 6485, 23270, 10440, 3954, 24884, 24704, 10225, 10855, 17424, 14379, 14348, 30540, 30747, 23876, 11861, 1345, 3916, 415, 17732, 12313, 16038, 27512, 23531, 30603, 27905, 8230, 30731, 27863, 448, 1280, 18075, 6933, 24550, 28515, 10887, 16667, 20451, 21113, 27522, 5107, 2724, 9103, 2879, 703, 211, 14741, 2048, 4127, +15156, 19781, 16440, 31194, 14525, 7203, 29029, 9662, 15433, 26993, 4757, 15882, 28273, 22832, 22815, 20055, 18579, 935, 3954, 6262, 22048, 31477, 11369, 24772, 7812, 14249, 25475, 8023, 28990, 27523, 12150, 11378, 14536, 28590, 9804, 29061, 3026, 6065, 5955, 18459, 290, 10712, 1573, 28563, 776, 24389, 15851, 19355, 25324, 19805, 25617, 14604, 18514, 4219, 6608, 26326, 18468, 32083, 1581, 14690, 26838, 13731, 26068, 8607, +9554, 3104, 4900, 12580, 9169, 10856, 31039, 9460, 21568, 32613, 5255, 22345, 24234, 21106, 8932, 16790, 8144, 1782, 31394, 26658, 6001, 5234, 20217, 24469, 4549, 21798, 6391, 31387, 2762, 32459, 7226, 12316, 2795, 12127, 24896, 11964, 22983, 23167, 21424, 11783, 23012, 26680, 1360, 14478, 15018, 10293, 31268, 23162, 12075, 29894, 17053, 18076, 2360, 4502, 9777, 6909, 26300, 16168, 5529, 29062, 15859, 12755, 8610, 18654, +24882, 738, 30618, 15097, 23906, 19275, 26881, 14150, 13187, 28241, 28629, 28205, 5766, 27129, 18600, 17841, 24256, 2885, 3149, 26616, 7387, 12926, 758, 919, 29094, 6287, 29982, 12185, 19042, 5824, 30839, 11157, 6563, 28690, 26254, 30469, 15197, 20367, 11851, 28384, 15841, 7712, 23821, 21607, 2074, 9653, 6681, 26330, 12538, 9830, 20178, 19925, 22757, 20936, 20845, 19083, 27223, 18059, 31269, 13498, 23883, 29340, 24655, 30446, +25262, 18141, 28147, 7691, 5741, 7231, 3307, 21582, 14943, 27129, 10421, 17017, 4014, 17102, 10579, 16553, 26933, 30758, 3710, 16922, 18926, 24555, 3237, 13382, 9846, 1738, 26880, 962, 31079, 18767, 31408, 23573, 4140, 26788, 31265, 9881, 1251, 1804, 31463, 16194, 28933, 9117, 444, 180, 26219, 11023, 16733, 20384, 9013, 20443, 4538, 27940, 12231, 7776, 8554, 22077, 9514, 2666, 23039, 7825, 21433, 21680, 31399, 25573, +15700, 29896, 2687, 16951, 31700, 1382, 377, 27866, 10499, 821, 28046, 3951, 11845, 12011, 24335, 20858, 32454, 28874, 16030, 11917, 3882, 24584, 1227, 13396, 27250, 24266, 21222, 15915, 13178, 19853, 8721, 28878, 16981, 11408, 13061, 15913, 12790, 13439, 11011, 23290, 14260, 6289, 27241, 26105, 18300, 18808, 14196, 17987, 14914, 30226, 29904, 18796, 22043, 31131, 32193, 16525, 22630, 20647, 32441, 3040, 7732, 8394, 31919, 24713, +19802, 12212, 7858, 32592, 25651, 18870, 23114, 7144, 25159, 17587, 481, 10692, 3628, 14677, 28679, 18542, 12136, 25815, 4571, 1411, 24179, 3996, 17936, 14041, 24643, 17609, 17081, 32375, 26003, 16232, 24320, 13037, 28445, 32178, 12862, 21328, 18280, 3208, 28472, 10672, 20796, 28954, 21364, 24424, 10863, 17275, 10198, 22999, 10322, 14769, 24410, 1733, 18765, 9579, 15774, 10640, 27188, 88, 10247, 20424, 16320, 1799, 693, 11997, +1210, 13555, 558, 19490, 16764, 29030, 30162, 4792, 25216, 18758, 29216, 3312, 3265, 6646, 26311, 13588, 21416, 17954, 15321, 7413, 27533, 31096, 18054, 21953, 31184, 28301, 9609, 14736, 30101, 10303, 26734, 31311, 23858, 27292, 18033, 7854, 23554, 15428, 12646, 16003, 1418, 9094, 19315, 4684, 15741, 12858, 18272, 4389, 30812, 825, 11802, 25577, 31921, 29856, 14763, 30337, 25390, 24372, 12306, 22723, 1907, 6272, 21266, 25766, +796, 6531, 852, 24350, 21959, 13499, 7585, 23378, 22593, 26900, 28062, 5566, 6991, 13566, 9955, 5035, 14391, 21758, 30613, 13545, 18846, 12608, 11114, 11468, 4212, 23420, 1423, 6120, 29692, 22689, 31886, 30488, 29221, 32738, 22071, 18412, 13469, 29656, 9022, 3295, 23789, 4316, 8861, 30780, 17882, 18817, 3047, 32274, 7807, 892, 13051, 26653, 13500, 24165, 5354, 17713, 14818, 6777, 23833, 11742, 29467, 22951, 9463, 25920, +22921, 31534, 11564, 3623, 28422, 20587, 6918, 19443, 24903, 15779, 17455, 10018, 1828, 20503, 9524, 9635, 21395, 22575, 3521, 2128, 13972, 8875, 19841, 28790, 15652, 10906, 7765, 12351, 1089, 17228, 5503, 24010, 15994, 17068, 27633, 11648, 4887, 1783, 31092, 29790, 17563, 15779, 7040, 19391, 3514, 16564, 29027, 24910, 6371, 32548, 27038, 20344, 8655, 14111, 16366, 24307, 25017, 24131, 3891, 26106, 8591, 9394, 17348, 24585, +26462, 12214, 3466, 31349, 13997, 1790, 28372, 31560, 17569, 2644, 18184, 21084, 19209, 14443, 13226, 25580, 14223, 7496, 13156, 22878, 21607, 29523, 14417, 13856, 20886, 18308, 7194, 29478, 27703, 24542, 21295, 21397, 3988, 24761, 19979, 17986, 26551, 15583, 16778, 11353, 18227, 2194, 32437, 4668, 16637, 12895, 30249, 30860, 20391, 10637, 20970, 9230, 7392, 2620, 23086, 28279, 20928, 30280, 24989, 15863, 22054, 13516, 4493, 26043, +5510, 24472, 11261, 32061, 7287, 28039, 10646, 25514, 30234, 10315, 30183, 14103, 23210, 27664, 12196, 10833, 5533, 398, 20063, 12926, 3018, 10381, 8437, 23947, 7893, 658, 7042, 29948, 14174, 11535, 23223, 19684, 3239, 1716, 18978, 10526, 29755, 29624, 3273, 27221, 7172, 688, 8557, 30382, 28352, 20753, 8448, 1117, 21151, 28511, 14043, 24170, 6125, 22480, 15349, 14018, 23138, 22391, 11198, 4545, 1159, 1653, 24229, 4398, +3369, 10439, 14925, 357, 7296, 18198, 27578, 14468, 18886, 3367, 12082, 14470, 24120, 20530, 15587, 12504, 16274, 29631, 3906, 22399, 19343, 19255, 3649, 9714, 8878, 14848, 14259, 10037, 16501, 5720, 14436, 19871, 16160, 29361, 20228, 23456, 14791, 15038, 5156, 909, 18406, 17238, 15379, 9758, 5001, 30966, 22262, 21275, 27829, 26168, 10906, 14405, 12655, 14555, 24119, 21534, 29403, 5610, 31571, 13137, 11330, 13239, 240, 27490, +9832, 20468, 18178, 24623, 2738, 23334, 25532, 21144, 7805, 8143, 30903, 12806, 6342, 20397, 1313, 1403, 13798, 12219, 15808, 26453, 26774, 7159, 15219, 23410, 12769, 14023, 3779, 24100, 27262, 4019, 18822, 4327, 24487, 4233, 28950, 27225, 27567, 21715, 15602, 2604, 29858, 13737, 15410, 3432, 1366, 16723, 4836, 15164, 28942, 20644, 8850, 22949, 27804, 24069, 13591, 7805, 5324, 17370, 31905, 32587, 21389, 17960, 4146, 13108, +22193, 328, 7565, 16992, 22043, 23167, 19597, 19134, 4136, 2239, 22566, 5503, 18963, 27402, 20667, 15137, 15279, 29517, 5318, 10315, 20819, 18909, 18120, 26143, 3511, 17258, 25962, 24900, 2450, 30108, 5240, 24643, 30437, 12806, 8867, 19712, 3205, 28464, 6078, 7342, 30704, 28645, 12845, 16899, 23279, 744, 32036, 5790, 30262, 4587, 16105, 18313, 23496, 1458, 11688, 27008, 18716, 4883, 19140, 21166, 2223, 24381, 13041, 32660, +4419, 21908, 19605, 7624, 17605, 25683, 14966, 15541, 21560, 27811, 32440, 12072, 28556, 31708, 17862, 26050, 3527, 1200, 11595, 27024, 2658, 23283, 21264, 21374, 28166, 7636, 9772, 30390, 32017, 22813, 30282, 3668, 11953, 17119, 11293, 29558, 10035, 26259, 12331, 31595, 21303, 12003, 10899, 17091, 10944, 28762, 10373, 14471, 29962, 21968, 8727, 32620, 12483, 29991, 21226, 7882, 4860, 30998, 5504, 4109, 21043, 3018, 7778, 228, +20138, 19071, 29787, 30173, 12562, 9350, 29000, 1097, 21354, 7132, 18188, 32298, 3126, 28561, 14001, 320, 17761, 22729, 172, 30245, 19952, 21398, 5359, 24812, 19628, 10863, 28922, 7903, 13881, 3932, 8131, 1251, 23003, 5150, 31424, 2797, 14501, 27657, 3895, 3087, 2021, 22083, 2617, 5147, 17877, 16618, 5467, 2870, 6579, 5639, 347, 26532, 27037, 5706, 18576, 13897, 16569, 14730, 21800, 30451, 18662, 29931, 31702, 8897, +2314, 30359, 11695, 16815, 25248, 15590, 19902, 27269, 4905, 22519, 32416, 22782, 6369, 5115, 25653, 12949, 10754, 26000, 6713, 5023, 31707, 25289, 18920, 15508, 7252, 7952, 13191, 25914, 5115, 12126, 2044, 7429, 9717, 13739, 24244, 2197, 29329, 11378, 29466, 1466, 1129, 29114, 24249, 7499, 1461, 17134, 20448, 12215, 10366, 27161, 17238, 9305, 19682, 3390, 24814, 26934, 11342, 5237, 20081, 16457, 17363, 22125, 23887, 27080, +3096, 15363, 29277, 32425, 26742, 25975, 1123, 27871, 22321, 25372, 2602, 23782, 9738, 23050, 3229, 20105, 17443, 20467, 29410, 4358, 23857, 21456, 31292, 2431, 26694, 18605, 18889, 11289, 7962, 10008, 5602, 11058, 25371, 2111, 10715, 19345, 28087, 11839, 14449, 17640, 4443, 17051, 8655, 14182, 7334, 11884, 1519, 24777, 32352, 30929, 29135, 23441, 19618, 27660, 25873, 13544, 13497, 11994, 24833, 21460, 22002, 30435, 32518, 14605, +32547, 10466, 1183, 27866, 22305, 15632, 12738, 26748, 32683, 21393, 8162, 7249, 510, 9681, 32027, 94, 7843, 28394, 23535, 27461, 23286, 16640, 8237, 4016, 28634, 302, 25476, 17868, 30738, 25226, 32474, 30517, 2924, 889, 25615, 25229, 16521, 5585, 19210, 16436, 26979, 27372, 23686, 27489, 4286, 22945, 27583, 12129, 18571, 18350, 6822, 9090, 2223, 15059, 13106, 30857, 15361, 5814, 15958, 13331, 31040, 15664, 11080, 1197, +16553, 3927, 26426, 306, 9513, 12868, 16742, 3724, 7473, 7660, 31213, 11759, 30605, 26028, 23888, 16409, 11610, 30710, 25499, 13833, 13001, 5837, 11923, 28362, 11651, 27881, 8926, 9923, 10777, 20006, 11120, 27330, 23934, 4779, 27636, 679, 17647, 11610, 4403, 25120, 19271, 2848, 4111, 17108, 28876, 27999, 749, 7718, 25941, 26248, 21552, 6174, 32085, 707, 1769, 10968, 28588, 10695, 20892, 6597, 30701, 32012, 1159, 21867, +4023, 28795, 22546, 21671, 7637, 26949, 14023, 26908, 29797, 18135, 11249, 25905, 13366, 11998, 856, 6540, 5479, 22408, 12714, 4796, 23115, 14483, 15765, 18935, 25178, 3889, 25532, 23112, 3133, 26691, 12211, 7157, 22718, 1990, 28828, 30355, 28939, 10083, 24496, 25969, 28218, 2977, 19106, 8817, 14975, 19962, 15357, 20454, 9602, 28071, 25251, 32717, 9787, 8248, 18884, 2197, 12137, 11648, 25309, 15270, 5571, 4753, 22427, 28289, +6743, 18487, 25877, 2914, 28571, 17605, 28883, 24021, 20582, 15222, 70, 2789, 2416, 15427, 23244, 12019, 10731, 15727, 11968, 20518, 23975, 30853, 22715, 3344, 9733, 15257, 18614, 15305, 20010, 8274, 10826, 26753, 26761, 3935, 29667, 22564, 21540, 25783, 13818, 9354, 8237, 13888, 12144, 10653, 29316, 2620, 22672, 7279, 18347, 1873, 27797, 9554, 32726, 17744, 12898, 9691, 233, 31512, 24996, 20243, 7018, 3055, 14228, 1012, +6990, 11128, 23576, 28531, 4143, 4626, 5117, 12380, 18515, 17261, 23033, 15063, 19881, 12938, 22342, 5460, 14811, 17371, 15014, 14769, 2347, 27912, 24460, 2581, 26657, 16689, 22824, 907, 19744, 4285, 1919, 26734, 15413, 25496, 22497, 19556, 30122, 27615, 31936, 15869, 12108, 22201, 30932, 31990, 2371, 20506, 4682, 17182, 5109, 19697, 31951, 7457, 14841, 23644, 10038, 8730, 7565, 94, 9638, 27309, 4379, 11557, 21275, 19792, +4285, 11005, 6580, 1640, 5852, 5748, 17509, 17960, 27950, 15674, 17182, 30321, 3412, 21865, 14736, 8522, 8794, 13919, 15979, 23635, 4795, 26017, 32366, 12360, 26111, 9236, 6901, 30491, 20793, 28177, 17515, 25079, 6414, 24096, 26719, 12266, 29844, 11460, 30226, 25026, 27134, 14641, 22580, 30547, 3738, 4548, 6301, 12532, 18467, 22280, 3399, 23263, 15529, 2997, 2855, 8872, 12233, 9757, 6595, 259, 5166, 24111, 25338, 11580, +15439, 19289, 23846, 12515, 30749, 21304, 4774, 25116, 3177, 27354, 22895, 6915, 31902, 29196, 19447, 17601, 18708, 22847, 8096, 1469, 25844, 10952, 10341, 5310, 20709, 16937, 5569, 25875, 8280, 30907, 4687, 23719, 17428, 28533, 3466, 15409, 17069, 8240, 7757, 20247, 2826, 30652, 27162, 1960, 27080, 13842, 19562, 13020, 3921, 27658, 14489, 29765, 5842, 24831, 2307, 26551, 9000, 7876, 19658, 17280, 6015, 24345, 8231, 23443, +20110, 11697, 6085, 4412, 19938, 13842, 24659, 22764, 11727, 19053, 24725, 6039, 127, 11519, 19060, 4048, 6409, 781, 1046, 12252, 25612, 3353, 6035, 1844, 11230, 25694, 19124, 17245, 17271, 27355, 7921, 4614, 6285, 14006, 9026, 26223, 27848, 917, 16219, 6807, 19970, 8176, 12847, 20098, 19695, 31907, 24146, 26105, 32688, 25192, 5589, 25533, 28546, 11624, 27377, 7008, 4550, 13734, 24253, 21822, 8321, 32174, 26436, 14606, +13412, 2694, 8061, 8493, 3611, 24281, 15300, 23581, 32457, 28147, 10911, 19385, 27286, 2290, 12722, 27207, 27482, 18311, 19972, 23260, 29935, 14581, 30268, 1718, 28315, 21754, 23540, 3869, 21160, 17208, 18475, 1805, 19902, 26537, 10298, 23513, 18050, 25598, 14326, 17739, 20978, 25238, 4356, 15496, 27528, 17078, 9935, 22242, 2621, 29907, 12735, 32557, 11721, 10235, 1507, 7268, 31989, 25047, 11137, 20382, 9487, 29613, 22187, 29389, +23382, 32485, 20134, 8664, 25315, 1692, 26403, 13525, 26930, 30760, 29022, 21690, 15070, 6189, 11165, 17692, 3329, 23900, 17481, 15050, 1367, 18988, 22318, 589, 11267, 688, 20971, 20754, 30301, 10390, 17375, 20915, 10107, 4741, 29579, 2654, 6433, 23214, 16180, 596, 21206, 12434, 22286, 3509, 18623, 683, 21201, 21952, 24583, 5914, 4234, 25951, 24902, 26553, 26540, 3401, 27241, 14743, 24155, 24774, 25133, 8762, 12921, 2472, +13503, 9732, 5126, 19936, 178, 21306, 20532, 21385, 972, 10051, 24894, 19596, 10734, 13327, 8780, 2550, 19241, 13015, 28501, 11375, 6800, 22273, 14776, 1273, 4248, 6163, 26047, 29381, 14925, 6200, 31853, 28428, 15932, 4211, 15596, 16110, 25518, 3361, 4727, 26490, 13412, 29621, 13318, 24146, 10180, 22099, 26696, 29421, 2346, 22429, 8028, 9146, 11934, 22804, 10419, 16182, 28967, 3698, 12795, 11124, 9898, 11880, 6784, 25830, +16092, 22381, 9172, 8842, 25742, 13900, 2564, 6386, 10753, 15883, 30532, 20934, 5214, 24461, 17587, 7560, 14122, 25616, 16706, 26057, 15652, 27125, 9471, 11852, 30823, 22267, 22976, 7953, 1379, 29761, 1015, 17471, 19374, 10187, 26313, 12348, 24087, 28878, 18734, 2073, 11993, 16498, 23007, 17207, 8191, 7826, 24767, 22314, 674, 8705, 15603, 16327, 3062, 25074, 28179, 1117, 14573, 18387, 9070, 15953, 15380, 10085, 656, 1986, +20272, 26970, 14334, 11592, 23080, 300, 13665, 2305, 16799, 3904, 19512, 24990, 11730, 11511, 14536, 12405, 20216, 30139, 28732, 23278, 22446, 24143, 24395, 4251, 9762, 697, 20204, 25143, 10782, 20861, 27129, 31054, 15063, 8696, 9878, 5375, 8996, 23543, 7680, 25795, 27447, 27192, 18018, 6410, 5935, 32554, 18815, 26151, 29926, 14779, 16661, 19604, 6154, 8288, 23855, 15916, 8985, 11292, 8291, 19767, 32153, 2653, 18053, 14448, +11349, 27932, 19823, 20345, 18707, 27503, 13373, 13387, 21927, 31391, 19797, 27862, 31177, 5844, 21245, 28335, 20623, 5138, 15171, 26777, 13426, 6259, 9925, 22411, 17551, 18217, 9410, 16936, 20870, 27463, 31384, 32219, 22627, 18439, 19796, 8567, 13174, 401, 21954, 2333, 31792, 8983, 30195, 30202, 14827, 18672, 25769, 2682, 23810, 8173, 29459, 4468, 14432, 6616, 26879, 31983, 24833, 3521, 16151, 12935, 30984, 14767, 12386, 20844, +438, 32183, 29411, 13612, 32584, 18597, 15945, 31609, 27580, 13372, 29043, 9639, 32044, 22044, 12321, 23086, 30217, 9012, 27554, 11881, 15628, 21665, 11096, 7694, 25186, 27247, 20629, 23402, 9246, 248, 11478, 9684, 32431, 8121, 23296, 32247, 26718, 6473, 31088, 21530, 19845, 27363, 31169, 19121, 16640, 10722, 9439, 14089, 19734, 4225, 25971, 2595, 25890, 4299, 10289, 18308, 31547, 30918, 8943, 8025, 31166, 20421, 17710, 30829, +28543, 8238, 30309, 22493, 14712, 28629, 11256, 1789, 23225, 9657, 20911, 7097, 20380, 30350, 21186, 7346, 1808, 14389, 9941, 27698, 18689, 20230, 13239, 17468, 18381, 22182, 25493, 16779, 9835, 10435, 14841, 5610, 18674, 12382, 28104, 618, 8243, 6592, 2407, 31468, 16249, 23318, 5797, 3861, 20901, 26984, 11208, 22709, 8605, 21149, 17639, 27294, 8612, 30878, 11994, 26993, 20292, 4720, 11004, 30128, 15155, 25845, 2970, 1061, +5459, 31074, 1679, 13703, 4898, 4087, 12403, 21148, 27405, 18201, 25009, 15538, 12417, 3449, 5479, 21022, 24599, 23119, 15549, 443, 21229, 27543, 27436, 8754, 32263, 5672, 6114, 14651, 31518, 9084, 15712, 4209, 7391, 17392, 17912, 12289, 21479, 30316, 669, 16116, 15749, 25679, 31655, 28166, 29128, 4366, 16420, 20959, 27485, 31969, 21402, 15947, 26745, 16070, 24701, 26240, 21743, 30815, 8123, 20493, 7131, 23836, 24702, 14522, +8460, 9847, 26812, 29939, 7395, 27481, 13287, 23144, 20392, 12174, 18542, 16753, 16541, 2194, 4944, 11258, 1396, 26347, 27205, 28141, 9649, 19138, 21613, 31392, 17185, 29737, 19117, 24317, 20805, 11052, 6071, 29265, 20899, 115, 26436, 28294, 27597, 6955, 18670, 15221, 19130, 4444, 31974, 2903, 6638, 4151, 14161, 8034, 30498, 8599, 3407, 7379, 27737, 25021, 6004, 12155, 21990, 25121, 3704, 10027, 3405, 9775, 6524, 24304, +9891, 192, 19830, 4720, 7147, 5732, 19941, 26277, 10176, 19148, 29180, 16815, 23299, 10574, 24849, 21029, 19173, 28257, 28408, 14142, 20510, 1644, 26297, 9732, 26766, 30001, 19759, 30171, 7009, 26283, 21708, 16900, 26475, 8770, 21620, 854, 14503, 8793, 27132, 24679, 27941, 23544, 8726, 18472, 1350, 808, 6733, 20523, 29065, 2374, 1898, 16807, 4018, 28195, 26539, 30784, 25429, 13530, 28188, 32438, 7045, 17128, 16570, 752, +25898, 5422, 1606, 7633, 14215, 28738, 32313, 9389, 19515, 8271, 27861, 20865, 9079, 1827, 8621, 5376, 4201, 10519, 22183, 8219, 5946, 15954, 6236, 31375, 29484, 1656, 31045, 3761, 18784, 14847, 4513, 11914, 20269, 6120, 19548, 1717, 2090, 19093, 11106, 21605, 27364, 6199, 9703, 3676, 8026, 18324, 9052, 12227, 28843, 31236, 20447, 2021, 14422, 26683, 629, 11139, 28339, 31674, 14900, 14355, 13754, 19414, 26269, 1255, +25534, 13049, 2972, 27624, 32142, 14078, 16462, 26739, 20278, 26165, 30415, 28304, 11721, 6699, 7764, 7796, 5167, 28211, 9817, 19590, 22126, 10446, 30729, 17697, 9353, 12861, 32052, 23107, 32275, 25553, 24362, 25041, 5835, 27335, 19898, 5209, 8645, 3592, 31948, 28923, 29757, 29595, 24460, 8710, 3527, 32224, 16506, 8694, 27667, 26323, 28284, 17025, 4002, 26245, 1954, 13355, 6339, 1238, 3694, 5846, 26791, 28056, 30888, 32626, +22623, 18018, 5068, 31269, 21610, 4248, 27424, 18599, 1076, 19116, 27309, 4603, 18572, 11047, 13297, 13471, 4602, 8814, 30496, 8604, 2291, 32450, 21959, 8630, 920, 25653, 14477, 27712, 20942, 12597, 27570, 10797, 30615, 32638, 9298, 19457, 4119, 3955, 5288, 5195, 23071, 32597, 9798, 8876, 10876, 23095, 22347, 15478, 31909, 20076, 24083, 1433, 19758, 13274, 10063, 20679, 6160, 24540, 15623, 27102, 4369, 10425, 5131, 2216, +10296, 14430, 21673, 14415, 18385, 26961, 19610, 8688, 26790, 29408, 17564, 4898, 19735, 7144, 20377, 18877, 27220, 11692, 20310, 14210, 24966, 30373, 2121, 31126, 22146, 17744, 25460, 26515, 28170, 30592, 28732, 5698, 12254, 17637, 20113, 30639, 11831, 6955, 6559, 5853, 3595, 24124, 10752, 23330, 31268, 31129, 9439, 25720, 10053, 29749, 7162, 2251, 27355, 9284, 610, 16733, 27028, 26070, 10480, 22430, 23894, 6444, 28128, 3380, +24082, 15473, 1251, 3145, 22428, 7811, 8998, 26023, 31935, 19750, 16586, 30435, 18111, 26025, 23387, 28164, 23007, 30549, 30416, 17594, 7065, 31026, 1559, 1326, 24328, 12039, 23756, 15455, 18484, 19117, 18835, 9798, 1822, 20087, 12943, 24251, 27898, 21941, 17506, 27065, 8924, 1324, 24732, 27035, 27350, 15351, 22432, 17589, 13132, 20080, 2415, 20198, 18338, 3974, 21524, 9898, 16013, 12512, 25353, 1729, 31629, 11421, 11527, 684, +31508, 24470, 24935, 26638, 13644, 9673, 20935, 22568, 10998, 12899, 16835, 5580, 28250, 6499, 23169, 8614, 26579, 25584, 28812, 12149, 29558, 17568, 22048, 12803, 30081, 14633, 14533, 28942, 26054, 26060, 29626, 24794, 17763, 21793, 18664, 31407, 31467, 6831, 21207, 9697, 19730, 5274, 15277, 15212, 11774, 5678, 23827, 5585, 31262, 19871, 17735, 28052, 4672, 7015, 8087, 1985, 21648, 22620, 30927, 14935, 15913, 27786, 6961, 908, +16811, 25626, 32315, 15510, 32457, 20754, 25207, 19420, 26028, 7716, 1864, 5034, 13394, 25691, 10620, 11888, 12795, 28355, 7172, 17467, 2602, 15260, 19452, 24250, 5112, 17611, 6417, 21025, 12629, 13379, 21933, 29441, 6237, 21480, 12183, 5926, 9466, 4623, 25346, 2727, 12339, 27211, 7761, 25734, 20134, 18381, 4854, 161, 13968, 12027, 17628, 16570, 27287, 4312, 8053, 32399, 21924, 14470, 20657, 1785, 27849, 9822, 31226, 1318, +31303, 10642, 7245, 8001, 15265, 32591, 10728, 27604, 27034, 18490, 20570, 14401, 4103, 25425, 14562, 18072, 4684, 32191, 1874, 31971, 3735, 9927, 31602, 25659, 24398, 19491, 27445, 19479, 29314, 25903, 20798, 27849, 3777, 28043, 3082, 19042, 27866, 13811, 13879, 22133, 32301, 1681, 3766, 3636, 27106, 18328, 21708, 31790, 17751, 23583, 30993, 21487, 742, 29828, 14378, 25140, 16551, 9055, 11852, 13097, 2191, 32650, 8178, 5968, +27925, 11261, 25011, 23023, 25072, 6122, 12388, 24605, 7803, 16154, 28241, 2142, 1715, 17182, 1164, 19466, 7997, 32158, 8185, 8739, 29218, 22564, 1112, 13001, 31619, 12964, 26099, 1042, 12846, 1509, 7011, 8003, 12770, 32022, 31026, 5074, 5376, 10647, 29679, 13179, 26801, 25153, 15321, 28516, 9567, 16486, 15215, 17564, 15876, 23400, 26303, 12326, 13196, 27415, 25327, 12048, 7611, 18658, 13090, 20457, 20168, 20101, 28460, 170, +19355, 26719, 5245, 24731, 4598, 2156, 5143, 31399, 27309, 20464, 27148, 4108, 4182, 9595, 21672, 20058, 227, 15208, 32384, 13424, 9855, 24944, 25472, 17467, 10834, 5794, 5156, 31002, 25896, 849, 31173, 12483, 27568, 3650, 4447, 32166, 5806, 9590, 30797, 348, 30054, 25177, 4456, 1469, 2004, 26129, 21527, 2232, 8569, 21144, 15656, 18424, 13320, 8360, 3123, 24154, 14154, 8280, 22389, 7282, 9129, 20794, 19766, 3929, +24444, 24213, 3327, 30250, 1035, 1356, 30598, 31089, 26534, 2287, 32558, 28538, 28416, 21318, 30770, 4217, 9694, 13658, 22641, 23014, 22018, 25765, 14400, 3405, 1277, 4021, 10687, 10406, 24815, 30453, 14335, 16491, 21898, 17662, 13974, 22933, 19018, 11804, 21255, 12784, 14091, 21045, 8555, 9739, 9595, 6557, 13956, 19289, 20216, 3830, 9535, 9466, 29595, 23936, 12871, 30872, 27957, 23559, 8510, 20005, 21244, 22845, 3728, 10375, +7739, 17702, 540, 26757, 29507, 21795, 6774, 10830, 10073, 15329, 20570, 19668, 21886, 1758, 6190, 9334, 5588, 15725, 18801, 2415, 6893, 31672, 519, 2083, 22463, 9029, 22088, 10940, 31874, 25816, 21315, 6845, 10751, 21855, 835, 7490, 10883, 7609, 18320, 20956, 22938, 6122, 7856, 12056, 7881, 14046, 21391, 13469, 29772, 7424, 15885, 3897, 6328, 16404, 5980, 28792, 25434, 28068, 6964, 24540, 21117, 28279, 31386, 31868, +17366, 32221, 6590, 28249, 7062, 24910, 16437, 30000, 31033, 24294, 9288, 6146, 5572, 30679, 19615, 2576, 5335, 2732, 6474, 11664, 19137, 12454, 7688, 11803, 7755, 14652, 3575, 28872, 10163, 2193, 27972, 27529, 1646, 1794, 23011, 8708, 26704, 6680, 5940, 24969, 30974, 15229, 31115, 3779, 13140, 17963, 6355, 18476, 20695, 12829, 30140, 7064, 25284, 5060, 18867, 271, 19712, 22443, 29143, 29875, 24636, 24347, 24636, 26283, +26141, 14879, 2223, 20077, 21560, 8164, 12279, 19766, 23393, 10626, 23545, 3765, 28589, 29901, 22241, 16517, 9962, 19613, 23581, 2478, 24673, 9681, 2749, 11617, 32124, 31892, 8724, 23992, 23471, 593, 17507, 16844, 15472, 19731, 4154, 4264, 27895, 16433, 24031, 18520, 27059, 14808, 22285, 22881, 11941, 11759, 6630, 21904, 31372, 30211, 24382, 23278, 7124, 27132, 2127, 6480, 26256, 10852, 30473, 16960, 11445, 15212, 1036, 26917, +2175, 5190, 31182, 30070, 21623, 22445, 15822, 15915, 4485, 5340, 6028, 16427, 17099, 12658, 5563, 15703, 10101, 29945, 6213, 17226, 24309, 8341, 23706, 17798, 19193, 21411, 1990, 30638, 3856, 3026, 24787, 6031, 8217, 23201, 3334, 29840, 12878, 19156, 12987, 17364, 24496, 19015, 1023, 8827, 31673, 6586, 24531, 9007, 3763, 30744, 26233, 28073, 6317, 17171, 13103, 25510, 5815, 15093, 23380, 9671, 18119, 15400, 15702, 26336, +5833, 19036, 23409, 18712, 5425, 3628, 3308, 29921, 22644, 4331, 5981, 21549, 10917, 30512, 30556, 14680, 28488, 24021, 9985, 2038, 8425, 23088, 27548, 14240, 5413, 18161, 23911, 23533, 793, 6845, 17101, 6626, 25882, 7742, 25338, 31307, 11371, 28646, 28460, 1247, 209, 1673, 22796, 11126, 32185, 20585, 25807, 27906, 11838, 3024, 29944, 20263, 26113, 24724, 1735, 31526, 10117, 25646, 22291, 10910, 32492, 6625, 17537, 25606, +14367, 10107, 24145, 25738, 5986, 19837, 26985, 6195, 21511, 17014, 17322, 20928, 4831, 10361, 16066, 16669, 13385, 13242, 4165, 6730, 5199, 5900, 5489, 15316, 31547, 27780, 26227, 31271, 1637, 10996, 24109, 16005, 21103, 15486, 8975, 27089, 2555, 3193, 517, 24066, 20207, 17839, 12227, 25038, 28200, 28293, 8939, 8817, 8768, 13104, 15548, 13967, 19005, 21037, 29283, 17784, 16049, 22742, 16287, 17687, 970, 7628, 924, 22074, +23114, 9899, 16395, 25669, 13092, 16912, 16968, 531, 1983, 29195, 25569, 30183, 24720, 1741, 6233, 720, 14845, 21781, 14687, 1082, 10050, 11203, 18866, 26099, 1177, 2385, 11018, 2148, 10013, 11942, 24222, 359, 21842, 7849, 26029, 2166, 24762, 10229, 2698, 26745, 6656, 28267, 24161, 31376, 30008, 30394, 32097, 12086, 19407, 14016, 13168, 29457, 25219, 32035, 22788, 26397, 1652, 1039, 28545, 11666, 12981, 19999, 12025, 2055, +27848, 5286, 4222, 19842, 15515, 6920, 13820, 22171, 2419, 5213, 20780, 32428, 2839, 20109, 11746, 22246, 1357, 24914, 18935, 26577, 24181, 8955, 20206, 25834, 9994, 15983, 4732, 22976, 3214, 16757, 25031, 31062, 22044, 29253, 18137, 4791, 3405, 31957, 26963, 5825, 4402, 14975, 5485, 7241, 2316, 17231, 29487, 3673, 9377, 15654, 30250, 791, 24609, 17688, 26625, 1836, 903, 31357, 24812, 4117, 15346, 17075, 2412, 4622, +13561, 20549, 9414, 16966, 19738, 3609, 22791, 24140, 18584, 28276, 31381, 20900, 12739, 28100, 24573, 22117, 10986, 22056, 22908, 2827, 6976, 16765, 4663, 7880, 15354, 29475, 11997, 30700, 13783, 14409, 2555, 27344, 2190, 11969, 11542, 21928, 15578, 1566, 13300, 1394, 29842, 11913, 22294, 9814, 7245, 14099, 31931, 18231, 3387, 22071, 21059, 10364, 6068, 25722, 18244, 21422, 22430, 30241, 19354, 3445, 11883, 21909, 30789, 14073, +1110, 9563, 3234, 16688, 11129, 16534, 18082, 8204, 28448, 7608, 18018, 2925, 21708, 17181, 21157, 25095, 6484, 9448, 2691, 12552, 2402, 20935, 1206, 24832, 18409, 20560, 28277, 30292, 9702, 26298, 11597, 10812, 3094, 14831, 27501, 14223, 31366, 12815, 22427, 27046, 20424, 7677, 29971, 9364, 24858, 18360, 1691, 31342, 27808, 4383, 11126, 30211, 25318, 12332, 22275, 10959, 125, 17785, 8483, 9827, 11315, 20081, 20639, 14409, +2144, 15372, 28633, 742, 28188, 18292, 27788, 15844, 25970, 24992, 25208, 18060, 10584, 26899, 16635, 5625, 31282, 27761, 3068, 23833, 7326, 25343, 2024, 7451, 10360, 10508, 17278, 21676, 30589, 5149, 3317, 32733, 20522, 31950, 708, 15942, 17475, 28496, 31786, 10677, 20720, 24226, 28737, 31305, 18357, 12604, 4162, 16872, 7598, 7230, 7937, 14924, 32573, 9961, 22375, 10166, 20469, 6885, 31842, 18290, 12034, 2391, 18256, 32556, +1574, 18964, 15730, 19049, 14692, 14748, 29726, 2645, 6206, 25695, 1182, 24564, 5532, 5344, 8668, 13130, 12574, 16605, 28054, 12379, 26566, 17661, 22545, 14268, 24546, 21619, 32558, 3812, 24011, 18046, 3601, 25585, 4242, 19331, 11866, 18935, 1312, 8824, 21580, 7518, 1751, 22762, 32082, 7283, 28106, 7982, 20413, 7912, 24587, 15699, 20291, 18386, 592, 10069, 32654, 25138, 31688, 32444, 28951, 22931, 17723, 32552, 15748, 21965, +19115, 27614, 8132, 20427, 3670, 29712, 27946, 5422, 19706, 27260, 12705, 15044, 2475, 351, 22956, 27062, 16050, 10480, 12680, 16643, 20549, 12566, 9013, 19469, 12243, 5196, 9633, 29966, 4980, 25381, 19163, 24096, 20228, 27296, 11755, 23898, 24240, 6933, 29320, 11179, 1426, 9258, 26223, 3901, 9609, 16412, 30963, 25659, 26892, 10876, 9534, 14673, 23442, 18548, 1374, 2917, 23744, 11007, 115, 28725, 3621, 19279, 20053, 23849, +13807, 31808, 14979, 5279, 5974, 11532, 16458, 7400, 20790, 9914, 11301, 30399, 26326, 9496, 23290, 20450, 20372, 57, 2355, 11047, 18605, 3729, 13964, 9581, 14737, 14080, 5538, 18358, 591, 25591, 9439, 14398, 24632, 24418, 19677, 30606, 3182, 3368, 5238, 23972, 13282, 16539, 21603, 6840, 26035, 12126, 27290, 13640, 12183, 29645, 24687, 30788, 606, 5883, 7601, 15343, 19963, 13140, 933, 20554, 5963, 10372, 2184, 30595, +2023, 21862, 28433, 5205, 25230, 903, 29178, 5744, 17442, 18013, 12584, 10710, 30139, 7106, 24350, 9554, 3983, 16269, 7574, 4589, 22152, 15176, 19933, 9348, 28316, 20866, 29902, 1511, 31239, 32087, 32107, 494, 21181, 27772, 5699, 13643, 28676, 2109, 19387, 13350, 20123, 31971, 24060, 17494, 6309, 15642, 27049, 10292, 31911, 1855, 14881, 21296, 17031, 2046, 30644, 12579, 22913, 27778, 14091, 21384, 27097, 13430, 21878, 15510, +8434, 27577, 29153, 4342, 29687, 15772, 17693, 17042, 14975, 8985, 1768, 21284, 24628, 28817, 31576, 23771, 30673, 13690, 12299, 14936, 15736, 10175, 27516, 5881, 5186, 8839, 27265, 32283, 22269, 16375, 15026, 30703, 11185, 11411, 2278, 8104, 27184, 19971, 25146, 9391, 28956, 26914, 30676, 20816, 22964, 29484, 11820, 20869, 10406, 24119, 3037, 26143, 1527, 30553, 32024, 6713, 6624, 26522, 6228, 28893, 10129, 21254, 26829, 21314, +32666, 29107, 29418, 27082, 16310, 21796, 3705, 12498, 15943, 1613, 547, 6139, 31098, 12367, 27008, 8736, 3718, 30045, 2111, 5245, 27831, 1368, 11958, 1687, 27890, 18187, 30581, 5251, 6673, 24642, 26566, 6571, 20981, 23216, 885, 4523, 12245, 4591, 17021, 28188, 6204, 17568, 1559, 4534, 29935, 28567, 13271, 886, 25844, 15382, 6131, 20907, 16750, 18090, 22595, 11872, 3509, 20408, 17124, 10182, 12282, 10922, 16754, 495, +1370, 17639, 5018, 13615, 22230, 22039, 9035, 28435, 6840, 10594, 201, 4007, 6393, 13472, 4893, 32238, 28855, 11025, 20377, 12837, 29115, 10204, 24710, 32624, 30612, 9066, 10038, 10126, 19988, 26792, 10621, 21358, 11664, 15639, 2206, 1126, 4911, 11241, 29561, 11751, 21836, 29763, 15758, 28229, 10467, 20652, 27699, 6554, 31677, 15309, 19392, 28024, 25513, 11334, 27880, 23358, 20400, 5150, 716, 7620, 31943, 11338, 28978, 10839, +26977, 31184, 11965, 31888, 9658, 8759, 10871, 31494, 5754, 26630, 26955, 16221, 14514, 21887, 22776, 13423, 4428, 9400, 8679, 29941, 20734, 3791, 20531, 8366, 8941, 21248, 15986, 8116, 32586, 12196, 18955, 26795, 10613, 30921, 25916, 20271, 6912, 4019, 18997, 12666, 30649, 13184, 28887, 12395, 2303, 18895, 25818, 6731, 28295, 1729, 3905, 16261, 5520, 24436, 24627, 14462, 12916, 7845, 22578, 12734, 20042, 8766, 6762, 30655, +6919, 32678, 18158, 13831, 3929, 4387, 26497, 1811, 17571, 22616, 14206, 19875, 8744, 7257, 26606, 4271, 8986, 30511, 20533, 14507, 22180, 12392, 28969, 2328, 20238, 18779, 15063, 7512, 27545, 21825, 5399, 1696, 21735, 23557, 15527, 25664, 27944, 9256, 27475, 12747, 31873, 8914, 32622, 7849, 16171, 26461, 12120, 25157, 24204, 32653, 6896, 13616, 12278, 3097, 15945, 32516, 21877, 31008, 7260, 16654, 20065, 12659, 18351, 9032, +3448, 1110, 1928, 31392, 10367, 29404, 11371, 9472, 5550, 11226, 17321, 21721, 4919, 29441, 14110, 29123, 29327, 21007, 9972, 8837, 24104, 25917, 8585, 13213, 24157, 15845, 29868, 11454, 28504, 15451, 20486, 31952, 16561, 22414, 30576, 26928, 19050, 9179, 3632, 24600, 20405, 20953, 13553, 25324, 17627, 27664, 21680, 14186, 15903, 31652, 23023, 7239, 24801, 31608, 20453, 16190, 14685, 17553, 27644, 10421, 236, 15362, 9605, 16797, +5008, 7413, 10958, 24059, 16592, 14590, 15891, 4230, 2776, 29445, 29554, 20403, 24341, 18466, 1821, 7476, 17350, 24844, 14715, 9383, 23684, 2400, 25573, 5601, 19953, 20449, 16022, 20189, 3043, 25627, 4219, 8052, 272, 15177, 32111, 16864, 29767, 15234, 21094, 32543, 11911, 17881, 20178, 3484, 3579, 21999, 10960, 20930, 14075, 25676, 30313, 4991, 28076, 23119, 10592, 15262, 10800, 26614, 2683, 13844, 19473, 6902, 21896, 19745, +22079, 21239, 3842, 19079, 3705, 24936, 18854, 15617, 10049, 6265, 19101, 13629, 28264, 30062, 1791, 9572, 22970, 32104, 14563, 18278, 22455, 25156, 772, 488, 19002, 3456, 14332, 5708, 10358, 3460, 25453, 32438, 24699, 29295, 18749, 28404, 21464, 4835, 11253, 31513, 11100, 30355, 12374, 6597, 27649, 14165, 16169, 17851, 13502, 30732, 3361, 3189, 23120, 4134, 3677, 9355, 7590, 18009, 15063, 17948, 21469, 7748, 17618, 13400, +4276, 3599, 9037, 25740, 8435, 20290, 24485, 19535, 17877, 4092, 26132, 12758, 18257, 9533, 30609, 31759, 7498, 1203, 2181, 30618, 5337, 5858, 7205, 12927, 23868, 22268, 30875, 12569, 30017, 15726, 25970, 1525, 19325, 2239, 27265, 27760, 22529, 18982, 14528, 7639, 23074, 7892, 20397, 8564, 17426, 18239, 7555, 24924, 19442, 9736, 22774, 24779, 15595, 29980, 4938, 6695, 19480, 3045, 19264, 16729, 18771, 12466, 18254, 5329, +14705, 12751, 321, 4467, 31734, 14849, 12106, 22040, 22742, 32503, 30604, 7400, 17974, 5392, 32324, 4648, 15128, 22330, 29427, 30723, 19542, 1597, 4650, 6255, 4643, 23915, 22984, 23414, 3613, 8471, 28743, 18319, 21222, 29065, 22786, 20188, 11146, 2124, 9461, 1120, 1859, 7297, 8520, 19834, 12689, 8076, 24482, 27818, 30407, 21142, 25773, 17181, 22739, 30424, 23436, 27382, 21571, 13653, 18029, 25184, 22124, 14004, 10735, 10578, +10301, 753, 30767, 21448, 2877, 7460, 22568, 4737, 14757, 31089, 24571, 27447, 6397, 16285, 22497, 4036, 4659, 15502, 21218, 27399, 13158, 11886, 22013, 1961, 25539, 7274, 27146, 14895, 21279, 5113, 25474, 31580, 5867, 23473, 20260, 8744, 30933, 10061, 13481, 12922, 8382, 5284, 7601, 14779, 21570, 30098, 18816, 26229, 12833, 7266, 20860, 25991, 19152, 10106, 27953, 11924, 17380, 22331, 26819, 5891, 27444, 19525, 4704, 543, +10230, 24964, 9288, 8395, 2257, 22769, 21318, 10639, 28054, 28919, 25419, 16856, 26250, 11467, 10317, 6315, 18733, 31178, 32306, 5117, 8516, 27491, 17041, 25896, 17054, 11093, 31788, 11731, 30618, 3724, 12274, 8081, 28688, 21562, 16476, 30946, 11564, 5026, 8817, 6850, 1178, 1468, 23706, 27428, 12935, 1255, 975, 31668, 32433, 513, 4018, 8181, 28005, 21059, 1310, 12291, 32152, 330, 24022, 30003, 4054, 3529, 5316, 32742, +25091, 21792, 30920, 3887, 26819, 6970, 10737, 27997, 8438, 1675, 22657, 21374, 2931, 23632, 20274, 2596, 24145, 24292, 10778, 19382, 12584, 12088, 31674, 11968, 12418, 22928, 9203, 16472, 26457, 14519, 16446, 18781, 3544, 14599, 22668, 30363, 21569, 638, 25592, 30007, 2313, 15481, 18613, 5244, 6345, 6120, 7841, 30490, 30412, 18619, 17105, 10228, 30707, 16011, 22197, 10357, 6171, 31400, 26829, 32629, 13152, 10507, 18642, 16696, +25106, 8542, 14291, 13907, 9180, 7115, 11147, 11494, 22596, 29760, 16738, 28941, 3112, 24579, 26663, 757, 10430, 11000, 10985, 8369, 27011, 414, 18726, 415, 31815, 12787, 276, 12199, 23295, 18918, 28895, 15633, 27460, 10418, 29541, 3873, 17533, 7920, 15367, 7361, 4912, 32105, 3534, 8025, 23917, 30197, 8782, 1579, 8430, 19767, 9949, 2673, 20182, 28675, 3088, 19229, 8695, 3364, 31428, 31990, 22282, 27555, 14855, 16975, +5205, 11628, 20848, 22738, 19548, 3447, 30099, 24461, 2784, 865, 32486, 26701, 31062, 8500, 28281, 6724, 28267, 5462, 9398, 15681, 1369, 12486, 2142, 10064, 15851, 802, 9286, 5365, 28357, 24142, 22340, 794, 3002, 10420, 23532, 22551, 13867, 20863, 14244, 16652, 21728, 13962, 10585, 20023, 22462, 6098, 26747, 17961, 11560, 3377, 875, 12930, 15864, 3017, 22994, 31715, 3820, 32281, 4312, 32177, 23655, 26653, 204, 26657, +4305, 23736, 16440, 18173, 11832, 30684, 2057, 792, 11878, 12642, 20815, 1572, 18741, 14795, 19534, 30301, 18172, 20409, 10463, 1268, 23426, 690, 215, 27246, 203, 4528, 26656, 23858, 31181, 26860, 17747, 2718, 17828, 1420, 20891, 29660, 32104, 22948, 30453, 11215, 2823, 18500, 12787, 21564, 527, 32321, 19097, 18700, 19962, 29561, 19968, 10621, 30251, 20184, 5099, 30454, 24712, 31755, 21544, 23125, 25847, 6523, 25843, 10908, +7943, 13967, 7800, 7280, 4147, 5485, 18495, 6970, 23986, 31282, 28534, 24513, 30836, 14864, 10445, 18030, 11657, 30414, 28651, 9140, 17830, 983, 6826, 9774, 32738, 28370, 131, 25818, 2125, 25974, 3958, 10069, 7173, 11758, 17349, 11321, 17244, 3076, 18291, 8462, 1590, 14058, 207, 32426, 28922, 10653, 17689, 7811, 8299, 13572, 16951, 26129, 14555, 23777, 3135, 14526, 19379, 3266, 7576, 21504, 29240, 11534, 31573, 3646, +23292, 16154, 14967, 7768, 19230, 490, 16230, 20821, 14548, 16438, 20479, 10702, 27091, 5400, 18513, 2622, 18973, 2696, 28751, 760, 26473, 31886, 15286, 13084, 2384, 22862, 1821, 31624, 1628, 626, 2502, 24921, 16781, 17469, 32689, 3243, 17960, 16152, 24064, 32508, 32590, 11776, 10443, 26913, 17176, 28956, 29535, 3381, 31653, 25518, 4142, 25358, 24636, 19428, 5675, 27020, 9523, 7496, 25876, 11151, 8122, 28379, 3304, 24903, +13080, 3226, 28147, 31040, 19378, 19443, 30781, 19200, 31219, 8456, 13345, 15628, 4644, 10112, 19009, 3529, 2862, 23151, 28888, 27498, 9812, 1795, 21750, 19335, 9291, 14858, 30486, 17413, 10469, 1023, 9549, 23550, 4249, 4928, 21822, 23627, 24371, 19835, 10059, 22823, 28291, 23404, 5683, 168, 748, 24692, 3697, 3610, 15076, 32585, 31108, 24888, 1612, 20090, 11455, 10903, 2180, 9173, 28317, 12650, 10196, 5098, 3432, 14445, +10026, 25254, 5304, 1629, 12322, 15363, 24452, 7845, 5999, 30135, 8013, 6747, 22060, 11711, 10357, 4368, 11528, 8697, 29256, 13141, 28787, 7943, 24044, 30968, 17116, 19593, 10850, 27313, 24691, 14282, 8990, 1949, 6768, 14295, 3579, 19090, 29658, 28031, 26936, 2890, 25399, 2181, 9637, 14691, 13892, 19995, 19059, 25421, 28692, 15547, 5794, 24712, 23490, 29838, 22912, 7838, 16664, 994, 2383, 8587, 15276, 11374, 10537, 22044, +25669, 14116, 8367, 22559, 9379, 2535, 25449, 2010, 4716, 2319, 16701, 18609, 22314, 2992, 11262, 18238, 18539, 17056, 10182, 9261, 14126, 326, 17100, 30790, 1320, 19483, 6610, 16596, 30857, 17147, 5873, 23758, 31263, 14240, 13550, 7874, 16775, 6231, 9885, 21491, 8550, 26586, 7332, 30864, 29579, 18594, 16335, 15350, 2882, 26517, 24612, 17009, 26844, 8944, 15031, 28164, 28427, 21641, 11993, 26517, 6020, 17866, 17507, 4515, +32106, 31057, 12390, 16113, 4521, 22275, 4836, 13071, 16093, 12169, 11168, 12904, 30763, 27503, 28255, 878, 21252, 20099, 17887, 15328, 29043, 150, 10725, 24702, 21792, 22718, 18451, 27812, 7816, 3191, 32328, 7154, 1480, 11950, 23267, 6001, 1457, 28103, 19073, 17550, 7504, 30241, 30455, 5500, 24976, 25942, 6378, 13460, 13273, 24265, 28789, 9548, 24415, 6746, 1482, 13439, 29464, 19934, 8484, 4512, 23125, 8044, 11666, 24605, +19994, 2165, 30607, 21451, 30268, 16912, 6233, 5005, 14385, 3920, 10505, 6593, 29862, 16883, 20053, 10367, 8380, 16074, 19915, 27, 22820, 21398, 13467, 19516, 8564, 21951, 24028, 31689, 29995, 2926, 23526, 17221, 5091, 21365, 5904, 2592, 5509, 12137, 7597, 19894, 16058, 18102, 26487, 13152, 2217, 13773, 23520, 10597, 29847, 10667, 10624, 19900, 32065, 24091, 6648, 7861, 13274, 30677, 6782, 10501, 835, 30309, 27722, 5927, +18906, 858, 8519, 24416, 12996, 16116, 11542, 29054, 1450, 5262, 9438, 3667, 19035, 190, 14264, 16114, 10858, 24888, 3246, 10155, 16212, 9895, 18017, 29486, 7804, 24799, 7220, 8639, 22340, 2174, 14566, 8479, 3033, 23085, 127, 16029, 6433, 11669, 12315, 7883, 16931, 21753, 11550, 3198, 21944, 25814, 19313, 34, 17935, 22559, 10189, 1379, 32454, 28206, 30865, 7490, 20238, 5317, 16130, 9810, 7492, 30696, 18289, 10525, +21014, 18416, 26554, 27447, 30086, 6101, 2563, 14249, 27854, 14113, 17448, 17030, 7160, 3993, 17064, 25095, 26552, 27254, 26474, 26239, 22692, 24571, 961, 10162, 29889, 17091, 19973, 4613, 15020, 5494, 15138, 3266, 23911, 8924, 30713, 21229, 15025, 508, 2710, 10111, 14622, 20158, 27142, 21782, 24151, 11438, 14109, 17936, 5924, 7815, 11407, 28617, 32386, 12368, 6011, 29507, 29460, 25984, 1352, 11712, 31479, 16490, 14978, 22622, +25414, 12923, 11083, 7671, 13432, 13793, 17783, 28054, 1184, 12157, 17068, 25335, 23595, 31177, 10503, 29520, 6224, 21910, 25369, 5842, 1511, 31380, 2582, 30971, 24597, 3934, 9915, 23308, 20425, 24893, 13162, 13071, 5048, 24245, 20743, 18480, 5270, 5758, 13766, 6454, 17915, 30834, 31790, 8742, 29243, 9525, 5494, 2699, 31436, 30863, 8542, 179, 29476, 11124, 31150, 21305, 15058, 8297, 11845, 2715, 422, 25007, 15787, 5470, +16484, 3762, 23951, 21754, 9520, 4949, 28209, 27435, 3016, 27231, 3409, 32259, 3988, 8904, 2191, 2656, 6999, 10733, 2835, 3707, 21857, 1217, 25012, 4147, 9514, 4089, 6863, 9936, 29096, 22650, 15407, 12812, 26412, 6590, 1799, 3164, 11539, 30008, 30599, 14555, 24471, 1240, 14047, 28459, 10144, 16238, 31116, 17144, 26971, 1183, 20851, 16060, 2401, 13096, 20207, 11915, 17185, 27070, 21852, 13514, 16952, 4491, 26326, 10596, +11081, 28125, 13760, 22620, 25365, 11591, 4408, 17068, 12832, 18455, 12760, 22976, 1925, 11108, 7352, 28896, 12291, 28204, 12188, 14692, 8532, 32395, 26608, 25717, 26698, 15692, 6463, 10882, 20183, 22, 21479, 31264, 28147, 2471, 21116, 20745, 14063, 25524, 5045, 26895, 11211, 17805, 17103, 13136, 28913, 24456, 9264, 8437, 19892, 21452, 23129, 28424, 21080, 16969, 21373, 15010, 32661, 27837, 25892, 20076, 27859, 14603, 18572, 23238, +17075, 6921, 11215, 31138, 32445, 16261, 25265, 10889, 1298, 9600, 24025, 30212, 1288, 522, 5881, 21180, 21974, 29010, 16836, 10286, 13212, 5442, 25296, 13105, 511, 18421, 414, 28370, 256, 18986, 18840, 17331, 25907, 30056, 15701, 25585, 13549, 8198, 3706, 14847, 17799, 27731, 12291, 19087, 28253, 18172, 7500, 17460, 14415, 24336, 27746, 27627, 29778, 20275, 7964, 30289, 5928, 8378, 25891, 6184, 27365, 11964, 23516, 20504, +9252, 6449, 13321, 22801, 14648, 17027, 4880, 32447, 11991, 17172, 18766, 7476, 2576, 26266, 24936, 16991, 17835, 19915, 11850, 14845, 7422, 19815, 12367, 13350, 28193, 5490, 19534, 22790, 17454, 10282, 10527, 26706, 16732, 23848, 16739, 31380, 8108, 21620, 31059, 20099, 6024, 17057, 27575, 8600, 10556, 19744, 25592, 28391, 6891, 4674, 10468, 14313, 24489, 22835, 27663, 19915, 28326, 14429, 9937, 13012, 24712, 20464, 6951, 8676, +11545, 23690, 7288, 19653, 12542, 5579, 6984, 18566, 22636, 1791, 27167, 424, 21535, 19991, 28815, 28426, 24665, 6516, 9971, 16387, 29351, 4866, 3534, 24909, 19296, 13471, 5154, 11240, 1168, 12105, 19916, 12713, 3027, 27204, 32366, 15570, 15, 6582, 1368, 22651, 8373, 28535, 23076, 29909, 15758, 19123, 25567, 7656, 25639, 2771, 24043, 22223, 7637, 27577, 14364, 26933, 8280, 19518, 5405, 9448, 31623, 25321, 22161, 1883, +19757, 21759, 17453, 19772, 28341, 18821, 9656, 3947, 14589, 32732, 1088, 30347, 19087, 26655, 5235, 11959, 29426, 29278, 1414, 4296, 24087, 15778, 31229, 32368, 2529, 3867, 9048, 1384, 29188, 31210, 3267, 16178, 20201, 20720, 3182, 15775, 6774, 12838, 19722, 21363, 12802, 20810, 18942, 31890, 14697, 24178, 11081, 11356, 20688, 12495, 15652, 12008, 28273, 14113, 11608, 30802, 17980, 20656, 32187, 14401, 19098, 2686, 30579, 6532, +23407, 993, 22307, 30181, 13832, 9261, 18776, 26634, 30071, 4950, 25756, 12000, 29128, 4069, 23356, 17049, 16564, 6240, 29057, 12070, 20354, 7897, 10104, 5566, 28553, 9523, 19967, 14884, 12210, 17778, 21416, 2849, 18772, 10955, 262, 32604, 20216, 19038, 26470, 17519, 23988, 19459, 29519, 20349, 23528, 20108, 4630, 7325, 26348, 919, 19395, 13934, 8816, 29499, 19501, 4601, 6255, 6700, 19485, 18465, 24479, 8133, 21314, 10483, +19088, 21576, 10319, 6536, 7846, 4021, 24055, 31834, 23480, 20807, 19415, 14241, 8147, 24045, 21566, 1727, 24964, 8193, 15662, 1012, 4924, 2395, 5614, 11179, 9095, 25099, 29644, 806, 465, 18190, 11289, 19553, 6998, 21608, 26090, 14844, 25630, 17377, 13911, 16342, 5416, 558, 30583, 13563, 24604, 19381, 15291, 16800, 27574, 30953, 17813, 32499, 580, 23427, 10910, 9675, 15758, 7787, 10482, 16223, 25977, 21771, 3009, 208, +10612, 29099, 15052, 3474, 13708, 28963, 19816, 19125, 29522, 17632, 32688, 21358, 4245, 15211, 5390, 31820, 13396, 23203, 31551, 13976, 13862, 9693, 23652, 29621, 17480, 1366, 13076, 10690, 23137, 16085, 10898, 981, 12416, 25950, 4455, 26125, 22146, 24272, 12482, 18900, 9136, 12402, 7490, 13381, 27614, 12880, 12433, 8242, 3316, 11216, 22219, 17178, 20910, 13103, 14031, 5622, 14469, 27108, 16312, 4838, 10425, 27210, 5820, 22842, +20393, 10275, 16199, 9771, 1779, 28681, 28671, 10915, 8315, 3393, 24297, 3161, 16273, 3962, 11404, 19589, 15179, 855, 4000, 3321, 13958, 18031, 8943, 28427, 12371, 25256, 497, 22797, 19698, 6317, 12871, 7323, 16593, 29070, 17094, 18372, 24983, 12997, 29288, 530, 16390, 20817, 3692, 32664, 24779, 15096, 19485, 7190, 15951, 23485, 10511, 29909, 8749, 19455, 25568, 21120, 11943, 26065, 11149, 31641, 32383, 24020, 6197, 16208, +20322, 23291, 1812, 12537, 3521, 31100, 13068, 19911, 19149, 16760, 19807, 11161, 31856, 6525, 18351, 15039, 30010, 28863, 12180, 5991, 15550, 4980, 27112, 27493, 31045, 5493, 26366, 30660, 29514, 32563, 14100, 17068, 23087, 15913, 29606, 26608, 14245, 9906, 13751, 627, 26666, 791, 11788, 25754, 7316, 30139, 8025, 4558, 26234, 20205, 10550, 9016, 25185, 4894, 3741, 23462, 10387, 30108, 21355, 7133, 29903, 2687, 24202, 20222, +18600, 21040, 14062, 78, 30946, 27814, 705, 24844, 28605, 12493, 17830, 3153, 9864, 25855, 7711, 3331, 13292, 18261, 12347, 5709, 23155, 16089, 29171, 775, 13429, 17758, 7908, 10564, 20446, 32110, 30787, 6278, 20382, 12081, 6356, 18560, 7127, 7061, 10636, 2964, 19554, 28466, 6117, 29419, 21553, 13829, 32750, 2077, 32090, 12329, 7786, 22478, 28418, 4190, 23253, 9079, 21948, 31161, 19644, 9626, 30504, 17663, 15905, 18118, +29744, 22261, 3911, 4104, 29323, 14547, 7068, 16109, 10246, 13186, 12760, 31799, 27015, 12742, 1109, 26337, 25072, 8895, 16047, 20722, 13085, 6532, 29802, 2266, 4926, 16678, 11892, 2662, 1573, 27797, 20780, 31317, 17291, 24691, 2653, 13846, 6471, 9722, 29955, 16717, 22908, 9948, 15748, 17155, 22690, 16857, 10724, 14994, 25753, 26772, 2949, 6070, 536, 32751, 8336, 5462, 16661, 20229, 8124, 18234, 15258, 28905, 16783, 32549, +20828, 19437, 13627, 27299, 29159, 10815, 11248, 19299, 20763, 26997, 3686, 10685, 11086, 14410, 25680, 4071, 8414, 28629, 10142, 8951, 28612, 18478, 14413, 12505, 5939, 22538, 30739, 21198, 18675, 14754, 20979, 6735, 1423, 1839, 1267, 30582, 12654, 12515, 17113, 649, 6744, 20799, 11334, 17831, 2442, 4246, 21902, 10856, 107, 32044, 19807, 28719, 17755, 1453, 8456, 23694, 23991, 6427, 12124, 9898, 21182, 336, 16633, 22605, +2175, 17900, 20420, 14829, 30416, 4765, 15478, 4392, 25565, 26812, 22223, 28007, 31059, 11358, 6095, 31166, 10634, 25903, 27118, 28389, 27356, 2806, 19316, 18579, 9234, 31440, 28477, 30416, 31776, 12342, 20253, 1183, 30243, 7905, 16012, 27891, 12671, 31490, 32283, 5468, 25535, 21739, 707, 23826, 329, 6802, 22224, 10963, 32705, 16574, 6585, 27293, 19381, 25901, 13104, 28615, 24573, 8813, 26263, 23582, 21156, 13748, 24765, 18631, +21654, 8010, 13754, 1557, 6732, 13269, 7025, 32267, 2240, 7732, 23325, 2569, 14534, 12782, 13533, 14472, 29356, 20118, 8997, 15969, 13251, 22102, 11816, 5056, 30915, 5311, 28638, 19303, 19060, 20636, 5166, 7946, 28646, 18920, 9503, 2610, 32190, 16528, 2110, 1662, 24260, 25435, 4232, 6026, 5449, 17765, 20498, 2038, 5115, 29496, 18007, 18366, 18830, 29824, 23422, 16977, 2367, 19293, 3513, 21427, 7161, 8679, 29373, 3039, +27600, 6108, 5649, 27022, 22636, 7759, 28684, 14128, 427, 148, 20155, 5876, 17913, 7885, 7914, 23028, 4613, 25922, 8626, 23443, 22978, 32049, 7653, 25345, 18574, 11166, 14005, 25735, 19845, 10610, 28774, 14677, 16719, 1655, 8931, 6587, 9415, 4848, 20716, 9842, 4996, 8103, 15718, 22910, 15988, 23633, 13170, 20602, 16787, 21797, 11277, 6997, 21078, 18930, 32342, 6884, 30096, 13579, 32619, 17174, 24190, 28625, 31851, 8141, +30280, 8015, 14728, 6927, 12863, 2676, 16769, 17859, 10779, 32488, 8001, 26768, 23353, 21172, 14602, 7372, 10201, 25879, 14369, 31279, 12042, 13943, 5395, 9370, 27523, 5246, 26544, 18945, 1103, 25628, 27086, 31383, 875, 9046, 5543, 13738, 11723, 22312, 31597, 22502, 22032, 6831, 16502, 12617, 28003, 31104, 19989, 5436, 24216, 1590, 3947, 3490, 15534, 9342, 12860, 10289, 14588, 6637, 29234, 15691, 32265, 23552, 14306, 372, +32598, 19849, 14110, 11553, 9394, 12939, 1288, 31426, 19770, 17790, 11276, 15005, 16127, 31265, 20441, 7575, 88, 24388, 11065, 15622, 962, 23925, 25911, 15550, 30562, 22377, 31241, 30059, 13161, 12780, 30431, 12991, 32629, 11773, 24545, 9255, 24713, 25833, 7914, 11715, 10855, 19190, 26721, 26982, 17687, 14394, 1789, 17775, 6015, 12854, 629, 6977, 4012, 26540, 22528, 1806, 16149, 21001, 31866, 29310, 1013, 29529, 9534, 875, +8535, 1311, 10130, 480, 27144, 18044, 12195, 5231, 4466, 6148, 32214, 22154, 20543, 1235, 7161, 26558, 14090, 7791, 767, 18102, 1563, 23295, 19908, 17713, 11529, 19006, 14255, 12542, 15768, 23789, 13417, 24303, 25100, 23548, 24783, 19476, 8824, 4210, 24708, 13291, 10359, 24154, 2677, 30902, 25389, 9838, 24692, 6711, 17629, 25459, 24813, 19193, 15987, 11954, 4138, 27516, 30960, 18393, 7290, 13960, 9415, 20708, 5495, 1747, +11488, 30278, 21224, 20312, 1721, 13164, 835, 12080, 4550, 3512, 10214, 29939, 13351, 2138, 3883, 30980, 27597, 28696, 17405, 10816, 7882, 21543, 5564, 6075, 7169, 12855, 20035, 16584, 795, 25531, 18331, 12283, 23041, 6787, 32595, 24762, 19951, 663, 4074, 24501, 4175, 14288, 21673, 17526, 16426, 25556, 15739, 11256, 21484, 376, 22072, 29367, 21920, 27637, 2674, 29089, 7724, 22709, 12905, 8519, 15472, 31236, 20802, 5746, +5256, 20629, 30508, 25207, 21292, 1815, 16941, 25468, 16103, 5846, 10226, 32530, 31402, 25965, 11018, 20118, 26342, 322, 16717, 15494, 27959, 19391, 11815, 2915, 9333, 24720, 11434, 24805, 23188, 32236, 30551, 28444, 20098, 28292, 20884, 8622, 30107, 5057, 1322, 13442, 10903, 11549, 13204, 9537, 4746, 24222, 29655, 31088, 24545, 13605, 13814, 19736, 228, 25629, 22652, 9561, 17581, 1318, 1599, 8002, 787, 32150, 3678, 20885, +27674, 24562, 29507, 25013, 29619, 30830, 5688, 7754, 9611, 18892, 17291, 14357, 10347, 14179, 12678, 2124, 27784, 26492, 21860, 28012, 19354, 11744, 4806, 4167, 13063, 6405, 12169, 13850, 5787, 15848, 1967, 694, 7642, 31474, 25707, 4494, 29536, 31395, 12248, 6379, 17520, 29540, 20737, 27867, 10951, 647, 29991, 5967, 27139, 19083, 1211, 13725, 30828, 6017, 17893, 11123, 12422, 30062, 24973, 18210, 13142, 26940, 18904, 20785, +25646, 11843, 25279, 22415, 10471, 4759, 28794, 27991, 1531, 16763, 23090, 12482, 17410, 20313, 18449, 11782, 6628, 19661, 25507, 4688, 25678, 10632, 15811, 5333, 7927, 8016, 23543, 21069, 2188, 9679, 9086, 27835, 21522, 1597, 17482, 31993, 6357, 13508, 27216, 7888, 30272, 17538, 20371, 14914, 5083, 6052, 26696, 11712, 25713, 19436, 16400, 18624, 30068, 32212, 23957, 5227, 7460, 14732, 26297, 9649, 24411, 2615, 4716, 13165, +4213, 22198, 12391, 10570, 2938, 6839, 18458, 442, 24378, 6061, 15357, 29461, 12114, 9285, 8405, 5059, 28721, 24806, 23683, 26022, 24250, 14872, 31249, 31710, 29604, 24778, 8591, 21247, 27394, 13307, 1645, 31607, 2737, 14036, 9409, 5676, 20875, 27867, 6118, 12485, 1161, 21475, 9179, 13275, 30761, 17584, 18334, 26714, 9622, 9250, 19968, 1104, 24122, 18450, 47, 20959, 10460, 8638, 9438, 5086, 21946, 11083, 3925, 24683, +25119, 13334, 30359, 13227, 8434, 3710, 25712, 9595, 25185, 2123, 22870, 23178, 19708, 8436, 17125, 29330, 17686, 4325, 30435, 9041, 22775, 30482, 30000, 468, 6352, 6670, 5554, 28298, 17754, 9480, 20214, 10105, 22814, 17805, 23332, 31248, 21515, 16277, 8075, 13933, 18400, 30945, 4343, 5340, 6614, 21468, 1903, 24300, 25794, 32338, 573, 15801, 30052, 30573, 16269, 3636, 4476, 21824, 31935, 22230, 31304, 19381, 32335, 21350, +4418, 22900, 19831, 25934, 6409, 27906, 7099, 24809, 26084, 11442, 30150, 32698, 143, 32053, 24230, 25937, 31623, 24804, 8970, 28907, 22609, 25240, 32543, 27085, 14296, 31710, 16547, 12832, 18323, 16115, 1414, 22742, 6247, 21245, 15908, 12656, 16384, 23007, 4697, 9700, 1681, 2079, 9630, 1824, 1364, 1092, 27761, 219, 25896, 3964, 29126, 15738, 29204, 28902, 10055, 10732, 27844, 26603, 23564, 13400, 9950, 24978, 3374, 16197, +13456, 19282, 28853, 29840, 9521, 782, 6772, 11202, 2862, 16402, 13027, 4226, 17494, 8020, 4446, 10623, 11984, 804, 26361, 8420, 29706, 3648, 19152, 24783, 30251, 9948, 5415, 7433, 2159, 8789, 23630, 15615, 28071, 19715, 12687, 4824, 20498, 19459, 16026, 23360, 3093, 29053, 27586, 20587, 4306, 32032, 31210, 16290, 69, 24803, 24711, 29775, 28452, 11095, 21790, 25935, 21044, 27205, 601, 23203, 3226, 24231, 6050, 31297, +11179, 18737, 3353, 31677, 5428, 19380, 22269, 8521, 15665, 17087, 29108, 19971, 16352, 27551, 3494, 16421, 19586, 28205, 13428, 15270, 6532, 2451, 8438, 27576, 29656, 9039, 18011, 115, 502, 24061, 31412, 11681, 10030, 1998, 10590, 15458, 21378, 91, 23979, 4275, 17179, 20320, 24247, 763, 15103, 27741, 17184, 1921, 23178, 30612, 17192, 29710, 295, 25630, 24519, 29952, 1901, 9762, 30067, 2403, 1056, 28711, 14085, 11086, +30709, 24675, 26545, 19319, 24767, 17756, 23595, 9178, 5308, 15074, 9941, 20411, 10047, 27125, 22333, 457, 24969, 6757, 30167, 25265, 32387, 21918, 22449, 1520, 31681, 19748, 3923, 32737, 15691, 18008, 11055, 13633, 9916, 4832, 184, 1915, 22589, 23779, 11093, 27897, 6085, 21034, 15541, 16132, 15391, 5106, 16589, 7592, 11863, 13989, 89, 11482, 3139, 22538, 13002, 2052, 9518, 16925, 2021, 25210, 2166, 13077, 6075, 12082, +17909, 6259, 13997, 7730, 30039, 25090, 2860, 3356, 13356, 18401, 19489, 28747, 23507, 3310, 3571, 2602, 17299, 3661, 14084, 20439, 26199, 27086, 22491, 2950, 11243, 24513, 28160, 13409, 4822, 1467, 25491, 22731, 7726, 6720, 30462, 4997, 31810, 554, 8354, 12398, 18955, 27843, 8377, 9694, 31153, 11949, 12296, 15685, 15610, 26380, 3356, 9041, 20698, 25847, 11991, 31941, 17592, 7383, 12583, 22414, 8850, 5306, 12378, 16577, +12027, 10072, 21574, 11069, 10626, 29928, 23468, 29581, 25003, 31845, 6507, 23389, 11026, 18803, 6306, 26636, 12415, 9662, 2910, 345, 2741, 14901, 32286, 20334, 22285, 12101, 9980, 31135, 17408, 22358, 14944, 29435, 32430, 3751, 7736, 10288, 911, 31204, 7101, 25915, 30282, 13608, 16536, 8540, 32411, 22842, 2409, 12058, 32504, 5319, 12403, 2477, 20220, 11922, 22811, 9737, 24023, 24, 8105, 8663, 22382, 23049, 5330, 22045, +26800, 13067, 32333, 27712, 11503, 6667, 20859, 9017, 20275, 4627, 17558, 19919, 27469, 19967, 31977, 27205, 25286, 11613, 29682, 12738, 23535, 19726, 22476, 14790, 19750, 30581, 23454, 9364, 20862, 28784, 31409, 14895, 9083, 30975, 9839, 20587, 4874, 30698, 29604, 25149, 2557, 14394, 12300, 30026, 1593, 11510, 24463, 26879, 23123, 21377, 6850, 13890, 8335, 29326, 28680, 28085, 27139, 19366, 4682, 15233, 15383, 3323, 30128, 24466, +1530, 7199, 12285, 6404, 5129, 9122, 31554, 7686, 23516, 11086, 4944, 25110, 22596, 29407, 19221, 12951, 18017, 26071, 26841, 26352, 22629, 22754, 21670, 17000, 9352, 26352, 32234, 24735, 29675, 29594, 16434, 31206, 4026, 28719, 4842, 9155, 5073, 3628, 16842, 28590, 14715, 21786, 20932, 4543, 18426, 7385, 17495, 3675, 689, 11568, 30027, 23318, 1554, 18929, 7551, 10907, 12513, 7017, 2874, 9421, 3843, 19308, 7859, 7869, +15260, 12701, 17025, 20333, 16330, 1099, 16155, 31045, 22885, 4319, 2820, 8543, 11705, 20315, 12218, 12394, 31884, 9478, 2944, 670, 28407, 10495, 11577, 8153, 17512, 14452, 17574, 21356, 992, 25433, 29225, 16252, 5366, 13482, 3818, 21696, 14581, 19973, 19973, 4699, 24293, 22794, 13242, 3230, 10341, 25461, 15624, 9457, 2171, 18568, 10128, 30578, 29064, 21705, 5963, 13808, 3389, 23537, 2396, 4382, 16202, 31622, 20634, 21569, +12336, 24452, 10497, 26918, 11658, 30471, 31617, 3183, 20497, 12091, 6413, 30838, 4784, 22037, 7528, 6955, 7837, 17656, 4766, 4133, 6593, 10729, 17942, 9983, 1499, 20338, 14365, 17701, 19192, 2231, 6502, 31529, 26684, 17000, 25679, 5574, 14703, 24528, 8757, 2432, 3851, 15170, 502, 8636, 4439, 8030, 15591, 12276, 25686, 20357, 16410, 32280, 31087, 1584, 9495, 32586, 21922, 23860, 17519, 8347, 26091, 24022, 7108, 20007, +8254, 19, 25581, 22957, 24547, 1570, 25389, 28398, 16740, 25891, 4266, 21179, 1154, 19858, 688, 26840, 7447, 17098, 26352, 5766, 18682, 3079, 5584, 7836, 26939, 23104, 16183, 20263, 14358, 23291, 7502, 22612, 23310, 316, 12801, 15089, 1886, 5422, 10720, 18627, 31313, 14986, 7038, 32467, 2076, 7726, 26540, 9524, 24824, 20124, 15290, 10738, 23204, 20875, 18575, 17375, 11211, 1990, 4870, 25569, 25282, 12373, 15413, 15824, +12689, 28214, 30914, 14575, 868, 8866, 434, 32181, 23852, 7473, 31881, 25929, 15199, 25653, 2685, 7256, 13009, 17975, 17994, 3445, 6082, 3801, 20821, 17293, 5792, 25691, 10094, 31074, 5296, 25507, 14130, 17985, 20953, 12276, 32561, 21821, 21142, 227, 21235, 12227, 7700, 20348, 5388, 22900, 13233, 8073, 30156, 26242, 26048, 15382, 29688, 32131, 19184, 17741, 16656, 24976, 10664, 26751, 23282, 15961, 19490, 4644, 1178, 7676, +16921, 971, 29497, 5295, 1199, 17964, 17522, 8899, 5544, 22910, 31799, 18777, 30983, 29187, 12252, 24264, 11802, 9172, 23627, 30986, 26913, 7515, 23194, 4809, 1498, 13708, 20770, 20989, 18352, 21949, 28665, 2505, 22920, 25394, 7801, 24119, 10591, 25323, 251, 16135, 15466, 32050, 2145, 13681, 28470, 14397, 5177, 7504, 23569, 28804, 5722, 17714, 3552, 28916, 22523, 5050, 9856, 10526, 26039, 28208, 32475, 21936, 30714, 22627, +14563, 5747, 13979, 25154, 31070, 14230, 8521, 13768, 13512, 10666, 27450, 9214, 25063, 32627, 16718, 15864, 28664, 22440, 810, 32216, 18588, 23334, 4498, 28444, 1092, 30538, 23885, 799, 19706, 21831, 23426, 1501, 27578, 4637, 26655, 25880, 18867, 2409, 6881, 32380, 13075, 1563, 8826, 5371, 1422, 25545, 21235, 30086, 15217, 22046, 29534, 1038, 12612, 1265, 29482, 13704, 31803, 20599, 14503, 18741, 9662, 5161, 20243, 4472, +9799, 14130, 30353, 28666, 16539, 4466, 28278, 29615, 6029, 4337, 2218, 7451, 29882, 23453, 4770, 12331, 12731, 1536, 13369, 25343, 2801, 10084, 6279, 1836, 30683, 20782, 20578, 7578, 25944, 8053, 12050, 2975, 22183, 9635, 31641, 5955, 14101, 27152, 2802, 20130, 31489, 5020, 27582, 28603, 28473, 32352, 8166, 8437, 1120, 21536, 1012, 3922, 31620, 7292, 5758, 29535, 28074, 26336, 4345, 21250, 1621, 16396, 24225, 23805, +26031, 23099, 29760, 7365, 17483, 32562, 27495, 16204, 4814, 22309, 12039, 519, 21893, 20205, 8956, 23014, 8973, 9969, 26936, 7825, 17261, 32694, 4593, 12567, 26263, 8938, 1050, 27884, 25334, 25275, 18921, 18598, 15606, 15913, 25963, 321, 15707, 20690, 16525, 20521, 10232, 28564, 21041, 32125, 16002, 29997, 22371, 24975, 7198, 16539, 33, 24459, 16466, 4626, 4259, 9961, 13564, 5309, 5077, 6131, 30584, 23999, 24729, 13423, +7144, 17924, 13744, 22852, 5846, 30270, 10605, 16078, 26066, 31646, 15436, 9300, 28876, 5039, 1508, 3306, 21579, 1541, 27766, 5277, 6167, 32025, 15238, 19731, 4566, 20315, 25862, 2382, 11546, 17823, 15805, 18691, 2979, 29550, 8775, 8826, 27052, 19380, 24904, 20350, 18259, 7572, 29651, 14367, 12612, 31159, 17673, 1423, 32700, 12671, 6700, 6099, 11928, 21938, 25830, 16494, 9485, 18925, 18877, 21032, 3980, 1914, 6955, 6960, +31464, 15730, 15786, 25748, 2342, 7922, 13331, 20601, 15495, 10214, 2200, 28107, 8605, 19874, 29530, 8537, 32545, 3462, 14636, 11706, 25400, 7698, 28200, 2117, 26623, 14309, 23149, 30604, 16224, 30104, 4796, 14920, 13066, 20582, 7901, 15409, 28504, 21232, 3242, 11231, 31446, 5443, 6570, 7283, 25317, 3332, 15820, 25094, 6794, 30456, 4032, 32194, 5386, 32233, 1544, 32010, 13774, 24693, 29846, 29998, 22030, 1874, 12151, 2328, +22456, 20052, 17737, 18192, 8516, 20980, 29424, 7194, 26423, 3226, 14477, 18972, 6559, 30297, 11298, 13353, 27985, 15331, 12780, 603, 14796, 14324, 32613, 28570, 6249, 29691, 25801, 28279, 31565, 5184, 30608, 21253, 25236, 15577, 6678, 984, 3789, 3334, 8178, 30212, 6560, 22655, 16416, 13119, 20184, 27715, 26473, 15401, 10278, 6485, 16004, 25074, 20809, 15850, 20876, 27058, 12773, 13909, 22570, 11571, 19093, 20410, 56, 11561, +3219, 6734, 12545, 7009, 10068, 20723, 4453, 16629, 10610, 20870, 29748, 30794, 15817, 23453, 13427, 26095, 29938, 29432, 18401, 17979, 12514, 6509, 12270, 25287, 20419, 2072, 4090, 6744, 22482, 4147, 18306, 25701, 10881, 30851, 32710, 20950, 18807, 4396, 4811, 29417, 25266, 1791, 27444, 8315, 25245, 8103, 1642, 22415, 4767, 20043, 7627, 17281, 26552, 19897, 9801, 14203, 21969, 13891, 20948, 11683, 18038, 6486, 4616, 28920, +4569, 4559, 17102, 23376, 8955, 21913, 20026, 1453, 23704, 14702, 9768, 16181, 22805, 11410, 5829, 27573, 31453, 13456, 12086, 25237, 585, 21887, 6673, 22554, 3011, 27621, 1469, 21049, 1339, 6085, 17201, 5908, 10644, 1535, 29285, 19599, 23448, 16543, 21052, 14385, 31245, 30820, 30566, 21282, 9462, 3627, 16087, 8147, 17083, 28174, 617, 17668, 17293, 7290, 7454, 20304, 2143, 8923, 8586, 3482, 15009, 25787, 9390, 25653, +27323, 5907, 12485, 18003, 22450, 769, 32388, 20927, 31590, 30187, 9442, 8284, 1046, 25529, 16432, 18130, 20935, 17049, 3030, 5461, 24339, 10485, 25765, 26482, 19408, 1583, 29964, 1649, 27371, 6586, 27303, 21926, 12494, 7020, 7161, 2176, 7789, 6782, 23104, 6611, 4201, 32546, 14896, 5247, 25307, 31328, 23377, 13475, 15609, 26408, 18936, 7180, 4125, 11933, 894, 23533, 13517, 30858, 25183, 8120, 4676, 19718, 30046, 17170, +26738, 4439, 19347, 1759, 11221, 9683, 8371, 15422, 9461, 23267, 20670, 2000, 21827, 11279, 15475, 4668, 4919, 1643, 11848, 9044, 13577, 12742, 32578, 27094, 10832, 24993, 2446, 15508, 11943, 32492, 32679, 5913, 4163, 19258, 7672, 15385, 28941, 16043, 30807, 5634, 6542, 18709, 7634, 28369, 29989, 23110, 269, 2140, 24753, 12117, 11185, 5562, 24859, 10995, 32656, 2923, 3220, 2334, 18432, 15163, 2058, 18343, 21076, 6222, +4833, 28748, 21607, 1006, 12024, 19646, 6640, 18566, 5588, 14274, 14168, 2809, 4616, 14437, 4949, 29370, 26555, 16134, 2164, 18646, 27129, 2053, 21570, 30349, 4387, 7234, 12744, 6446, 25577, 1052, 12668, 30410, 29801, 1507, 31416, 9057, 21153, 5288, 27623, 26741, 19562, 9023, 29550, 24179, 23461, 1732, 20781, 17248, 17866, 22945, 3126, 12228, 24998, 24696, 9809, 29386, 31930, 22554, 3064, 24739, 23606, 15732, 22381, 20639, +17239, 21029, 29696, 5624, 26317, 24552, 32366, 13112, 807, 29148, 4523, 24268, 30880, 25304, 8748, 15979, 15481, 11875, 28207, 7712, 3803, 5248, 4330, 2966, 27802, 7394, 27705, 18641, 23126, 17319, 6512, 7597, 5580, 3441, 13221, 31898, 27993, 12819, 12242, 28800, 9200, 16765, 20301, 7312, 9301, 29049, 23291, 24782, 8156, 18730, 32494, 11960, 23979, 4056, 14926, 19013, 11450, 9863, 4886, 1808, 27182, 11399, 9405, 32763, +14840, 22627, 31893, 10065, 2678, 11367, 6097, 11878, 28132, 26398, 19191, 4665, 22680, 9714, 29447, 30836, 28445, 29174, 10028, 19656, 462, 24954, 5901, 11913, 2050, 10788, 13721, 29232, 22187, 23127, 29227, 4259, 12986, 28352, 14324, 15664, 6951, 20421, 27543, 2315, 14052, 13966, 6980, 3964, 23680, 3660, 2032, 19357, 66, 12061, 6245, 528, 4247, 12147, 12441, 6297, 22935, 26163, 2762, 12354, 16522, 31989, 16613, 29508, +27574, 30937, 12404, 1757, 18590, 7179, 4073, 32642, 21145, 11053, 3838, 12058, 14713, 5871, 31415, 14779, 17932, 4893, 15308, 22179, 17040, 27749, 28477, 7207, 21144, 31239, 19561, 4898, 30460, 3406, 1638, 25266, 1575, 14043, 27024, 20165, 21222, 31097, 20040, 9600, 9382, 23878, 21658, 24096, 29749, 20305, 6107, 14913, 25198, 21415, 4325, 9470, 16397, 34, 16677, 4773, 31273, 3470, 9672, 28965, 6876, 11310, 21464, 8451, +25353, 15720, 28617, 13808, 14049, 15889, 23408, 23431, 6999, 12298, 14759, 3981, 32603, 20867, 18894, 25034, 9514, 23219, 1736, 25911, 23253, 18414, 30685, 21758, 21884, 7589, 17956, 28761, 18899, 6652, 4444, 11485, 22372, 293, 25293, 3653, 16182, 15933, 27084, 23182, 28231, 9076, 27163, 28066, 29943, 13289, 20332, 6689, 3741, 22069, 32601, 26994, 7715, 30518, 15985, 29599, 5339, 1173, 25592, 24238, 7825, 30037, 2955, 30197, +30330, 28248, 1082, 13745, 11413, 28166, 4159, 6876, 4474, 31322, 2175, 1649, 11843, 22507, 8339, 15584, 11808, 8172, 9811, 19523, 5922, 25796, 16355, 11261, 26969, 9179, 2731, 2026, 6448, 5687, 32223, 4011, 1167, 537, 17756, 12581, 28703, 21915, 19457, 410, 20469, 21632, 2059, 32312, 11372, 10398, 15129, 23180, 18570, 24940, 9936, 24492, 17968, 26291, 2985, 12169, 2702, 5717, 14195, 9151, 11404, 13650, 13162, 12571, +14187, 30918, 25152, 10122, 20065, 11842, 10532, 7766, 706, 12592, 7310, 12078, 22990, 22439, 2491, 8793, 14611, 12427, 517, 32579, 5950, 3503, 11980, 8652, 9220, 26175, 17803, 20624, 7057, 30965, 427, 21244, 29115, 25580, 31367, 16412, 4654, 9131, 24178, 5360, 21723, 31489, 17439, 11946, 21160, 19930, 20739, 3004, 32357, 21256, 2815, 5539, 24759, 14796, 14191, 1211, 8203, 31995, 21835, 15261, 30192, 22263, 3737, 26540, +15075, 2336, 10184, 19729, 11468, 1595, 25089, 423, 316, 9760, 12369, 21476, 29690, 340, 24480, 29279, 21597, 27296, 2050, 13588, 9324, 16242, 14800, 17527, 15469, 3867, 20, 12893, 26130, 3758, 6665, 8437, 6094, 16850, 28166, 17562, 18445, 20488, 17986, 18761, 30248, 30355, 7469, 27171, 30696, 31950, 23682, 19525, 26478, 25733, 345, 3034, 9207, 15145, 20561, 24676, 19013, 20582, 4801, 12375, 24340, 11467, 20813, 30434, +28317, 16211, 15229, 13994, 3931, 447, 32755, 1412, 30802, 7456, 28583, 28730, 6638, 19497, 15487, 348, 12462, 15833, 3382, 21669, 30978, 23944, 13577, 17223, 11758, 18379, 29599, 3330, 29846, 17644, 996, 25395, 1087, 16225, 6621, 5019, 16672, 6608, 6431, 14707, 14064, 2246, 10669, 20703, 21743, 26157, 21051, 1438, 9222, 24434, 23107, 7432, 15610, 3917, 24656, 27368, 22296, 21487, 30698, 19374, 6363, 31694, 12001, 7450, +15152, 18622, 12469, 31824, 25230, 18900, 13763, 6526, 21146, 24433, 27229, 10122, 17822, 15513, 11560, 27044, 7179, 1899, 1708, 22789, 5816, 26364, 17389, 28112, 15083, 15319, 14718, 21446, 14245, 26719, 28897, 29397, 12573, 8598, 28454, 5035, 27499, 9449, 11562, 15877, 1114, 6023, 25999, 18936, 21536, 4791, 13212, 28715, 6691, 14921, 18736, 12507, 8517, 3357, 7852, 23601, 18676, 22570, 12279, 154, 16522, 8408, 29551, 29095, +17007, 25237, 1363, 11738, 1919, 12925, 27615, 3033, 18948, 20847, 21970, 7717, 25638, 2414, 3664, 32329, 17335, 22401, 12069, 25853, 25758, 19921, 16686, 11667, 9723, 28965, 11821, 26245, 4606, 8604, 22573, 21613, 1074, 23936, 583, 2993, 4093, 28198, 6026, 23041, 16277, 27996, 30758, 9148, 30411, 1655, 8709, 14978, 24056, 20778, 8063, 17046, 7931, 24749, 28713, 17655, 20947, 7766, 11132, 25553, 16371, 937, 14398, 17445, +24873, 14981, 20438, 28966, 10411, 26464, 19240, 26689, 21693, 17230, 3069, 19336, 18885, 11778, 1546, 10173, 32557, 9610, 27220, 7720, 1591, 23165, 25375, 22538, 30932, 3740, 15323, 14535, 4677, 29721, 31980, 29551, 11934, 19650, 25749, 22346, 13346, 12221, 16267, 2271, 29452, 19336, 21607, 15569, 31114, 23154, 25743, 30903, 32764, 20195, 5856, 1587, 10592, 31231, 24126, 8756, 2203, 6681, 23291, 6881, 3635, 22503, 3664, 15569, +9385, 29413, 5147, 22732, 8867, 21414, 25003, 5551, 7982, 13843, 21120, 6329, 4229, 14095, 4464, 4225, 1522, 10320, 5812, 12115, 8784, 29938, 20871, 10987, 3852, 11395, 17868, 7487, 1130, 21532, 23056, 10516, 18178, 28204, 480, 27045, 16850, 25483, 32596, 24833, 6558, 20948, 31162, 10787, 2276, 2858, 15012, 3798, 13179, 20825, 15913, 21963, 17995, 4017, 182, 21847, 15412, 18051, 29334, 16542, 6815, 19623, 27058, 24993, +15059, 27538, 19270, 31909, 20254, 19098, 23974, 26812, 7279, 22368, 4832, 9555, 25227, 19844, 13353, 5638, 7901, 29267, 27601, 25897, 516, 27783, 14976, 15928, 13066, 11543, 32470, 19882, 31166, 26761, 12107, 13457, 21531, 31378, 12598, 9017, 17708, 3805, 3062, 24987, 26173, 7894, 1774, 18632, 27738, 15128, 24270, 2872, 11627, 19103, 28769, 12143, 14119, 10977, 28071, 27185, 22520, 27773, 14299, 20918, 21766, 26407, 1607, 10530, +25017, 14206, 19547, 9957, 18011, 22609, 2177, 11416, 30503, 3951, 30049, 25474, 19079, 21551, 28346, 30706, 7887, 24347, 10081, 22006, 2556, 5384, 16423, 25077, 390, 30723, 13227, 22156, 24362, 14835, 32686, 16611, 29041, 19466, 26568, 14284, 9307, 28745, 25700, 7043, 32697, 22981, 32517, 19008, 11765, 28095, 16947, 19652, 19674, 27028, 8890, 22230, 32413, 25313, 14539, 35, 23268, 27767, 22191, 14862, 9834, 22110, 31473, 6107, +8808, 25274, 20391, 18115, 21251, 13323, 25158, 21180, 3537, 24907, 7421, 15302, 20234, 24368, 2186, 7140, 18628, 11076, 29371, 18273, 3621, 11142, 18308, 26890, 6141, 7732, 8984, 15975, 29842, 7690, 22082, 5882, 196, 9705, 23997, 21447, 23029, 16388, 9860, 26566, 8527, 17281, 9100, 28762, 8881, 11286, 3134, 27509, 22362, 32505, 13015, 25983, 10880, 31323, 20105, 17021, 6287, 29090, 229, 3361, 4012, 22311, 9243, 4208, +32017, 473, 25655, 22278, 16861, 2747, 16076, 25388, 20028, 25176, 21382, 28909, 3694, 24517, 23651, 26056, 24254, 3898, 19271, 2366, 2453, 6609, 19388, 8741, 2931, 19617, 12102, 6943, 9160, 21346, 11151, 8409, 21819, 4038, 30687, 5912, 6786, 13995, 31300, 26814, 6403, 19915, 22956, 10097, 11664, 13839, 3385, 3150, 17737, 22657, 5517, 20190, 29266, 24905, 28931, 32197, 11754, 8266, 6372, 20914, 29612, 17523, 29324, 18663, +21561, 27243, 24575, 28347, 8471, 23107, 22394, 14874, 10254, 12582, 24972, 21918, 26421, 28357, 25069, 11390, 18246, 30586, 31580, 14744, 22723, 27744, 14173, 1709, 3242, 20545, 22623, 86, 5300, 19179, 18749, 26862, 13655, 10556, 22441, 22126, 895, 12067, 4232, 11150, 24649, 29204, 300, 18302, 24794, 25369, 29692, 10272, 23187, 28505, 25017, 13142, 23481, 6422, 14851, 26723, 26968, 4707, 26809, 32268, 23886, 12790, 26362, 4773, +23346, 16036, 26899, 24241, 28103, 31132, 2623, 19985, 27568, 2924, 5519, 19594, 28293, 2444, 29867, 18713, 30949, 22116, 31855, 21662, 28538, 13939, 15617, 22738, 18646, 9658, 22239, 9764, 22448, 15833, 14538, 13026, 31869, 8669, 4499, 27205, 7033, 7123, 14422, 1834, 10047, 19941, 21428, 5572, 22385, 18527, 24285, 20566, 7875, 23373, 9460, 3646, 4544, 25077, 26384, 23190, 1967, 15855, 186, 24415, 31689, 14724, 4673, 30790, +23394, 9173, 25227, 30427, 16296, 6881, 32261, 26343, 26823, 20922, 31915, 16440, 6681, 23433, 4239, 14557, 14038, 13699, 18203, 18582, 6009, 11819, 9004, 7976, 27675, 9190, 32392, 26596, 23915, 4297, 24618, 14541, 13470, 17078, 12200, 29766, 23959, 11694, 23341, 18014, 32616, 22489, 1687, 6529, 13154, 5926, 21086, 27192, 19625, 6521, 13006, 25634, 18341, 22010, 843, 13248, 31200, 467, 7076, 22347, 4764, 31694, 4120, 18235, +16004, 16321, 15233, 7196, 28015, 5807, 25210, 27863, 28296, 26897, 1624, 8682, 55, 22711, 3106, 19681, 29232, 16112, 12547, 14805, 5354, 13390, 28053, 3786, 13857, 2361, 26134, 18622, 1288, 30254, 4089, 17292, 13807, 19322, 24488, 9054, 25129, 16931, 4149, 20657, 11060, 5774, 29339, 11116, 28485, 32445, 30797, 24949, 15789, 10576, 6987, 21143, 23967, 2272, 24930, 5056, 4634, 18296, 23678, 5922, 15782, 27767, 23214, 29590, +14322, 14935, 5876, 6683, 31866, 10026, 27341, 10158, 15800, 23912, 21274, 11517, 23590, 19303, 3698, 6611, 29880, 10685, 27755, 21079, 12958, 19917, 26135, 17592, 5445, 17046, 23514, 21227, 12045, 13960, 18049, 26367, 28895, 23926, 283, 27993, 1184, 27624, 5384, 16984, 18768, 26658, 28501, 9590, 13194, 32199, 16202, 10306, 10117, 11189, 31385, 23075, 31106, 24752, 7899, 3783, 9030, 31413, 25010, 21076, 12605, 10292, 14675, 8733, +1450, 14958, 3958, 2634, 9814, 9342, 19618, 28583, 3233, 15351, 5405, 16427, 14782, 21607, 26733, 24899, 28, 25350, 15206, 31134, 17334, 23105, 2149, 26365, 21750, 27160, 14673, 1588, 4684, 29348, 10321, 6134, 11539, 14279, 8768, 21353, 23622, 28386, 17168, 26855, 10969, 22574, 10514, 25751, 11413, 4479, 17883, 11442, 29829, 321, 9808, 14395, 23427, 11958, 7992, 12409, 6350, 22665, 13997, 11034, 19246, 24318, 17168, 30785, +5830, 25936, 19370, 29452, 21554, 3771, 23539, 32523, 26345, 1285, 25506, 4990, 5764, 10621, 16432, 2825, 10943, 26241, 17220, 1602, 5431, 25213, 14011, 11781, 15110, 28009, 22815, 1588, 19559, 7215, 32373, 25389, 383, 18976, 22073, 21937, 22747, 12844, 21692, 16324, 14129, 14430, 21314, 19893, 25052, 4979, 22718, 3227, 31220, 7171, 4829, 3883, 32384, 18840, 15664, 14726, 14081, 5711, 16315, 873, 12926, 15920, 26262, 13309, +2128, 15568, 2478, 24875, 28412, 24170, 8431, 9774, 5832, 29746, 29667, 30884, 1957, 19618, 1343, 409, 26789, 6172, 4292, 26405, 25013, 19956, 8363, 6326, 25667, 24678, 7199, 5825, 7831, 694, 19134, 9959, 16262, 21612, 2067, 11906, 13014, 10498, 21680, 18846, 7476, 18580, 16963, 9433, 5430, 18306, 9842, 32219, 24479, 14134, 25856, 16724, 1322, 1451, 23050, 26989, 26130, 30250, 46, 1193, 30944, 19180, 11152, 14438, +8024, 13219, 26344, 21038, 23718, 15257, 7117, 31194, 1069, 24080, 7860, 6499, 9618, 17702, 5950, 1329, 31837, 31806, 18053, 391, 489, 8336, 27381, 26619, 5818, 27427, 27812, 3994, 13840, 6197, 18432, 21864, 19416, 12008, 10135, 10366, 27265, 17252, 8793, 28334, 8564, 16653, 2065, 18182, 1587, 8015, 19512, 656, 7053, 4797, 1048, 7543, 13133, 28429, 1394, 18951, 23088, 29207, 22945, 4160, 2636, 8609, 26025, 22052, +20618, 3392, 32419, 15115, 20644, 8444, 10682, 29208, 25097, 12747, 14622, 26684, 20763, 1366, 27341, 27816, 6164, 28389, 2591, 19297, 24050, 3986, 5481, 14370, 425, 28426, 18531, 3061, 4268, 11788, 25113, 24886, 15180, 24764, 7233, 3056, 440, 17915, 32264, 25537, 30663, 14118, 19454, 18658, 15485, 14027, 13706, 21649, 9648, 16298, 8178, 930, 20284, 13659, 15300, 20709, 9318, 1063, 23770, 13586, 12851, 16115, 5704, 28031, +8112, 12937, 31087, 8552, 30853, 30583, 1322, 28748, 11934, 20776, 14638, 27419, 2035, 28344, 16300, 11683, 11874, 24478, 12613, 32158, 5370, 27913, 20099, 14688, 28977, 11101, 28274, 9060, 27217, 1210, 4324, 2561, 14147, 2643, 11113, 12232, 459, 12435, 8212, 12393, 443, 22850, 7044, 2478, 18427, 23344, 14161, 30301, 15054, 26774, 29692, 20424, 21920, 17023, 2344, 18129, 28125, 30618, 27189, 22574, 31828, 31513, 25135, 13208, +1389, 3480, 25440, 1848, 15916, 885, 14241, 16359, 23735, 21285, 18838, 9394, 11861, 231, 6928, 26915, 27006, 3852, 14572, 16158, 20875, 16916, 1519, 16232, 14767, 28708, 6038, 13827, 27454, 31173, 27035, 28843, 1886, 19708, 30691, 17802, 20593, 12164, 1393, 11560, 681, 20231, 20955, 12542, 20463, 27883, 6689, 14701, 31735, 21261, 30859, 19842, 5410, 32378, 3307, 20177, 28318, 9345, 1236, 23004, 7751, 28272, 19079, 9637, +15212, 17002, 27439, 3037, 29166, 28832, 14597, 29847, 16296, 2784, 9621, 3991, 30667, 16311, 18692, 29634, 4804, 16783, 16709, 10214, 16393, 20016, 30391, 11943, 29361, 31628, 2180, 4344, 27132, 21259, 13981, 9576, 5494, 8652, 12613, 1892, 4717, 27210, 31740, 21013, 29995, 8593, 25004, 27894, 24904, 10928, 24761, 29709, 27711, 8702, 7155, 11336, 28718, 4779, 23279, 25311, 3639, 25459, 29656, 30771, 13951, 10869, 7579, 19445, +19522, 20192, 21337, 24239, 14634, 20309, 12484, 11861, 28903, 4720, 6988, 21039, 15648, 31749, 17980, 10591, 7683, 25136, 21927, 3633, 29915, 12438, 28944, 786, 5130, 25832, 31557, 19081, 3934, 6368, 5758, 23456, 26560, 27095, 14927, 8426, 14637, 27411, 20288, 10772, 32131, 27276, 31811, 15011, 26257, 17024, 25602, 1172, 9392, 14761, 4805, 6539, 27199, 981, 7325, 32329, 26814, 6114, 18642, 30748, 12482, 24400, 21436, 6274, +18728, 3595, 14700, 597, 31006, 2220, 11369, 30369, 29496, 10412, 12612, 22985, 27436, 5446, 24157, 4060, 20207, 28962, 10599, 14638, 29944, 17924, 14200, 23990, 24038, 74, 21970, 3752, 24475, 10638, 10026, 10435, 14233, 24727, 11032, 12471, 26947, 22401, 10072, 23676, 45, 22684, 13893, 27482, 28130, 5283, 31542, 15569, 1477, 9374, 30207, 31421, 27298, 11639, 22643, 18569, 11714, 11845, 22321, 3421, 22483, 32348, 13856, 3948, +24307, 24888, 16419, 18486, 14521, 26491, 9394, 14566, 16407, 23288, 9280, 11769, 28571, 8055, 27338, 30048, 17429, 24778, 28702, 11959, 3649, 18577, 30528, 15363, 30423, 20082, 18784, 20138, 19662, 32640, 24087, 11201, 24760, 7738, 29687, 6513, 1462, 6314, 21080, 17869, 29602, 30360, 29639, 25405, 5647, 24209, 22685, 23076, 16219, 18619, 2268, 19869, 4429, 28, 2464, 2084, 20110, 21249, 22222, 7004, 21121, 13541, 18205, 13114, +21280, 15125, 19627, 22742, 21439, 7939, 7843, 18273, 5532, 4714, 10910, 11179, 28924, 827, 1488, 12375, 19447, 3756, 32244, 23876, 3784, 1941, 25960, 23895, 23190, 15414, 30899, 11543, 28956, 16337, 24657, 17468, 31462, 11517, 7442, 20133, 19456, 15285, 5638, 24988, 20000, 16548, 3400, 16156, 17375, 4888, 28531, 4054, 8644, 28008, 27930, 12428, 29949, 21122, 3555, 20371, 3769, 1687, 31914, 32725, 18024, 23804, 17425, 16718, +2553, 24867, 4083, 22009, 7384, 9721, 14230, 27384, 26269, 17630, 10772, 10876, 22518, 6536, 14931, 31162, 1776, 10093, 10822, 31725, 31216, 14378, 19328, 2217, 16065, 18474, 2174, 1321, 9510, 19599, 18039, 12063, 11698, 22122, 1305, 19082, 31843, 15535, 13699, 25344, 397, 24471, 3452, 22915, 31007, 18383, 21309, 15, 28477, 32131, 31740, 26925, 13741, 18300, 29142, 29806, 4007, 31316, 31127, 13517, 18147, 16398, 25581, 29845, +5752, 26886, 16159, 4827, 9653, 29858, 30171, 10050, 21562, 856, 197, 19801, 19239, 21506, 19817, 14948, 20869, 18789, 9105, 1843, 4322, 5479, 31649, 8329, 4027, 30009, 21846, 22174, 13639, 14659, 19251, 19392, 8777, 2643, 24219, 18430, 32501, 21623, 28480, 21295, 22479, 28677, 8329, 8950, 17415, 28146, 23899, 5517, 14167, 236, 7360, 18489, 5716, 6241, 26818, 9743, 3482, 15897, 31918, 17122, 30556, 18401, 3746, 6566, +21044, 27965, 24996, 20778, 16820, 20709, 9305, 6531, 16618, 17634, 15482, 1266, 13012, 6613, 6783, 27180, 6849, 14143, 12901, 12565, 20384, 6952, 22309, 23867, 22849, 21459, 8221, 20637, 7092, 11967, 27203, 28137, 7164, 19432, 16147, 23985, 7373, 25452, 30516, 23991, 10319, 13230, 25257, 23331, 19843, 32040, 17743, 26693, 13415, 30645, 6490, 1032, 4829, 28799, 24899, 27678, 17490, 352, 15547, 24583, 12319, 9983, 19952, 19483, +29415, 3331, 10700, 4020, 28783, 8449, 28011, 6334, 21679, 20501, 29666, 8755, 19773, 14641, 2680, 421, 12518, 9170, 1453, 17347, 5202, 26352, 12257, 22692, 26704, 27805, 14507, 6255, 5020, 1691, 25738, 1667, 5022, 3671, 5687, 1038, 12120, 930, 7372, 1031, 21431, 4270, 9786, 8437, 18912, 12466, 8858, 31430, 21637, 10311, 16010, 26839, 3895, 28267, 16763, 30599, 23304, 31271, 4086, 28324, 194, 29824, 29991, 5217, +727, 2910, 6255, 12847, 3841, 13627, 13879, 25272, 17898, 23665, 941, 4042, 3364, 9799, 2704, 25001, 20110, 18714, 19072, 24005, 14214, 3067, 21836, 4750, 1570, 25922, 307, 1765, 22979, 30298, 6982, 23706, 441, 13237, 3786, 4282, 26864, 17665, 29554, 11994, 8562, 30496, 16036, 11926, 7527, 18741, 4159, 27638, 4687, 23231, 18875, 18901, 26299, 7944, 23652, 27869, 1098, 23959, 29634, 24077, 21489, 3848, 15016, 21930, +17085, 18802, 26212, 11182, 3699, 22999, 23176, 12261, 20727, 6445, 24188, 28254, 25186, 28347, 23124, 29873, 18811, 9232, 16007, 12342, 17176, 6891, 7443, 18274, 30850, 4310, 9584, 19571, 8158, 24600, 8734, 25244, 10634, 2178, 3658, 14333, 25177, 26834, 26594, 13136, 511, 18014, 8623, 25697, 13594, 31747, 22803, 32405, 8211, 6042, 11979, 25387, 12933, 19422, 10894, 11015, 23732, 20478, 30586, 31891, 12310, 6552, 24367, 22944, +8731, 28025, 4509, 1140, 22091, 31103, 14277, 22603, 16350, 22900, 15532, 29944, 21879, 5567, 29581, 30091, 11609, 8792, 22710, 24542, 28214, 836, 2789, 19179, 21314, 608, 18302, 856, 7160, 9901, 23800, 15891, 5158, 28309, 17032, 27249, 26645, 31309, 17084, 10227, 21441, 32617, 7403, 10552, 5416, 4216, 7875, 17026, 13008, 30586, 8800, 8454, 31422, 11590, 27633, 19969, 12198, 13167, 20825, 19358, 23068, 11858, 2482, 28226, +7399, 19514, 22708, 1276, 18055, 7024, 11503, 6728, 6873, 18906, 17280, 12290, 23122, 25156, 29316, 3362, 22974, 5348, 11817, 21628, 16938, 6682, 8829, 29136, 19850, 29655, 15727, 10150, 8745, 18209, 5609, 16144, 4955, 28317, 17421, 23010, 2573, 28924, 29738, 9447, 15063, 14250, 21737, 5417, 6638, 18285, 8780, 29612, 23633, 20597, 18473, 7804, 27279, 27302, 4172, 14361, 24189, 19899, 24512, 166, 5340, 30121, 16311, 10295, +25670, 964, 537, 28243, 29888, 30275, 4922, 12183, 11758, 26659, 17601, 18396, 12176, 26381, 15241, 3042, 14210, 946, 10846, 8721, 28248, 15018, 23083, 19670, 2150, 14827, 19836, 7490, 12180, 3379, 17786, 5082, 4343, 18323, 557, 1464, 15831, 5480, 13647, 27589, 32139, 31248, 13217, 11548, 24861, 28458, 14590, 6303, 29404, 25436, 15025, 24885, 7686, 5340, 11787, 9836, 20167, 31623, 17327, 32347, 2235, 2345, 4661, 6578, +20668, 5218, 8042, 3731, 10698, 21690, 31320, 10070, 20170, 11770, 21618, 12264, 7460, 3440, 18567, 4097, 28876, 824, 28982, 3794, 6164, 8001, 13631, 26331, 6856, 30958, 25910, 9091, 535, 30571, 15670, 21203, 3022, 23712, 24935, 13720, 12634, 23487, 23790, 37, 2489, 12640, 12301, 9950, 16080, 30868, 14047, 12188, 31693, 10261, 15983, 5089, 18262, 29614, 31421, 25118, 27804, 24563, 1442, 28339, 22367, 17112, 16774, 25389, +8056, 8941, 6341, 20691, 32429, 30132, 20728, 2150, 10004, 261, 12100, 26085, 31129, 26147, 5505, 30054, 3640, 21488, 2376, 21902, 18334, 1029, 14253, 13370, 25592, 15695, 8941, 15191, 39, 25716, 7812, 8095, 1889, 14154, 28786, 1550, 11518, 16746, 3701, 21522, 17007, 15801, 14839, 15369, 9181, 20345, 12655, 12821, 9065, 15031, 1956, 27400, 16060, 16209, 8002, 8885, 31904, 16944, 24076, 31943, 9892, 31889, 7270, 11781, +13275, 3289, 13332, 24793, 20035, 17033, 13547, 4275, 66, 28387, 19644, 9247, 15964, 32299, 22069, 25029, 14563, 24025, 19661, 30623, 7466, 27664, 6740, 6602, 11840, 30817, 5777, 21732, 29938, 13047, 745, 10445, 16336, 14077, 2470, 3604, 31110, 16017, 7879, 31177, 11636, 27523, 7656, 27600, 27054, 29725, 19862, 8849, 20982, 6755, 6705, 28448, 1651, 13445, 2282, 13491, 11494, 8059, 2455, 8664, 21107, 3201, 19109, 4675, +17278, 21579, 8279, 15621, 4829, 16158, 14030, 16465, 10913, 21686, 11298, 5200, 18644, 31160, 14049, 6858, 5147, 20754, 2539, 6799, 1432, 4821, 20290, 12926, 12881, 22746, 21591, 1220, 25947, 7932, 5895, 10457, 29512, 14175, 26078, 1573, 30333, 7340, 18038, 8479, 29027, 29336, 13679, 14903, 27728, 27728, 21761, 108, 15715, 24300, 6907, 17147, 29122, 27197, 30073, 9235, 17175, 18896, 10455, 10354, 26829, 16350, 20812, 23573, +30525, 14122, 25146, 28091, 21463, 10416, 3802, 17722, 6985, 17481, 32625, 1945, 12441, 21618, 2053, 28156, 13151, 8960, 12535, 9505, 3390, 9841, 18740, 20565, 28737, 29195, 30920, 22798, 12777, 18964, 13603, 10535, 318, 5981, 5858, 21781, 16398, 9660, 6735, 23383, 27141, 6592, 25328, 6814, 28211, 27382, 2203, 8594, 3574, 14738, 18099, 6964, 24579, 4071, 27530, 20549, 498, 25682, 10579, 13275, 11878, 24183, 23810, 12196, +30164, 29668, 1210, 13794, 6560, 7945, 4409, 933, 14538, 29738, 7748, 9981, 24352, 9951, 18575, 27926, 24689, 3906, 2123, 16501, 7977, 29653, 4282, 8475, 22567, 14861, 21750, 1677, 6276, 12793, 13873, 3673, 9693, 15083, 17467, 16254, 23029, 21877, 17187, 4799, 18847, 24935, 14780, 10431, 2118, 587, 5589, 26808, 4493, 7712, 10541, 12470, 4597, 14823, 20945, 27164, 29684, 9927, 28841, 3193, 22720, 9947, 6866, 32414, +25030, 24333, 15900, 15291, 13442, 319, 20090, 32289, 25255, 2102, 9952, 27373, 2689, 15542, 21413, 7182, 23254, 31954, 19652, 27852, 14009, 7829, 22248, 10926, 17757, 18322, 14119, 7709, 28269, 20985, 7355, 20531, 12550, 23255, 3055, 25993, 23575, 23145, 25514, 16062, 25248, 2699, 10667, 27937, 18241, 32081, 2352, 8727, 31267, 22004, 3811, 12509, 29834, 26060, 23435, 14823, 11614, 4786, 22532, 7115, 25771, 29888, 27646, 5553, +20375, 30701, 31546, 11182, 21079, 24293, 27244, 13559, 26992, 5144, 8728, 12465, 4457, 11080, 21192, 2956, 317, 25004, 15465, 30151, 18296, 6132, 12206, 29910, 10918, 1970, 4257, 3921, 31858, 31903, 9475, 19466, 29837, 8253, 30648, 18148, 32546, 25125, 31707, 26770, 30269, 7667, 6467, 1958, 18748, 27660, 4914, 19065, 19896, 20380, 16448, 5424, 26512, 28654, 2566, 4663, 30624, 6823, 8584, 29715, 5958, 18059, 16413, 3027, +26313, 14293, 21175, 26091, 6650, 20114, 20094, 4151, 27782, 26561, 6109, 13762, 21453, 11024, 59, 8581, 31404, 16507, 14005, 25148, 12393, 16571, 29811, 10249, 23394, 5628, 7196, 29353, 23687, 23609, 32380, 17232, 5135, 20788, 10556, 11785, 8134, 30650, 15937, 3148, 24443, 22046, 16910, 13129, 302, 16969, 21710, 31706, 708, 2948, 24087, 13101, 19519, 21130, 23351, 10146, 26758, 30547, 6731, 17678, 21389, 6343, 2142, 26524, +27131, 12698, 5541, 2498, 10580, 21478, 5646, 2256, 10757, 22557, 15385, 11059, 6758, 4327, 9998, 7467, 7275, 1317, 20568, 26795, 22447, 11151, 4173, 16438, 8931, 10904, 1348, 30320, 17247, 3490, 24076, 11611, 16189, 29617, 14109, 26769, 18328, 19755, 29025, 29085, 9544, 11642, 7376, 16303, 15970, 17374, 23770, 23245, 18691, 11570, 17272, 8371, 22722, 21445, 24809, 31653, 32349, 26157, 29205, 16829, 29647, 20513, 28440, 13068, +17362, 9781, 7070, 2922, 29536, 3327, 32007, 6313, 14970, 6616, 22616, 30940, 23990, 13618, 21417, 9914, 25188, 5922, 18285, 15142, 27367, 10326, 14027, 26949, 3715, 10464, 11010, 594, 30977, 6682, 13663, 15572, 16463, 20733, 18494, 13231, 24060, 17734, 19544, 6262, 24350, 9392, 4434, 15572, 23010, 25852, 25486, 15431, 31774, 11003, 30573, 26373, 21329, 11833, 20554, 25044, 22297, 31564, 25639, 20507, 5478, 6534, 3311, 21941, +27267, 21805, 2405, 18559, 6771, 21949, 24822, 31121, 31342, 29256, 13926, 21584, 22340, 6644, 4247, 21346, 17648, 2053, 14952, 6209, 13886, 2738, 31254, 3415, 1535, 24125, 23922, 7013, 30659, 27233, 28955, 25158, 16271, 31360, 10949, 23042, 20541, 3003, 21396, 19115, 32260, 2554, 7932, 21832, 9198, 12179, 10411, 26846, 14232, 25363, 288, 28118, 28101, 31542, 31534, 29636, 22899, 22688, 3882, 20790, 17154, 69, 13180, 657, +31429, 24129, 23699, 19202, 27133, 12327, 5550, 26625, 14881, 13482, 15689, 24080, 25661, 26100, 18158, 7126, 18695, 18446, 2476, 14029, 17220, 1242, 10897, 7351, 23931, 14779, 28141, 8317, 14848, 8553, 8974, 13509, 32683, 32673, 32712, 27048, 12233, 5494, 20905, 27114, 18976, 3826, 18426, 11869, 29927, 3817, 18995, 15854, 22263, 21472, 29883, 6716, 22714, 8013, 14067, 13877, 22792, 9441, 22194, 4873, 17994, 31168, 18382, 17909, +31074, 18326, 12189, 10539, 23820, 326, 4885, 10028, 4153, 23312, 21898, 1312, 27129, 8125, 17166, 16624, 29597, 14282, 23340, 19544, 22295, 4640, 653, 12319, 14081, 22848, 17192, 32075, 21248, 2807, 17217, 19554, 21133, 29406, 30093, 12186, 29733, 2211, 22214, 1118, 25523, 11344, 2430, 19884, 19470, 19596, 3740, 16299, 1110, 27081, 3075, 23405, 31721, 3729, 2957, 13034, 26577, 20149, 12341, 15057, 22956, 29558, 1844, 11322, +26197, 31937, 23508, 23162, 1380, 12954, 24280, 26903, 24299, 26710, 14019, 11001, 13538, 17760, 27300, 14649, 12073, 30376, 5286, 11026, 1337, 8243, 24060, 27914, 28393, 3633, 10203, 18581, 424, 12047, 29903, 26621, 11217, 20643, 17015, 12597, 830, 8527, 6733, 25129, 2469, 20752, 3362, 16007, 5744, 30662, 30656, 17817, 28270, 3175, 28843, 29607, 11418, 20135, 24753, 7043, 23769, 2189, 25625, 24193, 14236, 22760, 18046, 25453, +10636, 2293, 5283, 11466, 10820, 12016, 3827, 13289, 0, 7189, 29296, 5745, 5083, 27185, 23562, 586, 30360, 19638, 30193, 9010, 7005, 22179, 16054, 30774, 24368, 8911, 22199, 5836, 31671, 7477, 31290, 9539, 9770, 3805, 21005, 20590, 15821, 24832, 1111, 15821, 32021, 30408, 21566, 4337, 24825, 12361, 4923, 22417, 31999, 2348, 31427, 6236, 24527, 14713, 4243, 16127, 23624, 26442, 21964, 22528, 1152, 20486, 32067, 10922, +24291, 20305, 31513, 7344, 12369, 32624, 23165, 11623, 30264, 11964, 15960, 22321, 24325, 20883, 11970, 23556, 23231, 10630, 29792, 14991, 25343, 1267, 31118, 16200, 27710, 20314, 5960, 28862, 8032, 5259, 7016, 32323, 25564, 5761, 6899, 5166, 5618, 30065, 16789, 3114, 9261, 32749, 25436, 818, 20864, 4638, 24374, 11327, 15268, 21398, 26318, 7844, 22666, 24669, 24044, 17608, 12215, 30004, 13702, 20248, 2495, 20718, 19803, 28060, +26480, 26703, 458, 32098, 24000, 17247, 2444, 493, 17228, 27880, 1311, 5324, 32519, 25685, 16651, 15019, 14315, 10202, 22863, 4213, 2103, 14139, 21821, 14318, 11375, 2755, 1798, 13871, 23474, 21602, 9163, 17186, 15537, 9621, 16516, 6769, 26868, 18960, 7262, 11328, 14073, 8573, 16652, 13824, 1490, 535, 28843, 15805, 10737, 18939, 20019, 12840, 310, 9072, 27159, 11686, 11828, 28957, 25557, 2534, 17791, 1952, 19720, 560, +11573, 3468, 7329, 5673, 22428, 14591, 17001, 3733, 23164, 885, 17557, 24654, 1420, 13633, 7692, 12158, 32572, 27711, 24998, 114, 4015, 19389, 11800, 15843, 15579, 4589, 18377, 602, 6541, 5329, 1163, 18114, 8797, 8492, 23787, 31226, 23084, 8020, 2191, 13480, 8905, 19749, 5367, 10326, 614, 13059, 22484, 418, 8002, 14714, 532, 12017, 1336, 12333, 27861, 16915, 16922, 13470, 17517, 23464, 18800, 18680, 8810, 27597, +27173, 32598, 26055, 17489, 7850, 28247, 30969, 16756, 15228, 3568, 27082, 15842, 16627, 16798, 16260, 24629, 31512, 16792, 3879, 80, 29125, 31740, 16995, 13280, 12442, 1745, 3976, 31242, 20425, 12786, 26072, 14830, 12616, 19359, 32319, 20467, 14838, 30521, 4455, 30066, 1321, 31537, 13140, 17949, 15567, 29400, 9810, 14311, 13425, 13689, 14392, 9782, 12661, 31387, 23062, 25104, 364, 27038, 23578, 20790, 7057, 16882, 2852, 19673, +3474, 2404, 7372, 18312, 157, 11827, 15611, 1478, 10596, 28751, 19427, 26163, 25384, 29238, 7707, 6041, 10159, 22099, 15823, 22821, 20718, 6118, 15157, 21083, 388, 5967, 9105, 7445, 22850, 11957, 27119, 26324, 14361, 1723, 11868, 14518, 13551, 27479, 15997, 24147, 23463, 2656, 17543, 16079, 31894, 25250, 22120, 9286, 14581, 5175, 32107, 2531, 11293, 14496, 23614, 11682, 20463, 32719, 19127, 10545, 11909, 13478, 4101, 26270, +15202, 15970, 8021, 28753, 10681, 24018, 20132, 1376, 26674, 4907, 17455, 25801, 30157, 6807, 2319, 11970, 11983, 1658, 14502, 23276, 16154, 5348, 2190, 3849, 5300, 21318, 14395, 17209, 2028, 18496, 10711, 17230, 1698, 18732, 13215, 12380, 9982, 580, 13756, 3889, 5487, 31212, 29690, 2877, 5251, 32009, 14847, 17234, 899, 29349, 7743, 17053, 1930, 9933, 20902, 7230, 31251, 2529, 24439, 512, 21026, 2382, 17742, 22724, +21115, 30958, 2336, 31097, 31538, 16093, 2218, 4257, 14537, 31908, 7134, 19788, 31149, 21982, 4255, 32048, 18563, 11998, 16333, 20493, 21931, 4468, 27723, 20415, 6997, 19394, 20927, 28023, 21777, 5901, 17980, 10124, 4091, 20316, 8453, 2861, 3641, 10672, 7119, 18178, 9812, 14253, 5199, 8194, 3467, 9454, 7474, 22031, 21452, 23808, 9756, 10615, 28276, 4712, 31030, 2505, 24106, 19189, 30529, 13115, 25091, 15741, 23239, 29182, +3289, 31693, 32044, 6931, 9597, 6395, 25109, 19409, 20648, 30308, 27603, 24116, 6994, 2310, 13379, 28446, 26118, 23135, 6294, 21626, 27847, 4556, 24131, 19186, 23746, 21892, 32301, 16069, 4865, 22773, 12483, 8155, 21698, 11759, 15086, 31295, 18154, 7427, 17936, 6035, 4968, 12772, 30151, 11962, 15082, 10762, 7641, 8432, 1129, 13935, 30058, 28977, 18491, 21421, 15395, 9469, 10546, 14928, 25538, 15411, 4933, 5254, 23566, 26631, +17013, 5884, 25158, 2400, 13312, 10327, 8435, 18280, 23099, 5818, 30242, 5413, 16580, 5115, 13845, 17709, 19050, 11135, 13918, 4774, 32556, 29313, 14243, 10334, 11474, 7014, 25746, 16407, 12268, 16544, 10271, 29281, 22429, 2661, 31681, 2973, 12988, 7348, 21253, 3319, 13166, 18727, 8732, 29746, 23843, 22577, 14688, 10125, 944, 28606, 14899, 733, 25152, 29143, 11067, 3858, 3389, 4045, 20265, 15657, 20590, 30536, 12170, 10251, +430, 11084, 13224, 13418, 18432, 1709, 16738, 31599, 20436, 25470, 28577, 11511, 15280, 10497, 21637, 16224, 6336, 3768, 16957, 31488, 143, 28025, 2578, 3532, 32070, 22843, 19189, 19892, 20612, 31360, 30143, 21042, 9676, 10599, 1692, 28108, 12308, 18430, 26939, 32745, 11133, 22749, 11488, 26413, 478, 357, 9869, 6814, 4126, 26827, 5534, 4269, 22084, 8112, 7802, 21386, 30956, 26991, 8511, 18800, 25583, 5886, 7074, 2491, +16486, 8766, 30600, 28794, 27197, 24771, 28771, 5562, 14752, 7492, 31975, 15231, 7849, 9076, 22045, 11975, 3135, 27580, 16245, 25219, 2924, 24047, 13838, 1112, 18270, 22349, 19912, 11086, 28235, 26986, 13577, 11953, 2985, 11409, 7980, 30182, 3413, 3983, 2976, 18165, 11475, 2183, 628, 19325, 11259, 22674, 31300, 14395, 17486, 14777, 6846, 20410, 6056, 20684, 21523, 24327, 10265, 8667, 2645, 5733, 2886, 16222, 17686, 5871, +27632, 25666, 3285, 31045, 29650, 6261, 16442, 8357, 8444, 17071, 27682, 19703, 6977, 26215, 1330, 24463, 8224, 8177, 12105, 14281, 28861, 860, 5840, 6359, 9528, 8485, 12092, 12414, 24707, 29778, 18285, 19571, 22677, 21570, 17848, 19559, 27831, 1523, 27916, 3507, 18594, 22831, 23210, 25571, 16278, 24541, 17266, 24502, 32718, 29371, 6015, 28811, 30232, 11855, 2402, 6992, 20340, 14494, 19406, 12280, 11505, 4923, 31851, 1414, +26493, 16932, 20973, 21556, 18455, 16121, 25063, 4281, 6184, 15505, 29852, 22462, 7278, 14350, 14197, 7228, 10953, 20212, 3272, 8417, 32068, 5674, 15409, 19640, 20169, 2047, 31920, 31674, 6970, 31004, 320, 695, 15168, 21293, 22251, 855, 4646, 14546, 5136, 10831, 30052, 2220, 525, 4562, 16570, 14722, 11791, 27523, 2167, 15063, 3173, 1467, 20737, 18582, 21107, 8138, 20630, 20260, 7044, 27600, 18496, 7364, 28296, 896, +28657, 17779, 1751, 536, 32326, 6887, 11367, 29610, 9107, 11892, 1404, 25677, 26615, 13195, 20432, 28782, 28258, 23605, 30249, 16228, 9420, 18588, 24366, 30050, 6080, 31411, 24882, 24576, 6007, 20410, 25472, 1897, 5422, 27223, 2433, 4980, 1342, 13800, 1822, 10449, 25692, 3226, 3358, 19539, 16422, 23791, 15553, 11912, 14628, 13034, 28140, 24048, 31623, 19739, 21330, 4935, 18382, 13445, 29512, 24389, 1087, 22216, 26286, 6509, +16672, 28719, 11489, 18014, 9751, 13311, 28464, 2676, 16538, 31822, 22215, 192, 22845, 5001, 12104, 4706, 18035, 7477, 28754, 16890, 27216, 17317, 21826, 12830, 30762, 18570, 4451, 31849, 8018, 30738, 5591, 24690, 26689, 17080, 9937, 3673, 30392, 5633, 6349, 14162, 4687, 28564, 14354, 27533, 797, 26458, 32239, 18833, 1167, 28225, 2955, 28383, 12774, 24781, 8445, 10768, 10583, 12897, 9850, 18602, 10867, 15441, 10524, 4788, +32521, 20461, 8461, 30145, 26094, 14810, 11539, 30782, 10607, 25893, 25547, 11404, 19584, 25018, 30237, 20751, 20475, 425, 16367, 482, 25206, 24812, 11250, 3022, 4941, 21100, 21624, 15808, 3773, 32148, 20597, 3527, 19842, 29058, 904, 13168, 11101, 12444, 11182, 21708, 5569, 3961, 344, 25153, 28979, 30582, 13137, 16687, 31007, 29504, 17169, 23445, 21548, 28419, 26467, 26490, 16752, 15323, 9530, 20525, 14704, 30127, 24052, 1778, +26418, 24957, 14946, 4751, 4633, 26129, 26459, 10202, 30090, 26803, 2588, 26302, 24617, 15725, 10221, 22856, 12461, 27390, 13534, 1241, 23041, 7233, 27731, 7025, 22557, 4494, 27551, 4493, 1853, 18835, 6271, 28271, 11024, 21217, 254, 15657, 14578, 26713, 25860, 11901, 20749, 28448, 5435, 12598, 11405, 15656, 2687, 23866, 10278, 16221, 25107, 551, 23454, 20071, 7577, 13243, 24565, 2360, 17736, 26418, 21195, 24007, 21922, 32220, +12457, 22176, 15109, 27035, 16122, 8201, 6168, 4103, 3881, 11603, 16701, 15286, 27259, 19388, 6384, 4769, 2841, 31492, 5321, 26296, 18795, 12898, 6771, 10592, 15258, 24508, 4242, 3685, 15747, 26164, 3137, 28204, 15573, 18247, 22472, 31695, 26448, 28640, 3030, 30330, 7476, 19731, 12848, 1967, 6352, 19233, 6737, 9193, 17957, 12058, 2721, 3984, 24956, 9493, 14576, 7446, 1233, 18818, 11131, 16980, 12215, 14269, 12417, 27788, +32516, 2121, 26715, 26196, 30761, 29745, 23758, 5469, 16708, 3839, 7437, 23060, 23072, 14174, 32254, 8261, 26232, 2207, 12245, 18420, 11700, 26821, 25866, 12933, 12871, 4229, 29914, 25086, 18498, 9563, 20106, 18246, 11684, 14053, 11675, 9677, 11030, 2665, 15147, 27739, 6504, 22584, 18031, 29576, 3990, 17517, 5069, 30222, 19725, 17314, 15874, 31425, 11367, 8972, 11591, 24239, 13201, 8737, 16557, 31700, 18300, 3896, 17178, 29984, +17949, 28853, 6893, 28980, 31519, 22040, 23951, 5255, 11856, 9214, 2064, 15846, 26732, 7133, 13300, 13689, 24448, 29174, 12346, 3047, 5378, 23937, 27286, 18580, 32674, 11076, 17512, 18206, 14972, 1922, 15422, 153, 30776, 22316, 29133, 29527, 11588, 20316, 2014, 23445, 29531, 4078, 6523, 23495, 11212, 19824, 4416, 2892, 16230, 16762, 5939, 21609, 7932, 458, 7421, 7838, 11534, 24933, 26045, 26506, 26855, 8699, 26659, 24863, +31015, 23025, 21622, 9836, 10573, 23637, 513, 7336, 27715, 7036, 30831, 6159, 26860, 2479, 9051, 10323, 19242, 14991, 31932, 27174, 15449, 6585, 2244, 26983, 31518, 28289, 20721, 25605, 4221, 14612, 17701, 2468, 4869, 6555, 12304, 15443, 30192, 12817, 22779, 25140, 19854, 20843, 31299, 13946, 23322, 7583, 24269, 9796, 22574, 23433, 4202, 5255, 30018, 6447, 32238, 28768, 1968, 20191, 21606, 6189, 2035, 6539, 8658, 6905, +13094, 20962, 22348, 10519, 1012, 12359, 2891, 20866, 434, 1422, 2044, 23757, 9005, 26314, 785, 31579, 16979, 4988, 4066, 14230, 11435, 3536, 10230, 13403, 23727, 31836, 19593, 25763, 5607, 28251, 32668, 18702, 16445, 22248, 29221, 17457, 1839, 32112, 5555, 2274, 766, 7600, 26031, 9772, 1146, 26816, 8583, 18125, 31804, 12650, 32355, 10471, 16186, 9818, 23875, 7146, 8886, 10700, 141, 14494, 6183, 41, 428, 22628, +22289, 29649, 7318, 24128, 28993, 12873, 26402, 29759, 20473, 19665, 6763, 21619, 13714, 15347, 6977, 12750, 27997, 6564, 23222, 11415, 16382, 14329, 18561, 25269, 25029, 18702, 6995, 31212, 18743, 7423, 21072, 8264, 4304, 28390, 32393, 529, 8496, 26027, 30288, 28969, 12925, 4284, 17821, 26639, 19631, 24798, 6621, 14860, 31362, 29843, 26275, 14977, 11404, 12069, 7478, 3665, 30771, 14473, 2109, 16747, 21896, 23182, 25011, 26200, +18804, 24636, 26729, 27300, 17896, 24249, 23502, 30821, 28533, 8555, 24692, 15396, 585, 31313, 30256, 31947, 28389, 23764, 14156, 7025, 3065, 21634, 10691, 1068, 3339, 12800, 17815, 25235, 3214, 10059, 18667, 22019, 1927, 12628, 16551, 19823, 4110, 7285, 17876, 32643, 15840, 9800, 15272, 16425, 8346, 12760, 15605, 3967, 3756, 29761, 10992, 6821, 18628, 21683, 7890, 21967, 1716, 25705, 14435, 4930, 2996, 334, 26949, 4924, +12963, 10733, 24747, 17073, 18018, 9856, 16948, 1091, 19656, 32220, 17516, 28002, 12213, 353, 31969, 15969, 30115, 10194, 22791, 15975, 31877, 30681, 5174, 825, 23618, 19609, 5756, 26615, 19944, 32705, 31539, 139, 10670, 23518, 17212, 28689, 606, 1392, 29780, 20263, 845, 14528, 15497, 13058, 14882, 14699, 29027, 12229, 24893, 19050, 28204, 24002, 16963, 610, 24828, 7814, 20220, 30584, 1661, 7396, 30521, 432, 7535, 8424, +23950, 24747, 4345, 24557, 26139, 1357, 12052, 26984, 15885, 27549, 7274, 30767, 9480, 3534, 10228, 1605, 22584, 5664, 25608, 6780, 6275, 17668, 14594, 26495, 15484, 16255, 1123, 13237, 16687, 8658, 21661, 7869, 637, 26006, 32426, 26776, 27363, 11710, 20993, 10481, 6492, 28267, 8480, 15972, 31801, 18709, 17578, 21618, 24373, 10418, 28398, 30648, 28086, 10224, 24375, 10802, 26479, 25498, 24039, 10398, 1388, 12933, 18267, 2025, +6171, 17926, 28802, 767, 29636, 17027, 11248, 3360, 12526, 19728, 19333, 11560, 5669, 4143, 410, 30043, 14561, 28808, 27923, 9879, 6264, 19531, 20681, 32743, 12261, 11952, 10373, 13650, 24885, 28640, 15675, 31057, 13798, 11709, 31824, 10667, 28736, 10304, 14027, 8495, 30032, 592, 20055, 2934, 4735, 20465, 209, 19296, 16505, 28132, 29175, 22769, 14895, 17088, 22744, 27157, 29041, 349, 8039, 21158, 28989, 23714, 19447, 10020, +2656, 18503, 20687, 31392, 28807, 1946, 7119, 26072, 2539, 27174, 29006, 7274, 14871, 29215, 26571, 31376, 24579, 22978, 21377, 6707, 7299, 11353, 1096, 3572, 11702, 9135, 24730, 7924, 81, 11410, 17944, 2737, 29913, 5863, 1362, 25953, 7809, 8481, 19257, 10348, 2888, 15495, 17623, 17759, 11942, 11426, 16368, 3753, 1636, 4977, 10460, 8935, 16331, 11556, 12507, 28033, 20691, 4470, 3189, 20773, 15880, 21133, 23510, 13025, +26996, 24872, 6210, 2038, 586, 25467, 12386, 3474, 8194, 30009, 21233, 20136, 8667, 4833, 23890, 10304, 9811, 1582, 19239, 26142, 13139, 31747, 21407, 1062, 3449, 24597, 21835, 19329, 12962, 12578, 32354, 7191, 4682, 5797, 9229, 5268, 31264, 21615, 8742, 6691, 18857, 29976, 26827, 27524, 2041, 17949, 5060, 11852, 19532, 24300, 5226, 32671, 23279, 26634, 965, 26728, 18463, 22801, 13289, 31425, 2611, 12875, 5848, 7293, +18672, 15077, 12562, 17169, 3925, 21304, 23860, 22782, 18512, 17919, 17538, 20554, 3101, 22599, 32406, 22633, 14131, 4865, 22536, 4642, 31499, 23501, 31370, 17194, 13534, 11891, 15851, 16145, 24766, 21700, 23439, 10671, 4009, 3233, 27840, 7934, 24537, 18932, 30716, 10282, 4083, 15487, 30836, 7184, 5318, 30474, 29817, 19449, 2571, 19585, 24091, 1302, 10319, 22693, 18496, 23853, 1816, 1580, 7231, 26582, 23280, 30670, 4485, 27289, +1135, 32325, 2456, 25672, 18489, 404, 3186, 22573, 15891, 1254, 29757, 21209, 31729, 26807, 7890, 1532, 13624, 31981, 2835, 23943, 21906, 21331, 15029, 23722, 22911, 22260, 17537, 13423, 20162, 22022, 7945, 21297, 21580, 10401, 14201, 7301, 10805, 17388, 29874, 26697, 18642, 26864, 15138, 17603, 20903, 23029, 19136, 1759, 22242, 21971, 25703, 11381, 10534, 7964, 2335, 678, 30224, 19872, 14101, 17618, 9127, 22046, 6147, 30707, +32447, 20348, 5240, 10485, 4968, 2347, 4414, 23611, 29211, 19552, 8446, 17346, 9813, 27582, 19105, 32056, 16785, 12040, 10669, 27320, 20004, 13004, 27998, 17460, 109, 9331, 2310, 9236, 31378, 8457, 7175, 31057, 28806, 12415, 8774, 1006, 14762, 13188, 24617, 11205, 32741, 296, 28551, 9786, 27878, 14889, 9074, 11896, 26929, 19743, 6448, 14166, 32748, 1678, 31626, 89, 11009, 1169, 9325, 9619, 9626, 16500, 7909, 5664, +28915, 16683, 6671, 10910, 29872, 31288, 22115, 29845, 31584, 17899, 6863, 26695, 20, 15938, 5823, 26949, 2913, 12271, 8347, 2893, 13949, 7206, 2982, 24958, 8375, 12307, 1810, 18001, 28807, 9719, 23666, 24955, 26402, 30337, 3097, 23506, 28857, 25212, 20583, 27674, 10343, 27447, 21601, 10363, 10617, 27424, 4545, 13530, 6927, 12892, 16424, 20876, 20098, 19406, 13066, 28473, 31714, 14876, 13707, 27753, 24595, 4605, 19940, 18230, +2174, 23037, 8968, 31031, 15482, 29552, 25937, 25825, 24231, 14770, 3421, 2080, 9426, 7966, 15610, 16353, 20858, 32034, 4461, 8189, 18673, 17528, 3894, 17619, 32404, 17601, 12604, 24232, 22206, 32545, 9694, 24380, 22814, 18662, 22644, 5528, 15446, 15813, 31354, 6909, 30584, 2007, 8989, 7242, 9973, 24600, 23596, 30831, 23866, 28057, 6252, 9771, 12817, 10147, 27390, 12454, 27748, 7227, 3918, 17187, 7004, 13612, 8799, 29818, +32274, 31443, 2579, 14953, 14489, 1165, 21862, 12305, 3172, 30852, 19547, 13145, 22684, 10375, 11208, 13782, 5665, 17461, 23554, 18482, 27608, 18176, 30936, 22588, 25403, 2086, 7007, 32407, 15698, 15807, 29458, 15205, 14482, 32037, 30158, 28971, 434, 19252, 8508, 3606, 17336, 28056, 16751, 7252, 5663, 27959, 21035, 11328, 12652, 11821, 29811, 7492, 29997, 27979, 30081, 22633, 30066, 4320, 22272, 12996, 20127, 18962, 28201, 1842, +18231, 25591, 30813, 18665, 12076, 6554, 22271, 29412, 1842, 6254, 3897, 7505, 1446, 24932, 18834, 14098, 3985, 15877, 21591, 1214, 11088, 18904, 23847, 8386, 23224, 13352, 21383, 10584, 32314, 16816, 12426, 17778, 9640, 10471, 3675, 21716, 17025, 25947, 18360, 18867, 32201, 22257, 26373, 879, 14421, 12439, 14978, 18406, 28316, 3801, 19621, 6636, 22705, 10700, 15023, 13161, 24052, 3638, 23745, 23599, 20454, 3403, 8609, 30094, +13875, 12284, 19042, 30900, 5463, 4635, 17000, 4897, 26892, 10605, 5776, 8546, 23044, 20754, 26952, 18592, 24555, 13805, 25228, 14492, 24506, 7483, 27654, 15790, 11121, 18631, 6621, 31576, 22035, 15230, 28902, 3142, 27515, 15177, 1274, 210, 19812, 18274, 5107, 13936, 28879, 10884, 22482, 19155, 31638, 16667, 4979, 23426, 30472, 30208, 5150, 22210, 4923, 36, 5233, 16045, 18668, 11854, 14853, 7935, 27085, 10987, 11077, 21832, +26164, 12351, 22042, 13208, 30626, 27150, 27145, 26737, 5266, 16859, 13125, 4136, 758, 18104, 27562, 31231, 15544, 32713, 20673, 20468, 32749, 25906, 3745, 18649, 4993, 18598, 26584, 32078, 29585, 4893, 21142, 22982, 17245, 10416, 3422, 15103, 4798, 30567, 9072, 10064, 14659, 22197, 14201, 15417, 7534, 8995, 13880, 23078, 8940, 1786, 10778, 8922, 27692, 14523, 27571, 32685, 353, 21388, 31995, 29939, 26281, 20369, 20153, 10758, +30786, 23575, 25861, 2816, 21375, 2166, 12881, 3266, 24363, 27082, 18683, 31897, 3309, 32564, 22208, 12250, 1582, 218, 21172, 29274, 14742, 15975, 29192, 15095, 4595, 28419, 12266, 30877, 16021, 32419, 8867, 14039, 23227, 1961, 16855, 11834, 4127, 29736, 15100, 28490, 24050, 1015, 27620, 27360, 811, 17060, 6842, 2393, 17278, 28014, 31668, 32020, 11221, 28092, 14348, 15817, 23743, 26614, 13926, 6996, 26266, 22793, 21035, 16725, +24754, 5123, 28559, 28881, 2091, 10891, 24604, 26142, 11906, 19456, 20734, 12718, 3748, 27576, 15111, 21026, 22822, 14011, 20279, 1275, 9335, 1859, 17092, 311, 28473, 31018, 7307, 21971, 21044, 28343, 5928, 13030, 698, 1719, 9144, 2789, 12610, 980, 28931, 24517, 20436, 16897, 4467, 24184, 11705, 19578, 12442, 1759, 822, 32721, 3035, 10157, 1812, 20127, 10468, 30286, 18378, 17776, 19489, 6654, 13351, 25418, 19684, 14049, +27137, 28828, 16838, 6980, 29808, 13002, 31497, 17476, 29899, 3196, 8892, 8837, 22774, 21335, 10596, 23596, 21288, 13631, 986, 23101, 991, 11454, 20619, 19369, 29230, 7340, 26023, 9813, 32758, 12939, 23862, 27128, 9000, 7933, 1340, 6040, 20935, 69, 23517, 18066, 3265, 32409, 26903, 26039, 20976, 4732, 16868, 9497, 18363, 17854, 32598, 19354, 29308, 20449, 5955, 25771, 27789, 31978, 2816, 27780, 12150, 26679, 22140, 21150, +1844, 23480, 27190, 22779, 23549, 17939, 8077, 26814, 17581, 2213, 20085, 5789, 6945, 4185, 15286, 25308, 22039, 15116, 11895, 18580, 2797, 17850, 11583, 30587, 17061, 14399, 25599, 29211, 8310, 14971, 17593, 10154, 5683, 12015, 165, 29232, 29955, 8243, 23278, 14768, 10456, 10595, 20557, 17401, 14781, 3076, 9941, 4052, 18192, 21836, 22632, 20990, 6919, 1447, 18809, 23980, 15847, 11640, 20423, 24157, 26611, 5248, 1544, 32294, +17263, 1709, 28758, 14450, 9952, 19268, 29218, 20408, 29863, 17008, 5041, 11876, 20084, 14983, 15929, 5508, 4051, 5793, 26498, 10970, 7241, 12539, 2182, 23088, 24179, 22605, 14477, 18022, 27853, 16021, 17548, 12349, 17731, 13538, 26799, 27683, 38, 23250, 15324, 29902, 7490, 20365, 9010, 27574, 2580, 24939, 314, 6632, 30733, 26813, 17602, 5206, 6584, 19785, 28294, 30764, 9622, 10003, 16018, 4708, 26025, 799, 17057, 10988, +14337, 11088, 5903, 14376, 1570, 21227, 11510, 9060, 8825, 20520, 3866, 11405, 12692, 4181, 18037, 10657, 30994, 2872, 15863, 4810, 22657, 11389, 2806, 32279, 21392, 18825, 4219, 14649, 19624, 21276, 25637, 1193, 32365, 31541, 15569, 1167, 20000, 27079, 10228, 28825, 14832, 14094, 7463, 27524, 18275, 25500, 5413, 16501, 28372, 21276, 21312, 18261, 32665, 24118, 17773, 21289, 10175, 21992, 3171, 29799, 10501, 28808, 30993, 10098, +27581, 13794, 11265, 14814, 8106, 21493, 10871, 22938, 2820, 18334, 17694, 21095, 11067, 23107, 4829, 6671, 11615, 26141, 24933, 11512, 17491, 9938, 33, 27667, 31930, 3204, 24698, 9663, 32013, 22923, 19761, 26826, 3950, 31027, 8872, 12056, 19752, 19744, 2226, 22572, 5310, 19920, 10900, 16377, 10259, 15729, 23049, 21874, 9102, 15214, 618, 26593, 25152, 651, 21492, 24314, 3856, 13423, 1210, 3101, 3578, 20971, 29927, 7528, +19230, 6032, 19584, 6215, 25776, 21810, 28787, 31086, 8962, 6919, 14696, 19221, 22648, 4977, 8327, 31750, 20191, 8945, 25576, 12575, 9597, 14300, 4121, 13453, 27723, 5331, 16554, 31302, 26303, 13713, 6062, 12765, 19745, 25647, 18980, 12753, 14689, 15000, 11072, 23652, 21919, 25768, 10105, 11800, 30745, 18433, 10782, 18168, 27378, 3590, 30743, 4207, 17891, 2096, 17660, 12846, 7428, 1446, 11380, 963, 15160, 17443, 13728, 2137, +10322, 32709, 14891, 25011, 14941, 25963, 15895, 4092, 18963, 26001, 15892, 16940, 11666, 26675, 2340, 6276, 30265, 315, 10484, 15388, 2411, 28144, 28235, 9839, 29591, 6847, 10802, 11983, 24290, 24531, 14120, 1844, 24472, 29011, 26856, 6645, 22206, 9983, 10737, 8401, 3216, 26630, 25341, 14882, 20537, 27681, 21159, 18034, 27996, 31643, 655, 30408, 27019, 28890, 7479, 23842, 2969, 18282, 3057, 27260, 10045, 17178, 29104, 1749, +13421, 23192, 8394, 2860, 408, 19131, 11261, 3624, 12993, 3835, 18507, 762, 31516, 6898, 18797, 26745, 5773, 19452, 24385, 24, 15574, 31864, 23867, 18543, 17378, 26924, 13035, 27423, 11334, 9372, 29172, 24756, 32564, 4798, 27616, 204, 23930, 6109, 3829, 4155, 9944, 22336, 4918, 8693, 29234, 23715, 2670, 2239, 10399, 27055, 2263, 25973, 26151, 26130, 11748, 10762, 20287, 24784, 5417, 31621, 1388, 1822, 23609, 1184, +6620, 18457, 1389, 30550, 24567, 5218, 1938, 1743, 27554, 6856, 10436, 24020, 30571, 13106, 26259, 8202, 7393, 28522, 1407, 777, 21885, 13155, 11539, 9404, 5171, 16956, 8257, 6559, 18778, 31867, 7744, 25399, 17556, 9133, 23181, 9355, 14351, 25119, 11099, 9137, 31975, 21535, 389, 29778, 1874, 26648, 5212, 9267, 22402, 6619, 10044, 11519, 19775, 21583, 20923, 24946, 5772, 29181, 31506, 24550, 28280, 6482, 17181, 13068, +15615, 7595, 22424, 29966, 32714, 755, 6335, 31922, 22290, 6724, 28932, 24164, 604, 1377, 664, 23006, 7996, 10708, 1758, 27771, 32292, 22681, 19950, 5296, 19094, 18688, 29846, 14606, 25170, 14260, 27675, 8017, 21855, 17331, 5215, 21801, 18086, 11550, 20955, 7608, 18274, 17120, 31773, 18878, 18497, 32437, 9116, 26493, 10377, 10874, 21497, 9901, 788, 8679, 15197, 19882, 27367, 12276, 1721, 19769, 26536, 29396, 27786, 15623, +13959, 233, 4656, 32045, 11783, 25612, 6885, 30057, 9964, 5890, 16167, 28461, 5559, 25283, 22186, 15937, 3390, 10915, 25838, 4178, 19594, 8268, 24060, 14193, 20544, 25781, 1194, 14312, 22409, 28980, 29935, 3600, 29213, 1823, 2877, 8228, 27435, 9763, 5517, 4631, 15653, 21684, 324, 21213, 14200, 22511, 4382, 17590, 658, 30220, 21768, 20253, 5720, 13060, 1678, 26264, 6074, 2873, 7808, 28483, 31853, 4975, 32084, 28299, +6799, 2193, 3759, 1466, 11956, 9277, 6098, 27610, 30961, 6422, 16055, 12393, 28933, 20437, 29983, 29592, 17889, 18983, 17077, 23610, 32044, 18755, 17106, 5350, 21628, 24915, 1065, 20714, 29890, 381, 16245, 3921, 2575, 20004, 5388, 14531, 29281, 11486, 9373, 27475, 17908, 25428, 7100, 14074, 13097, 4316, 10898, 30987, 23299, 27975, 21829, 22575, 13962, 6167, 27925, 2823, 31082, 28991, 23537, 28205, 29372, 7014, 32126, 31947, +27018, 4746, 13711, 23532, 16232, 23084, 18239, 1373, 15745, 25339, 15447, 28842, 29655, 26345, 27061, 20187, 21552, 16122, 9994, 2746, 22290, 5152, 5569, 20604, 1375, 29106, 16041, 30747, 3352, 15400, 29927, 30371, 20146, 10870, 21135, 3611, 1186, 6606, 4984, 16931, 31945, 20431, 13006, 28833, 14008, 7299, 16252, 2792, 23422, 26246, 5538, 12944, 31398, 11108, 780, 5, 7446, 16822, 30753, 10799, 32222, 27912, 8402, 19600, +6014, 29537, 23211, 7200, 3375, 28195, 24132, 2552, 15858, 4370, 31385, 29866, 11669, 14869, 32658, 2323, 8348, 5429, 15267, 6978, 16537, 16048, 6984, 23983, 102, 4969, 2014, 32324, 113, 10416, 19156, 6127, 7185, 9600, 13327, 10560, 5027, 4691, 13113, 20886, 9061, 11730, 17984, 20731, 26600, 17875, 23054, 2180, 23304, 5554, 9158, 7073, 21602, 16142, 31056, 21704, 21111, 303, 21260, 21224, 10719, 7648, 27351, 17905, +17248, 7911, 28465, 22276, 12602, 8810, 10394, 21664, 20541, 28378, 9627, 14373, 13485, 32681, 16553, 4021, 5467, 25711, 11094, 27069, 9086, 9383, 16005, 30197, 9686, 4497, 18654, 20405, 12146, 13237, 5542, 29394, 21148, 1240, 18902, 983, 10050, 29296, 22647, 30591, 24907, 32274, 12196, 5624, 32187, 28749, 9646, 4887, 21693, 20740, 31956, 30779, 30123, 15194, 28208, 7041, 19691, 14094, 27447, 31837, 27332, 221, 28464, 15712, +1461, 14598, 16695, 11512, 11127, 6574, 9335, 3266, 6080, 21532, 8890, 5500, 17513, 18536, 10387, 6438, 6509, 9575, 4449, 3864, 24769, 32658, 10906, 11693, 13984, 5585, 10762, 8548, 5806, 6458, 24261, 7268, 21057, 8188, 18780, 32184, 14763, 28115, 2682, 20843, 16879, 11572, 26343, 1625, 30109, 3962, 8063, 3850, 13538, 12513, 7714, 5539, 12403, 18620, 17232, 26387, 24205, 27995, 2168, 30012, 1685, 26429, 4512, 22742, +1849, 23292, 22158, 16612, 18639, 24840, 4688, 2751, 3645, 31031, 4376, 986, 2226, 12439, 4836, 15764, 24952, 12550, 21303, 4587, 31171, 5768, 30975, 22608, 995, 375, 19852, 2680, 26804, 24364, 25423, 28653, 14888, 14813, 12498, 760, 6886, 17186, 3511, 10531, 15449, 7887, 11517, 17675, 20326, 16353, 671, 12511, 28903, 21975, 17098, 27306, 27743, 15305, 17147, 28738, 15680, 4231, 31418, 9716, 28596, 24073, 5602, 10716, +6119, 18100, 11476, 13005, 2518, 14987, 23536, 17967, 22874, 2285, 2875, 10433, 18638, 3546, 22944, 14773, 25521, 7274, 9312, 20496, 22580, 26459, 16466, 5492, 30690, 15117, 15209, 26518, 6422, 20811, 4467, 12541, 6143, 15943, 25546, 8661, 30931, 16314, 26628, 21037, 18599, 29503, 31470, 4469, 282, 21646, 19243, 25803, 28921, 28555, 13532, 18733, 22246, 29998, 24225, 20168, 12347, 6666, 13919, 18770, 27477, 18386, 31311, 852, +1561, 24090, 9513, 32492, 7636, 3374, 20762, 26236, 109, 19464, 30705, 391, 8343, 17180, 26195, 4496, 12967, 6959, 23229, 2445, 4189, 14686, 22614, 16537, 21353, 3765, 2539, 16062, 22151, 1082, 16915, 23712, 25172, 26428, 23437, 41, 29802, 11431, 26277, 29912, 30895, 24214, 30303, 6470, 8627, 23730, 10966, 21594, 30689, 1427, 24040, 2111, 16114, 13886, 18648, 4699, 17651, 21187, 20761, 7034, 22269, 4908, 30746, 14674, +31337, 21415, 14715, 28371, 78, 8224, 25515, 30974, 32438, 23051, 4676, 8297, 14013, 15643, 29892, 11935, 17070, 21164, 14046, 416, 2282, 32694, 5115, 19933, 21113, 25877, 26967, 10614, 30785, 24945, 25288, 29354, 13593, 7235, 24958, 13671, 15459, 17705, 11877, 15130, 7988, 16554, 23427, 22002, 32197, 20551, 1169, 16499, 8947, 15215, 16916, 11229, 15141, 22031, 31162, 3486, 15140, 25361, 14100, 13158, 17539, 6621, 9744, 31132, +13856, 1934, 12035, 29316, 19640, 23913, 11678, 27628, 7699, 2337, 16862, 7128, 22889, 18031, 23627, 31836, 478, 7775, 10298, 15619, 29807, 8692, 19105, 12179, 1286, 438, 25337, 18825, 7059, 2314, 17189, 20915, 4248, 29224, 17463, 23888, 20369, 29141, 18749, 28068, 31479, 2843, 2428, 21600, 20875, 26056, 20668, 21353, 1063, 30966, 4205, 30870, 6891, 23310, 10282, 8177, 23748, 2851, 27002, 30807, 5165, 11423, 18955, 9414, +7879, 3650, 534, 28249, 24, 19283, 23549, 31503, 22127, 25978, 20335, 10234, 19266, 8235, 31587, 20329, 6434, 3024, 18432, 13325, 26335, 28714, 21502, 17315, 31565, 15736, 15355, 3963, 27159, 1542, 13377, 2270, 5192, 13911, 30519, 5216, 427, 21301, 3951, 22554, 14511, 24286, 20, 1009, 32522, 31607, 21338, 6188, 1864, 7002, 19513, 28199, 2948, 8247, 12746, 1746, 23983, 28101, 5709, 18374, 29643, 19086, 20644, 2068, +229, 18396, 7284, 656, 6929, 11236, 23210, 21440, 2754, 23230, 22449, 2508, 22070, 11019, 8696, 23934, 18022, 28209, 19365, 20970, 3688, 32111, 22716, 27671, 27445, 28425, 13277, 24320, 14743, 1154, 26388, 14973, 19550, 905, 15629, 26479, 12141, 6072, 15151, 14895, 29302, 4832, 17404, 18604, 15851, 26100, 9770, 1105, 21542, 29135, 22076, 25230, 28479, 12024, 20134, 23156, 7682, 643, 14708, 22425, 1797, 8329, 4630, 21347, +9234, 20260, 15058, 21375, 26332, 30209, 3502, 22866, 2273, 20906, 8703, 18125, 14239, 18473, 19230, 3013, 14841, 8538, 28243, 10552, 20563, 15609, 940, 28245, 16253, 15648, 17902, 18050, 23977, 22533, 6630, 443, 10025, 21688, 21818, 3589, 19130, 25321, 26455, 21403, 13459, 2390, 6760, 27698, 20864, 25991, 30711, 2937, 1761, 26187, 13489, 22324, 9028, 14429, 17801, 25281, 30077, 2936, 10564, 21287, 25469, 17194, 21730, 2726, +6114, 10781, 6315, 25244, 3334, 2, 13880, 16793, 2393, 20640, 11724, 23257, 13863, 9667, 26194, 15625, 3086, 6915, 5181, 12115, 21344, 22983, 4628, 18653, 25919, 15192, 7172, 18620, 32386, 28903, 21346, 5733, 6916, 27661, 30977, 10250, 27663, 12089, 27043, 30056, 32730, 5999, 20545, 13825, 15667, 13971, 29450, 18753, 20886, 1864, 30868, 9462, 24847, 2729, 28116, 17998, 17921, 2520, 3850, 17540, 31423, 25196, 23273, 5571, +20089, 21482, 15821, 14984, 804, 10097, 12273, 766, 16096, 50, 14591, 31763, 14022, 11274, 17749, 2140, 13138, 15849, 11603, 5217, 18578, 6951, 23215, 3732, 9471, 27065, 21272, 8127, 19493, 11777, 13698, 6814, 491, 29520, 21798, 1295, 6849, 1303, 2061, 22945, 1354, 16653, 21941, 15376, 27927, 6922, 17516, 8297, 22771, 29119, 13514, 8582, 3302, 3961, 12314, 12774, 31026, 818, 20901, 17751, 12595, 1831, 24565, 13086, +31351, 13595, 14382, 5432, 14899, 16443, 28378, 16253, 328, 17551, 31629, 28255, 24473, 16377, 3784, 14476, 12729, 17298, 23058, 16031, 21259, 2604, 28805, 19517, 3422, 16938, 4500, 16017, 18770, 29065, 29104, 17353, 9893, 10718, 22786, 24792, 27161, 18396, 8277, 27490, 3179, 7138, 22977, 27652, 23515, 26762, 9360, 3476, 11292, 32419, 19508, 32552, 2255, 15545, 19301, 5678, 32484, 23802, 21695, 18486, 20099, 18031, 3071, 29992, +28749, 25857, 22016, 23143, 11485, 30293, 17865, 14664, 4663, 8074, 9548, 28179, 2068, 18909, 31655, 13361, 18560, 18395, 13145, 20815, 1173, 32446, 26493, 889, 23480, 15421, 19375, 10812, 684, 22446, 8036, 29434, 15536, 30053, 19809, 27021, 27578, 4906, 8918, 32242, 12980, 18466, 27653, 15049, 4607, 26540, 28410, 23167, 12168, 8787, 11215, 13341, 8465, 4940, 14230, 31946, 20361, 837, 9990, 21046, 23283, 18026, 17712, 6051, +15311, 4753, 305, 10122, 9659, 9223, 9596, 22639, 27689, 4481, 4920, 32297, 31021, 562, 22696, 10421, 9349, 1143, 23762, 17815, 6084, 5224, 16993, 26445, 6061, 26983, 14723, 29345, 12241, 32435, 2628, 27553, 4420, 2933, 4907, 14079, 12156, 14503, 3951, 7078, 18984, 8871, 6607, 17237, 9434, 29303, 27659, 18783, 30447, 18653, 3830, 3763, 23878, 20823, 30208, 29939, 15038, 12164, 26516, 27280, 11831, 29145, 22065, 16252, +32078, 26972, 30331, 11467, 8707, 1514, 18545, 27691, 10386, 25152, 12160, 19820, 21687, 7051, 5835, 19366, 25705, 9666, 23129, 16815, 30489, 20570, 13986, 12760, 32734, 7735, 7272, 11797, 4112, 29337, 28049, 3422, 23541, 25613, 14889, 32248, 27127, 666, 27171, 4745, 25818, 6563, 24565, 14738, 13615, 30401, 1336, 6552, 7299, 24466, 23367, 5020, 12268, 4585, 17780, 12234, 12320, 25052, 24031, 16432, 21621, 19313, 19855, 12394, +12158, 1976, 11874, 6517, 2643, 6277, 11263, 28461, 12841, 3060, 10431, 26456, 693, 11768, 240, 7992, 3466, 23607, 13013, 15734, 28192, 30793, 27968, 7745, 23078, 19231, 24177, 11931, 5776, 11264, 24326, 17934, 13241, 3432, 24452, 15884, 9710, 2947, 11577, 22551, 6007, 22009, 16239, 6701, 1009, 16479, 14693, 4475, 7318, 27706, 20209, 2742, 25732, 15409, 10487, 16042, 1872, 1897, 27973, 7649, 13161, 19531, 25583, 26402, +22964, 17267, 9518, 32674, 20214, 21096, 22457, 26222, 10337, 5928, 155, 11346, 22407, 14848, 15821, 29725, 9787, 3262, 32467, 2751, 18671, 10187, 18793, 20543, 12084, 13998, 28192, 25245, 762, 21008, 18880, 23726, 5507, 28398, 23632, 25722, 16726, 13321, 19176, 27063, 19249, 19331, 5641, 8888, 1411, 21462, 5845, 11198, 24724, 5544, 13949, 10627, 15731, 32742, 31171, 27815, 13973, 26595, 20293, 14735, 14835, 6405, 5693, 20343, +2035, 29325, 13297, 18762, 9878, 32473, 13057, 29127, 19036, 18699, 5247, 20447, 7393, 11092, 31646, 32118, 16636, 12827, 9977, 32368, 12802, 8380, 27415, 26775, 2208, 14940, 8742, 17043, 21345, 14435, 4618, 23381, 10992, 17915, 9375, 20870, 17620, 22432, 17229, 3888, 8363, 22476, 24336, 15757, 800, 23214, 15107, 17436, 3273, 25084, 17036, 16075, 697, 11684, 10082, 2905, 26624, 18824, 19948, 15202, 491, 24567, 5815, 11483, +9714, 15190, 32353, 27335, 4854, 16814, 31223, 13218, 6522, 22791, 28975, 7322, 13237, 11314, 24759, 16511, 3630, 9027, 32586, 4327, 20711, 9901, 7232, 14568, 28725, 27181, 29770, 29217, 18980, 2817, 7932, 28694, 18007, 7518, 23261, 22861, 24332, 21717, 3311, 30855, 11740, 32286, 5409, 24978, 10832, 30168, 8721, 14463, 6428, 8539, 18790, 27139, 18440, 26023, 8939, 14398, 20436, 5941, 10847, 6648, 8758, 18779, 2574, 26765, +26297, 25836, 16859, 17862, 14785, 20170, 15949, 26525, 19689, 21358, 18735, 30521, 18759, 27456, 12216, 25187, 3228, 31007, 19558, 21668, 24262, 28498, 3298, 11930, 1671, 14145, 18578, 10430, 157, 21152, 4427, 26454, 14220, 21286, 11548, 29005, 8689, 27497, 22763, 28378, 16088, 8730, 26131, 2079, 3419, 5580, 27266, 6647, 3819, 14056, 28315, 28081, 9786, 31614, 7243, 11458, 12991, 25821, 21888, 13148, 14205, 26315, 6835, 28426, +14834, 18383, 24663, 23523, 13113, 14658, 19133, 29201, 23389, 12496, 31280, 26808, 18076, 25778, 687, 21895, 7066, 29002, 17208, 16853, 27848, 24451, 28311, 8072, 17504, 17431, 21220, 31710, 10978, 28055, 27368, 25812, 13671, 19263, 16567, 26784, 1154, 2932, 23217, 24543, 15429, 21729, 18583, 737, 14739, 19270, 22633, 21805, 15504, 7073, 5890, 10585, 31525, 1433, 18657, 16261, 18864, 7109, 15203, 29843, 2397, 9803, 22887, 16068, +29067, 6687, 10084, 30221, 9619, 533, 21996, 25048, 22262, 7811, 25786, 4233, 27081, 15651, 26038, 9817, 22724, 31929, 20402, 21481, 594, 6291, 4975, 19459, 13401, 20178, 16534, 15798, 29982, 6653, 31866, 26281, 13340, 9182, 23734, 22960, 9715, 12962, 15240, 31977, 20773, 8258, 3442, 15086, 23909, 29480, 24903, 13866, 28641, 12538, 2579, 29236, 18829, 7554, 15927, 32230, 27733, 32461, 15260, 24947, 6346, 14358, 18460, 19687, +23540, 9426, 9879, 487, 22388, 25119, 32464, 10393, 610, 3138, 25479, 24519, 32619, 17614, 5617, 28492, 30152, 8197, 24960, 16214, 15751, 8119, 15676, 10716, 7812, 30937, 2895, 14159, 12527, 21355, 1078, 3300, 30781, 10957, 3787, 20401, 3308, 3484, 30794, 3918, 6622, 23505, 28438, 6473, 8352, 1287, 2198, 5736, 9484, 27158, 21950, 25236, 2510, 4859, 3184, 10322, 3028, 6080, 24481, 15555, 27435, 25559, 18855, 25449, +3748, 22643, 13082, 7057, 26127, 11109, 10975, 32749, 1846, 6645, 6455, 10198, 7933, 8653, 15935, 17417, 3043, 5117, 9885, 5553, 9976, 13070, 15876, 13004, 19150, 7589, 28560, 13817, 381, 14647, 6498, 4129, 4522, 19581, 11186, 30649, 30690, 22162, 30631, 32536, 28807, 4318, 9967, 3972, 12971, 25902, 21390, 16014, 31019, 31275, 21568, 8228, 11577, 4676, 21232, 30727, 12265, 17024, 11777, 12646, 31672, 18275, 16776, 3426, +5088, 27962, 1308, 3010, 17356, 31939, 2779, 13396, 3489, 12746, 17368, 16460, 5880, 5990, 32474, 4131, 4498, 21274, 12359, 16075, 25950, 824, 14035, 5448, 17848, 25812, 18094, 16752, 11319, 2102, 20179, 16408, 30065, 21487, 19418, 14653, 20658, 22197, 28049, 24147, 2175, 12650, 7839, 8055, 18640, 7545, 12187, 23138, 28820, 24546, 6446, 22002, 25370, 20481, 27450, 10451, 13525, 12777, 27203, 24844, 14879, 14614, 8484, 12176, +3333, 27903, 26830, 23991, 17332, 22111, 15370, 19508, 1993, 23209, 27563, 20634, 30755, 6982, 11004, 26807, 31529, 17450, 16041, 24131, 5163, 10724, 1814, 18688, 23501, 29018, 10765, 5612, 10864, 19249, 17789, 14198, 14384, 11851, 5421, 31717, 1194, 20792, 18457, 3188, 11233, 13252, 23822, 9220, 20235, 2058, 3259, 18996, 19509, 19301, 10359, 24672, 30025, 12174, 10593, 20758, 8424, 21358, 26370, 19288, 7839, 11391, 718, 22224, +23242, 6140, 21173, 24437, 26932, 6862, 27625, 5397, 20114, 18679, 14618, 7581, 20737, 17877, 26577, 7478, 4410, 4169, 32151, 1667, 16343, 9976, 22425, 24767, 31334, 16028, 11287, 6405, 27419, 12006, 28629, 17894, 18146, 17034, 9563, 12310, 23896, 4420, 17707, 11243, 23099, 32325, 18824, 11068, 17435, 12634, 18547, 21845, 16803, 17930, 23513, 378, 27906, 13170, 25145, 26472, 29198, 3664, 109, 23850, 15670, 28739, 8976, 1048, +13005, 18539, 13358, 4134, 22959, 31066, 15377, 13290, 30623, 1433, 24358, 15290, 14067, 10137, 4368, 30870, 28067, 27881, 31248, 23205, 8283, 23625, 16909, 4714, 27290, 17019, 28564, 10192, 12990, 4772, 11241, 25995, 23311, 24599, 30129, 13502, 22897, 12738, 26792, 20753, 14172, 18382, 3275, 28239, 28520, 7643, 26342, 23819, 2756, 24822, 14257, 11040, 15680, 31166, 15754, 10202, 15417, 11550, 20394, 28407, 16322, 31635, 21635, 6865, +23467, 18996, 20367, 13596, 31735, 14391, 1581, 13139, 5, 4857, 8610, 28525, 12500, 2184, 19577, 15257, 27007, 1066, 26297, 9919, 32232, 9283, 20121, 14882, 20833, 7747, 10521, 4387, 6615, 32156, 11252, 30082, 18385, 31619, 10910, 17352, 13242, 12492, 30491, 13247, 17349, 6333, 9005, 29849, 8518, 28582, 12338, 2757, 29648, 5867, 12676, 29112, 15150, 29, 11226, 3215, 7776, 21748, 7602, 14391, 21136, 18854, 11705, 6753, +17705, 22616, 24105, 30947, 2340, 21828, 11427, 19689, 28162, 20432, 16770, 3912, 16246, 29109, 6669, 13126, 2208, 19345, 9470, 17359, 19374, 20697, 20574, 27150, 9677, 28177, 8774, 30813, 14263, 20479, 4799, 31969, 10327, 28904, 30148, 12667, 17965, 8807, 32356, 13359, 29239, 16359, 17271, 12717, 12700, 23940, 25843, 14908, 10517, 2546, 32267, 29891, 23243, 20074, 24273, 152, 15483, 279, 30965, 29746, 20759, 2996, 28947, 31086, +31901, 26328, 10986, 17098, 2367, 10574, 30457, 31607, 26933, 14960, 11556, 6865, 6132, 4632, 21774, 16649, 7178, 21273, 13772, 30421, 8579, 5277, 30573, 24062, 5557, 28770, 21041, 26316, 31767, 17220, 24634, 30900, 10780, 2852, 15230, 13148, 13427, 12919, 11987, 7592, 27879, 23543, 14458, 1243, 28175, 3464, 17892, 2585, 24737, 31664, 238, 549, 4173, 30811, 24611, 9730, 26814, 12884, 3278, 25813, 30105, 27913, 23945, 8117, +30765, 6407, 21265, 11424, 19326, 484, 19017, 14437, 24028, 707, 15680, 19435, 4171, 804, 22021, 28908, 32468, 22259, 29457, 3873, 20303, 21301, 13604, 14349, 1417, 16882, 7394, 31522, 12027, 31339, 6872, 10025, 4978, 28137, 21449, 24304, 28622, 7698, 5973, 19882, 8405, 21653, 6549, 12576, 22457, 28570, 8717, 22157, 18062, 5406, 26030, 5597, 26707, 6866, 19946, 28125, 23749, 27340, 26879, 3008, 25911, 983, 13033, 30889, +29121, 1715, 22425, 24975, 9413, 28398, 12089, 17819, 17283, 18638, 30395, 6972, 14441, 6344, 29129, 32503, 11751, 22391, 5332, 5690, 29258, 25278, 1047, 20239, 19850, 27927, 23247, 12993, 28910, 3513, 11114, 25263, 5228, 771, 17470, 14641, 29169, 29559, 32460, 13684, 15430, 30088, 20656, 29871, 3664, 17017, 29606, 15415, 6640, 2170, 21106, 3130, 27448, 22153, 23369, 14530, 17312, 13849, 27523, 13455, 17362, 5869, 5950, 22590, +6640, 23421, 4463, 3041, 20212, 4156, 16725, 2874, 1476, 4613, 32745, 5140, 21630, 29583, 20556, 28270, 31753, 8894, 31401, 26433, 31047, 22002, 8195, 15592, 3083, 2950, 29047, 20445, 8819, 2229, 10267, 15459, 25650, 14731, 18500, 13095, 18887, 2457, 15969, 20363, 7070, 15947, 25503, 28700, 12762, 13291, 24203, 11748, 22185, 22836, 5413, 20465, 12070, 13609, 3289, 15154, 16559, 32336, 2831, 25379, 1797, 13099, 8070, 27448, +27830, 26571, 7775, 13949, 29028, 23744, 1544, 3331, 6923, 27047, 32031, 19686, 7571, 23466, 31434, 29756, 13534, 4079, 17453, 25605, 17688, 20742, 7991, 1480, 20310, 10822, 26859, 22108, 23921, 2161, 16788, 18983, 28732, 24563, 164, 24993, 15539, 1708, 28324, 22463, 28756, 27587, 9381, 3559, 18286, 8047, 547, 31820, 12126, 18001, 24657, 29815, 5975, 32648, 31295, 26286, 10703, 25386, 15626, 1856, 27547, 32414, 20840, 23512, +24209, 21004, 15737, 6980, 22713, 11293, 29443, 18701, 6112, 6056, 22260, 24398, 14103, 22807, 23451, 26230, 8040, 15340, 23277, 14016, 15221, 21804, 7534, 25924, 14422, 23160, 27780, 9201, 22806, 15852, 32713, 14247, 4089, 15682, 21227, 26802, 26975, 17903, 12735, 320, 23959, 2227, 24718, 5295, 25034, 15401, 31525, 307, 30742, 22034, 14323, 13195, 11070, 21857, 6351, 25492, 12249, 1363, 1925, 2287, 17216, 1871, 16534, 21305, +17553, 4993, 15339, 11761, 22896, 28074, 12081, 14088, 30301, 4031, 19383, 22567, 19433, 18140, 22874, 17407, 7406, 4429, 30602, 18476, 26286, 4185, 11200, 5767, 5548, 13125, 8054, 22764, 14996, 24588, 11301, 32550, 29582, 26640, 11543, 19710, 21946, 23624, 1030, 19479, 27655, 20413, 9279, 14320, 5785, 32153, 31727, 13191, 3815, 29561, 31667, 30101, 978, 10099, 3101, 6527, 23225, 11155, 29291, 5453, 2976, 7825, 5235, 32558, +1697, 16778, 19500, 23644, 7634, 20531, 10355, 2522, 8176, 19634, 16842, 13962, 19020, 15802, 27153, 22835, 12595, 26053, 20168, 13574, 3384, 23269, 20101, 26609, 1657, 16624, 32063, 4633, 24449, 4530, 4423, 26147, 21309, 23923, 17023, 28943, 11686, 27378, 31465, 19863, 14245, 15540, 1057, 497, 31342, 28210, 23332, 11169, 21495, 10732, 24743, 24880, 1234, 12076, 18721, 2891, 28701, 18016, 7524, 20382, 22547, 11947, 13761, 11088, +3102, 30784, 7263, 14789, 25395, 5961, 1884, 6872, 21501, 2941, 7369, 20075, 31151, 30701, 31244, 19879, 8665, 23220, 11991, 9899, 2528, 30712, 12790, 31229, 15961, 20314, 18844, 5740, 32261, 32605, 16828, 2596, 30622, 24091, 17385, 23249, 30052, 19269, 30121, 18785, 22210, 4722, 6092, 20593, 2655, 4569, 7704, 11320, 27789, 19695, 21220, 30317, 17640, 1242, 28779, 833, 21557, 14855, 6573, 21050, 14692, 23401, 23646, 12546, +14724, 8263, 3027, 12009, 27532, 380, 30794, 16974, 5102, 4119, 4800, 7757, 8688, 12504, 19078, 3709, 32200, 7530, 1258, 17072, 8772, 30037, 17905, 30329, 12124, 24478, 18612, 26817, 15111, 9490, 6595, 29835, 17754, 9623, 9076, 12518, 10003, 7103, 29493, 15106, 11222, 1525, 22863, 19910, 14029, 9173, 23619, 13461, 16703, 24877, 30533, 25476, 22147, 15670, 23037, 1503, 7380, 8881, 28320, 22491, 18372, 2148, 19559, 3358, +11771, 28635, 15876, 21774, 2970, 12601, 4112, 14192, 14126, 26976, 1334, 28156, 3381, 24953, 8849, 20085, 17063, 6615, 12793, 6442, 22285, 3062, 7945, 29666, 11944, 3498, 19389, 30316, 5646, 6180, 906, 17417, 2048, 16782, 6423, 5018, 29384, 10536, 19211, 10742, 4744, 20545, 6130, 8125, 12731, 14980, 28210, 29794, 21595, 8235, 3468, 11112, 11298, 11413, 8010, 23242, 14911, 27400, 20790, 20557, 812, 21696, 5206, 2860, +5710, 11630, 7879, 2326, 22166, 27090, 13069, 26910, 14867, 19199, 2267, 27598, 1411, 30478, 24624, 23006, 5945, 28092, 1351, 17243, 6738, 9361, 7717, 21649, 3993, 28507, 9439, 4806, 17435, 14645, 7666, 23146, 26275, 15545, 25472, 15673, 9867, 5773, 9815, 24735, 24973, 12083, 19565, 26384, 9793, 11422, 16623, 15738, 6746, 17974, 214, 13484, 27335, 7931, 2366, 31329, 3671, 11805, 3367, 21106, 26450, 11033, 11484, 19958, +26579, 4189, 2863, 3678, 9962, 12679, 28413, 2167, 24762, 15211, 28552, 1787, 26633, 12407, 17525, 611, 30381, 17739, 14096, 24948, 25671, 16462, 23509, 29342, 28267, 26876, 17680, 21949, 5142, 29165, 9139, 31721, 586, 12003, 2631, 10548, 24682, 31045, 12716, 16676, 13488, 8500, 18463, 7353, 20907, 3220, 7964, 18520, 20960, 22060, 10700, 13863, 5754, 1442, 10437, 1253, 28318, 28117, 23203, 692, 24514, 32342, 32413, 25100, +11577, 2277, 2881, 3491, 554, 15597, 20167, 14042, 24097, 5862, 21395, 12236, 9083, 29359, 30756, 30043, 18652, 8688, 11138, 24406, 10130, 21575, 25660, 5681, 16924, 16095, 6373, 8671, 15669, 6019, 1003, 27247, 8296, 3884, 30738, 8850, 19481, 18138, 22892, 10810, 24000, 11519, 23046, 315, 8110, 21034, 30358, 26762, 29723, 8728, 18401, 7085, 30303, 11293, 12766, 14460, 27388, 19140, 23131, 10289, 25159, 24134, 4768, 687, +28019, 2739, 9537, 14732, 20877, 32429, 25543, 12109, 11180, 15821, 12425, 19290, 4088, 10015, 13285, 1043, 18744, 31686, 8128, 16279, 10211, 20895, 30739, 4831, 7267, 21102, 15120, 32426, 12469, 19889, 345, 7720, 22628, 9882, 22452, 10737, 9543, 15227, 22846, 20723, 31049, 2503, 7245, 2369, 12519, 20530, 3412, 31263, 19448, 11540, 14774, 29659, 32435, 12746, 1722, 6934, 1080, 16843, 6592, 13549, 3964, 6937, 21269, 26592, +16819, 10954, 4561, 26362, 26181, 27407, 14317, 24462, 29911, 21563, 26831, 9662, 9325, 30243, 8157, 28774, 9016, 22931, 25665, 8683, 2909, 27388, 15618, 3990, 11463, 22210, 17539, 15427, 29148, 6041, 9251, 13199, 16995, 13812, 6794, 10408, 8451, 21111, 2103, 5594, 9906, 28934, 15256, 19232, 26410, 23413, 15238, 2658, 13577, 8135, 11341, 16486, 2755, 26959, 20476, 14218, 16402, 5248, 29645, 12782, 11289, 6128, 25981, 28284, +19940, 7, 5924, 28392, 21119, 8027, 1218, 31025, 4194, 16475, 17489, 30604, 7120, 32727, 494, 20697, 8095, 11835, 4416, 10850, 6027, 24892, 25069, 22429, 30140, 21946, 2443, 8661, 28075, 28424, 4177, 15247, 28432, 10102, 10871, 16783, 18129, 12090, 15040, 22323, 28565, 32530, 20159, 2917, 32489, 20653, 23615, 7816, 32489, 28031, 18667, 5748, 20155, 10968, 28177, 17528, 146, 30620, 26189, 28221, 26276, 30367, 10701, 21940, +7701, 21572, 5955, 25830, 894, 20996, 15386, 29459, 20758, 2777, 32377, 20479, 23431, 23224, 28296, 23152, 18487, 14195, 28900, 5874, 25163, 24309, 23402, 25309, 22161, 16824, 20763, 15669, 14423, 31464, 4842, 22124, 20268, 10797, 15186, 21163, 31793, 30572, 17854, 19783, 582, 17463, 7495, 24013, 7919, 3023, 14397, 26406, 17218, 10529, 32281, 9613, 2070, 22915, 2154, 24231, 6971, 22917, 7132, 21394, 21613, 11974, 10750, 9114, +22772, 25937, 30277, 21797, 23741, 15363, 8813, 24323, 59, 16308, 15568, 7978, 19331, 29965, 1617, 3781, 7726, 1130, 13394, 9796, 24045, 15548, 1259, 31017, 5698, 8392, 19643, 27311, 20366, 30394, 3657, 10370, 23563, 1166, 32168, 14536, 16530, 8213, 6092, 16589, 24521, 21660, 24567, 11084, 18858, 26184, 14865, 26584, 27314, 28259, 3613, 18592, 11039, 4872, 16841, 16737, 13264, 3716, 11281, 863, 1342, 14938, 11233, 24905, +16105, 10633, 6674, 32635, 18846, 12766, 16456, 10599, 1658, 8255, 21683, 20516, 1672, 3780, 14333, 28986, 32039, 17946, 14810, 10311, 22818, 31651, 27048, 3315, 2600, 5561, 4178, 3942, 20500, 15411, 28848, 3837, 26045, 2754, 3704, 12123, 15520, 20160, 22723, 17178, 28415, 11638, 4927, 30087, 15419, 19260, 26306, 14690, 4438, 8348, 25001, 27256, 7232, 19282, 30571, 9832, 24843, 1981, 13774, 12575, 17393, 9854, 16412, 10670, +12608, 20116, 22793, 28128, 7508, 12748, 12539, 3156, 24387, 17466, 475, 7038, 3958, 26781, 21728, 8396, 2362, 13962, 2884, 9594, 476, 688, 19426, 25319, 2669, 432, 5127, 20062, 10287, 21539, 30732, 22895, 8888, 20758, 18256, 16396, 738, 30795, 19552, 25125, 15493, 20028, 32163, 19451, 14041, 21124, 27847, 16403, 2318, 30731, 25997, 2794, 31419, 12655, 28113, 1321, 13088, 472, 21383, 23375, 22012, 19348, 13502, 30900, +7338, 31758, 14528, 8076, 29785, 1313, 434, 12510, 21341, 32597, 31961, 2614, 20953, 27040, 19018, 23271, 25004, 12247, 26065, 23655, 24903, 21411, 24976, 5223, 21883, 13592, 28598, 11127, 172, 9332, 9259, 7510, 8323, 23788, 15586, 5340, 25101, 16020, 17851, 13674, 15850, 17044, 16288, 4035, 11317, 2538, 27307, 3553, 14786, 20604, 27208, 6921, 9247, 19417, 12144, 31131, 241, 7974, 9490, 413, 17306, 18750, 7923, 25629, +9770, 23509, 30970, 2103, 6762, 16053, 15777, 22612, 329, 32065, 26647, 11646, 1836, 21186, 15199, 16622, 9023, 9640, 23543, 18270, 29057, 2919, 16633, 29298, 10893, 26124, 29711, 28199, 12106, 4866, 21061, 21876, 28375, 19263, 23979, 2369, 2548, 6988, 24981, 2877, 6285, 18861, 14524, 8121, 7279, 29723, 24743, 16302, 6595, 15518, 1805, 2884, 18437, 18438, 32182, 29330, 11794, 29125, 24762, 23900, 1223, 13055, 13008, 29599, +32318, 4219, 31968, 2098, 11207, 24182, 4975, 17493, 10275, 19499, 25614, 17554, 16455, 17590, 1089, 23050, 340, 2894, 25935, 18778, 21332, 25349, 15340, 359, 21707, 7334, 24259, 22930, 20389, 4500, 19761, 19939, 8719, 18962, 22037, 19927, 10376, 27013, 4652, 20651, 13744, 30266, 5437, 30199, 15088, 6526, 20482, 15429, 9420, 13649, 1439, 30753, 6230, 16779, 31112, 27937, 24114, 22603, 18100, 11735, 27103, 5093, 31675, 3055, +24055, 20944, 22982, 1663, 15189, 27634, 22314, 28934, 25132, 27752, 26365, 7453, 1510, 14079, 22882, 10931, 27728, 24321, 8916, 1191, 8332, 7260, 29128, 32446, 29863, 14460, 11414, 24199, 19554, 10321, 27254, 10841, 31265, 17468, 12505, 13687, 12334, 2051, 9853, 4698, 29803, 3450, 12151, 31314, 17530, 2265, 9477, 12490, 26586, 18393, 13681, 2151, 25653, 10042, 1829, 22748, 24502, 13243, 14179, 11288, 23564, 8665, 22130, 22062, +26133, 1867, 2981, 5699, 3918, 12834, 10398, 954, 16284, 22549, 32268, 1046, 24815, 8977, 13537, 18633, 27370, 27218, 20784, 20255, 4492, 22614, 10235, 28995, 3089, 24415, 7515, 26654, 312, 29645, 15948, 26446, 31512, 18929, 32145, 2663, 31763, 9775, 3617, 15279, 32325, 3117, 16326, 24372, 12094, 29863, 10237, 6696, 24313, 31022, 26951, 28806, 20868, 4418, 25033, 23957, 28833, 32548, 17843, 29146, 29426, 1023, 22824, 28170, +19952, 22201, 30833, 18947, 31977, 1682, 1459, 31534, 4799, 17785, 23138, 16893, 14880, 607, 23589, 6425, 31629, 17772, 2463, 19729, 22191, 27496, 10919, 18256, 27277, 28762, 14634, 23935, 29786, 4690, 19337, 16970, 26892, 17403, 3150, 26101, 19085, 4609, 24867, 23885, 22394, 15237, 8010, 4506, 15844, 31600, 10931, 14706, 16604, 13395, 1667, 6027, 8123, 12586, 24284, 2632, 8581, 6150, 26567, 5599, 10841, 13137, 22569, 4965, +30540, 25719, 31066, 16857, 30328, 23165, 7974, 19954, 5634, 15985, 24460, 21478, 14817, 2624, 3416, 31421, 16019, 5084, 4681, 24142, 17670, 28965, 26775, 26251, 2347, 20574, 31850, 13188, 943, 21652, 18153, 31483, 14603, 16451, 15573, 12164, 6848, 23547, 32118, 12482, 6764, 23811, 1193, 21581, 26435, 4609, 20235, 9686, 9693, 24916, 1060, 27364, 21113, 27835, 20847, 23460, 15642, 19930, 3881, 16585, 8814, 22034, 15301, 23417, +5718, 30874, 2813, 12566, 21653, 2164, 25049, 28418, 25975, 26242, 17231, 19642, 30851, 4698, 29328, 7777, 29614, 30388, 2373, 17959, 25456, 23220, 8652, 8330, 10382, 12533, 24915, 19196, 1799, 7448, 9846, 7517, 5554, 12659, 20084, 27208, 14823, 12365, 22858, 8030, 5839, 7321, 27672, 3922, 12020, 24232, 11699, 8866, 21853, 14072, 26826, 14541, 4525, 2710, 22871, 14907, 15243, 15018, 1336, 17042, 22467, 11182, 24560, 28021, +23841, 11876, 22461, 5897, 24241, 12551, 13927, 30080, 19873, 8832, 1234, 31893, 296, 12934, 7991, 22149, 27006, 2049, 3922, 31531, 4759, 26793, 13671, 20002, 9044, 15007, 4277, 31511, 26189, 28837, 26764, 17262, 7945, 16458, 23159, 32186, 29009, 4319, 29498, 16114, 13151, 30732, 15239, 13447, 10898, 23231, 2829, 5137, 25280, 6751, 3900, 30040, 777, 17571, 17274, 9821, 32578, 21551, 8564, 25999, 17620, 2560, 10494, 25565, +19018, 885, 24983, 15260, 5204, 21713, 31374, 18355, 19678, 13846, 31803, 30576, 4309, 1864, 2945, 29589, 8615, 6846, 26861, 9392, 24417, 11368, 19213, 24228, 151, 27777, 17459, 17772, 30338, 27953, 10569, 16588, 28839, 2785, 31848, 1275, 24498, 30455, 19631, 11408, 11533, 18666, 9217, 15842, 20530, 12162, 12663, 29145, 19008, 6757, 5770, 10658, 18125, 24983, 2118, 18276, 19993, 19577, 3280, 17563, 14763, 13850, 1383, 10834, +16635, 464, 12109, 8365, 30919, 31740, 19774, 9684, 17638, 28991, 25526, 5400, 8385, 5421, 1778, 27394, 12178, 7548, 5284, 30303, 32531, 7402, 15812, 19756, 26979, 19092, 4551, 8974, 174, 5935, 19808, 16809, 6399, 31918, 25175, 4550, 30890, 12181, 14234, 15761, 8404, 6992, 21161, 16789, 12413, 22939, 11415, 24592, 30487, 16699, 22127, 30251, 24101, 5171, 17239, 18313, 24264, 21791, 27287, 24438, 27726, 14328, 8480, 1357, +13478, 887, 5907, 11600, 13068, 20141, 27361, 21472, 27133, 15755, 5493, 6778, 5926, 16909, 31370, 3646, 840, 20730, 1129, 24942, 25901, 18368, 10487, 17397, 7391, 5006, 9068, 2349, 19334, 17548, 3706, 44, 18435, 9613, 11645, 31503, 29754, 6238, 20207, 24119, 21993, 25700, 30898, 27920, 9841, 29500, 31566, 10682, 17462, 32695, 2856, 10596, 18295, 13343, 27993, 25687, 18349, 4293, 28036, 4916, 21841, 31743, 4960, 7508, +8588, 16605, 6243, 5575, 22844, 26450, 29694, 12069, 19383, 27824, 7221, 29224, 24557, 6019, 7138, 9251, 5946, 9994, 19847, 24242, 23337, 15073, 17161, 8919, 19366, 12429, 13835, 8440, 11404, 18795, 15948, 19993, 2633, 22192, 25568, 25477, 15874, 22494, 4778, 2489, 17551, 12000, 31714, 9340, 18019, 6084, 18591, 23966, 16079, 5671, 15440, 6648, 20744, 32601, 15567, 7342, 12262, 29402, 15782, 23667, 15430, 31731, 10892, 18063, +21155, 3692, 10772, 4261, 26186, 15550, 6751, 10969, 27550, 5697, 20309, 12802, 11781, 6133, 4000, 27860, 11804, 19440, 1741, 32548, 19273, 17308, 7122, 31535, 13943, 22905, 22434, 29373, 21868, 558, 14668, 10255, 4250, 25440, 14516, 30437, 8222, 21267, 8638, 3005, 26964, 28948, 15807, 5978, 2313, 19807, 1070, 14117, 6479, 2811, 13897, 25752, 20120, 21019, 24519, 1295, 11156, 14186, 30668, 256, 14744, 12568, 10511, 18995, +5240, 25028, 16664, 13462, 13527, 25302, 16467, 7724, 21482, 32274, 13702, 23795, 19313, 14772, 5144, 25792, 17584, 19041, 18776, 4936, 7293, 10528, 6231, 18449, 24714, 4131, 18706, 6690, 16699, 29217, 25685, 21939, 21477, 9581, 2633, 2237, 2116, 19101, 9961, 23598, 18607, 23663, 14626, 5153, 5667, 19770, 30945, 23251, 6044, 16954, 28187, 13337, 27482, 1650, 31786, 19428, 5781, 17724, 26118, 22480, 14174, 19036, 11651, 2883, +28617, 14285, 5120, 30733, 618, 15081, 21564, 19225, 5976, 3422, 24378, 11644, 23192, 22556, 2127, 29236, 6742, 30315, 9805, 1456, 31965, 8824, 20884, 4979, 26548, 14234, 27459, 7954, 502, 6343, 10838, 29120, 20628, 15958, 27085, 21246, 31040, 15881, 7703, 4248, 19303, 32082, 15892, 9728, 21870, 18020, 6196, 28612, 15567, 16002, 30068, 14764, 24826, 18184, 19743, 18606, 32418, 14435, 26561, 153, 20778, 4631, 29273, 8638, +20589, 23590, 29884, 18861, 6704, 4819, 23110, 26007, 4133, 6234, 2967, 26003, 24254, 9164, 21847, 7053, 25166, 19147, 21818, 17224, 4563, 8793, 3062, 4214, 23228, 29623, 4367, 11238, 1486, 872, 19876, 22076, 24462, 16992, 8169, 31166, 21812, 31279, 24406, 25945, 4746, 27373, 19181, 29000, 3769, 8260, 3286, 28935, 27408, 25104, 13391, 31971, 1129, 16454, 3417, 24358, 13309, 7784, 2828, 14796, 8656, 22705, 4104, 351, +6929, 12273, 31517, 28741, 10785, 23155, 21919, 15531, 17761, 8332, 11763, 21530, 16592, 15049, 17698, 11232, 7385, 31089, 10436, 8515, 14775, 13853, 105, 28085, 21638, 2933, 10113, 30294, 25638, 14217, 30645, 32568, 26490, 29395, 28541, 4507, 19782, 17692, 20038, 4775, 26024, 31802, 26306, 9849, 14083, 11236, 21081, 21469, 9557, 31517, 29984, 24333, 12603, 30089, 19650, 1473, 254, 29763, 31767, 25893, 11212, 29645, 25693, 4934, +26272, 21466, 9442, 13286, 6391, 29480, 18062, 32415, 28514, 11600, 9496, 9830, 22836, 30578, 31299, 32393, 29327, 28515, 23958, 9162, 25836, 10840, 10635, 26090, 7835, 9635, 19215, 19047, 6512, 12140, 23982, 16, 839, 656, 13302, 7230, 30136, 31364, 6877, 25883, 10196, 16374, 2945, 264, 14184, 1476, 32658, 10743, 29991, 23848, 19906, 23059, 1921, 30541, 16381, 9756, 7408, 2829, 28804, 13920, 14969, 20018, 13936, 15808, +20674, 27239, 23038, 18042, 25835, 29916, 11157, 3264, 13522, 14102, 3528, 27706, 15578, 3418, 5681, 12801, 27267, 25587, 3092, 29188, 23361, 19474, 6176, 30769, 22303, 2212, 11922, 4504, 22230, 25858, 20313, 10136, 20329, 10583, 28179, 13397, 7731, 6568, 16661, 21253, 20671, 20189, 16191, 3481, 23608, 21873, 16283, 18107, 14692, 19375, 14527, 5285, 6081, 20703, 3287, 28384, 22916, 15209, 121, 12378, 8299, 20434, 22515, 28629, +31017, 17926, 9258, 5981, 24494, 25919, 27234, 12397, 13340, 10658, 15879, 4180, 32531, 32162, 22287, 14455, 18769, 4046, 19741, 24851, 24750, 23028, 20467, 14898, 5469, 20588, 27276, 13768, 8254, 17023, 9629, 6504, 2181, 18887, 12485, 26676, 12038, 6951, 6305, 25379, 17609, 22184, 29559, 17372, 21578, 19079, 31828, 7580, 23125, 18801, 32431, 15107, 9061, 20130, 30005, 14530, 7951, 24514, 28298, 16205, 8769, 5160, 22709, 10951, +24047, 2426, 4859, 3318, 9378, 11164, 28697, 26987, 581, 25488, 11592, 22159, 11799, 10652, 29739, 2157, 29453, 29402, 17264, 5746, 16765, 14502, 20276, 24716, 6248, 15806, 8153, 15017, 20966, 30863, 25968, 12246, 521, 30827, 15564, 9899, 9224, 11493, 4119, 9805, 4213, 15711, 31964, 16013, 26363, 28936, 18170, 23048, 25570, 2666, 28794, 9567, 17168, 16302, 1515, 23416, 32108, 9669, 5666, 20307, 7764, 31634, 32553, 8285, +29694, 15349, 18185, 6150, 26842, 22304, 15955, 31055, 5247, 15151, 14300, 31610, 11319, 32470, 21890, 4122, 2369, 17916, 13689, 19537, 1450, 15205, 10186, 790, 24874, 15852, 21097, 32638, 14718, 20882, 8155, 11644, 3463, 26340, 17794, 30305, 15876, 981, 28593, 21123, 16133, 10125, 19965, 27452, 9828, 9087, 31574, 12197, 27003, 12496, 31734, 28453, 27701, 9152, 29244, 19807, 25004, 17573, 19677, 6955, 5688, 27832, 18599, 9151, +21405, 3626, 6689, 4513, 4607, 2514, 25637, 20740, 12639, 12834, 15425, 22467, 21922, 14231, 1896, 16157, 26727, 863, 11843, 21660, 10015, 8319, 8699, 2252, 25892, 28376, 9207, 31580, 23441, 27806, 7964, 12078, 31432, 14653, 16591, 3272, 17167, 9460, 24012, 29806, 22295, 6669, 19506, 11449, 20901, 21402, 27606, 14860, 22265, 6681, 3753, 32281, 15000, 12452, 1765, 8125, 8061, 10972, 6937, 31502, 6010, 14901, 10812, 4675, +29554, 27403, 7947, 13953, 4096, 31959, 10992, 26391, 5861, 30498, 5072, 26762, 19132, 32678, 8854, 8630, 6592, 12607, 8143, 21592, 25060, 9908, 29717, 353, 20880, 3887, 31855, 26890, 18788, 9899, 31565, 15575, 4534, 6744, 29528, 8630, 5936, 7752, 2253, 11797, 5482, 7325, 5791, 24615, 7236, 14645, 477, 13828, 27253, 8620, 2652, 19545, 18528, 32370, 19898, 6640, 3489, 18985, 762, 22277, 28884, 32328, 5084, 650, +6304, 1845, 9281, 12240, 9597, 11534, 24037, 15080, 18860, 29828, 6927, 26096, 11706, 7404, 7156, 6191, 16024, 9808, 25736, 1784, 9410, 12866, 8424, 12899, 31851, 9186, 2409, 27967, 8746, 7493, 28617, 15051, 9338, 5130, 27291, 18936, 16665, 18561, 1248, 2757, 15621, 8175, 28853, 27327, 15579, 3241, 750, 31603, 13049, 26486, 619, 22460, 6584, 9043, 2591, 5667, 18229, 5000, 866, 26976, 12494, 29484, 9259, 21832, +1846, 3782, 8000, 18511, 22343, 9248, 21268, 5197, 17423, 17353, 32524, 234, 20594, 507, 31837, 876, 26993, 32456, 23336, 810, 8731, 25927, 6477, 26961, 30928, 7344, 21169, 10654, 4060, 30428, 32486, 5906, 1442, 7719, 24418, 23786, 16967, 12918, 28983, 1623, 30272, 28739, 1857, 18098, 29246, 927, 18974, 23472, 615, 9542, 24282, 9347, 2702, 30759, 3540, 862, 5335, 24709, 11516, 9395, 22369, 11234, 15302, 23811, +18953, 6952, 14829, 3153, 19870, 11044, 4776, 17374, 7016, 6633, 2705, 3494, 7560, 21679, 26966, 8176, 31222, 18480, 17523, 1156, 16472, 21063, 2018, 21807, 13004, 13534, 31203, 2605, 24768, 13737, 26416, 10954, 20689, 8478, 14107, 7791, 19522, 18883, 25166, 26538, 25516, 27871, 30033, 309, 16782, 24231, 8485, 15236, 9944, 26008, 16392, 26416, 14303, 18410, 15455, 27307, 31944, 13890, 29912, 23945, 27627, 23560, 2131, 15548, +32038, 16238, 23340, 18793, 2353, 15738, 12563, 27869, 10841, 9828, 28178, 27623, 1292, 3895, 10092, 11236, 29903, 26484, 4884, 11438, 12127, 20339, 5977, 11303, 1462, 3121, 2480, 29089, 26682, 4611, 11870, 25952, 20849, 2442, 11977, 23202, 18180, 24541, 18304, 29021, 1601, 13714, 23876, 2893, 17610, 1200, 14129, 14745, 27685, 19013, 26184, 7044, 6585, 32161, 18347, 8047, 2515, 20828, 4368, 29197, 25439, 16238, 22381, 13521, +18680, 1591, 3955, 4092, 26132, 22259, 345, 27733, 3206, 24222, 30627, 20816, 25422, 11988, 2793, 20339, 31002, 28977, 27383, 4819, 28371, 12963, 12866, 30886, 1023, 17234, 27315, 26462, 705, 16928, 7215, 19385, 18519, 11171, 23478, 11883, 662, 23823, 6849, 3868, 15277, 4708, 24684, 7932, 16696, 27478, 28271, 14930, 23687, 22887, 19749, 19290, 3082, 32615, 17408, 4105, 17082, 11955, 30567, 17787, 28884, 5015, 4404, 14635, +16186, 27882, 26519, 16848, 18938, 600, 20717, 1447, 5308, 12633, 9379, 22004, 7343, 4883, 4167, 31031, 27770, 23916, 17553, 30852, 23764, 2194, 2189, 8078, 14149, 32756, 25865, 10265, 5003, 30269, 24901, 21189, 25384, 18652, 5270, 11554, 19252, 25987, 13001, 24560, 5852, 22381, 13796, 13196, 27264, 17963, 11459, 22266, 9112, 29012, 20350, 108, 31206, 22539, 8186, 12588, 22527, 1283, 22853, 27531, 31552, 14986, 15952, 24168, +870, 21222, 2954, 20122, 14441, 15956, 11914, 20294, 5569, 25711, 722, 65, 10906, 12181, 22331, 20018, 8425, 9913, 20126, 6864, 32452, 28312, 19452, 22211, 29595, 9537, 16974, 28380, 24524, 159, 19780, 25394, 21381, 22735, 12749, 3055, 5923, 24663, 23349, 11492, 17606, 24071, 11557, 28513, 3484, 1120, 15763, 11909, 11033, 3122, 18773, 10717, 31434, 5457, 160, 28262, 14995, 17135, 23874, 6751, 17294, 10886, 32145, 5907, +853, 12126, 8962, 6776, 4022, 32311, 18268, 21628, 23614, 29825, 17373, 27098, 30945, 369, 6240, 9210, 3491, 25013, 19927, 2157, 30471, 20088, 30419, 12698, 4455, 21525, 19449, 21749, 32412, 18826, 27656, 497, 30953, 3851, 7274, 2207, 3394, 25542, 23835, 27009, 22600, 8441, 21339, 20777, 8810, 27579, 29988, 12301, 19825, 17147, 14458, 17528, 4467, 12110, 30226, 8922, 867, 16907, 30671, 511, 2965, 25560, 1009, 1150, +29411, 8283, 3357, 37, 1057, 27193, 27046, 23657, 2866, 15618, 11667, 11676, 10429, 8887, 23977, 30254, 26034, 5667, 15014, 30502, 17777, 12472, 6656, 18645, 29379, 4560, 19156, 32345, 30120, 20165, 727, 26763, 28448, 4085, 26800, 29506, 31278, 21079, 20395, 1376, 3929, 32062, 13052, 14358, 8181, 4261, 11845, 1448, 9928, 26859, 31950, 27706, 6564, 5838, 13583, 3175, 10398, 32739, 2752, 7750, 20137, 3480, 1745, 15817, +7565, 28546, 12555, 6075, 16857, 183, 7451, 20786, 32245, 20503, 2376, 7659, 24764, 14221, 9107, 1924, 8313, 8289, 29630, 14877, 14127, 10445, 18052, 24526, 10417, 20805, 32276, 30554, 24285, 1254, 13603, 31850, 29800, 26159, 5157, 13889, 26342, 12608, 1907, 25819, 343, 4283, 710, 25107, 18505, 9817, 27031, 26818, 18106, 23894, 8927, 32234, 1571, 26979, 23992, 11988, 15016, 23500, 9774, 6533, 24754, 23378, 5615, 21786, +16769, 10772, 2907, 10343, 23380, 4814, 3394, 23723, 9098, 4105, 16062, 27603, 13922, 10326, 21653, 32029, 1452, 30580, 31495, 3023, 24791, 22719, 15012, 7040, 13451, 24786, 13573, 5438, 15396, 19189, 27224, 32165, 29961, 30132, 9740, 20574, 2178, 13135, 11529, 11276, 17240, 27592, 6111, 31162, 5150, 27764, 30423, 6602, 25576, 29150, 9625, 17600, 19101, 24637, 24640, 32553, 16656, 5445, 5223, 32052, 24634, 32447, 31450, 21828, +29811, 8422, 9634, 31990, 21557, 21163, 10498, 6029, 15987, 16610, 4424, 21137, 11606, 2079, 27739, 4415, 31230, 4597, 22015, 17563, 29234, 13887, 17348, 13122, 19332, 22571, 12407, 11199, 22251, 11089, 259, 19294, 19511, 9893, 18516, 8301, 31056, 29015, 14330, 14276, 12857, 18754, 2645, 24463, 20834, 30385, 28878, 19296, 2214, 18125, 4091, 31448, 32012, 21440, 11803, 18577, 11243, 24210, 29776, 726, 2531, 30035, 20021, 22042, +7160, 5769, 30343, 5448, 2016, 11906, 19724, 14873, 30660, 22370, 6569, 18726, 19987, 2679, 5254, 22201, 20805, 9346, 20881, 20049, 30786, 32684, 5858, 9261, 24126, 2866, 9988, 26657, 133, 30009, 15932, 7293, 3010, 13507, 12742, 5027, 25413, 32466, 19900, 23306, 22068, 26469, 9264, 9287, 29149, 14519, 31488, 17186, 23865, 19602, 4467, 21883, 19518, 10326, 31144, 10877, 13192, 8364, 4766, 13326, 5605, 20698, 20619, 8616, +1438, 593, 13643, 26851, 292, 775, 17389, 22360, 27245, 26654, 31648, 23626, 8405, 30368, 8044, 32270, 17202, 12511, 21385, 3953, 22837, 19761, 14830, 3262, 28126, 19596, 16588, 963, 7527, 4439, 9579, 8965, 5033, 23222, 3048, 5325, 23998, 20438, 27685, 18475, 14324, 26565, 9333, 22729, 24166, 17377, 22231, 8600, 29888, 10848, 12553, 19958, 30609, 27383, 23220, 25967, 14212, 7040, 26931, 21739, 11479, 3742, 30704, 16512, +26965, 984, 21837, 18195, 21422, 16755, 3902, 2978, 10552, 13235, 25707, 1950, 30612, 15170, 10551, 27732, 26018, 23104, 14922, 23860, 17720, 5374, 17059, 31932, 12414, 11222, 20903, 23894, 14965, 18839, 7638, 9162, 19823, 29476, 27357, 8478, 13463, 31259, 11456, 24015, 11726, 4396, 25966, 9570, 19566, 3749, 4534, 12817, 26853, 19457, 3909, 11805, 24831, 20968, 10969, 4478, 32191, 31872, 28372, 14388, 17943, 3242, 23550, 4999, +32718, 18139, 13477, 13413, 16630, 24933, 4661, 28356, 29329, 30627, 5158, 16128, 1608, 9692, 28945, 28461, 29149, 86, 7499, 21213, 21054, 18468, 25691, 20477, 17573, 21295, 2097, 2748, 24537, 25647, 7747, 24488, 11018, 21224, 5133, 27648, 13390, 9794, 23236, 9951, 7653, 28394, 26079, 9261, 5319, 22256, 4955, 1700, 22342, 12454, 22913, 10629, 30922, 15836, 31106, 15727, 4363, 436, 18476, 28901, 26083, 26223, 20621, 4334, +14680, 25754, 31982, 28070, 2781, 22451, 5253, 10434, 18077, 31333, 19696, 23396, 20821, 24651, 25097, 10396, 4337, 15242, 21025, 2491, 31079, 19363, 18219, 2674, 19799, 3927, 31575, 13115, 30150, 19428, 17449, 12062, 12415, 16663, 7364, 15196, 6346, 12618, 25630, 24424, 11183, 12558, 15052, 32004, 4441, 7381, 9632, 8778, 22624, 30657, 11270, 20935, 17253, 29489, 23609, 4284, 648, 22417, 17399, 30798, 9077, 2080, 10093, 21492, +18744, 17457, 3920, 25090, 30075, 29551, 16746, 8490, 9341, 31799, 7727, 13783, 6412, 17359, 22561, 29036, 15249, 1063, 17203, 32502, 30552, 8045, 4018, 31200, 30462, 21418, 29231, 6771, 23498, 6556, 28264, 9474, 24013, 32184, 1797, 21321, 28967, 18543, 29811, 5541, 17574, 4770, 19324, 23987, 22130, 9117, 20255, 4611, 10181, 4691, 4345, 7965, 12736, 8363, 6398, 10430, 29781, 2861, 17201, 20512, 9417, 12697, 29986, 662, +12114, 31783, 21983, 8313, 17559, 19027, 13854, 2365, 23797, 410, 26352, 13159, 9528, 13840, 17770, 19709, 18531, 22115, 27674, 31267, 30479, 1304, 8929, 27492, 4165, 26130, 15236, 13582, 6060, 12455, 14245, 18174, 11470, 3460, 26487, 29029, 22487, 7574, 31395, 13517, 7984, 24979, 26676, 17512, 6051, 11679, 4453, 24582, 1026, 32128, 23081, 31505, 664, 32010, 26230, 4830, 25373, 8698, 18412, 31433, 21153, 32657, 16839, 32624, +3350, 10558, 28885, 25837, 18132, 27512, 6586, 26117, 19724, 495, 10861, 25775, 12174, 15315, 17590, 13200, 14675, 7903, 11938, 15339, 7146, 5400, 20169, 32519, 14098, 5814, 31184, 2484, 5703, 15255, 2340, 9053, 25813, 31225, 2123, 11178, 25970, 8709, 4527, 12926, 9204, 15388, 5933, 21378, 30703, 23523, 1811, 12610, 31427, 13749, 27950, 5805, 19149, 15351, 5556, 479, 21165, 3972, 2963, 26869, 19227, 5303, 3154, 12272, +3761, 5277, 23450, 29731, 13987, 27977, 9889, 23191, 10598, 15822, 11802, 8533, 6578, 13613, 21144, 5237, 27362, 16326, 11042, 13743, 31677, 16598, 14222, 20075, 20570, 17186, 14176, 7029, 22489, 17330, 19301, 26250, 22608, 9984, 23213, 3827, 5193, 334, 27018, 15791, 16157, 6052, 24325, 22735, 19665, 12701, 27972, 14259, 29027, 6246, 28002, 27936, 22844, 9457, 15243, 10646, 26643, 29419, 17675, 16364, 13982, 4208, 9847, 3822, +14192, 292, 7649, 19386, 627, 1899, 2409, 16784, 7952, 26734, 6751, 27617, 6667, 1955, 9109, 2926, 8201, 4343, 30863, 31045, 13800, 13338, 8923, 7675, 9990, 26598, 24040, 23972, 30806, 1119, 27794, 12231, 1411, 2675, 31617, 2038, 4574, 1258, 18822, 12526, 27993, 25573, 7376, 1892, 27528, 16485, 4819, 2961, 20828, 2914, 1238, 1861, 16252, 10161, 9536, 26242, 3991, 808, 17446, 2030, 1927, 12472, 14261, 3339, +15147, 13110, 5377, 19722, 14368, 24200, 32248, 9593, 17005, 6856, 11486, 11766, 23341, 16305, 14727, 11402, 19219, 15966, 13263, 2703, 26127, 22799, 28946, 30119, 23608, 13624, 32149, 25535, 26097, 13642, 28874, 8476, 26752, 1484, 28198, 8352, 25684, 27679, 17946, 9921, 1767, 29432, 21687, 25109, 12969, 3647, 3743, 32188, 19613, 17006, 2123, 12972, 7037, 31069, 10323, 30645, 11926, 9704, 23413, 5255, 23346, 19519, 13731, 17330, +21003, 9162, 25683, 13919, 4073, 10861, 23841, 5840, 7525, 12760, 30949, 20494, 16407, 1924, 19914, 3252, 18930, 22037, 16225, 25968, 20339, 26548, 23845, 32265, 3485, 14490, 4752, 26831, 1242, 18483, 11394, 22245, 27645, 4309, 3397, 31718, 15170, 27238, 4791, 22695, 7230, 2972, 10421, 23638, 4897, 30335, 26890, 23827, 19604, 10347, 17027, 7175, 4128, 8105, 6672, 7613, 22595, 11424, 1676, 23837, 29908, 13070, 13315, 24785, +17379, 16712, 23736, 32549, 11182, 28527, 22476, 18412, 31499, 129, 9282, 3628, 30464, 3405, 27456, 17301, 13752, 11715, 24476, 17880, 19820, 31149, 25493, 9648, 9805, 27170, 717, 6945, 7472, 14032, 31731, 24852, 30744, 22699, 24633, 9158, 18458, 14342, 27571, 17189, 14471, 4085, 20818, 12168, 7490, 15506, 29469, 21243, 27221, 21177, 6355, 14274, 19558, 31849, 23922, 29364, 26251, 24639, 3541, 955, 5904, 2504, 25807, 3880, +25203, 17673, 13039, 10893, 32015, 7842, 28083, 13718, 11927, 16133, 25886, 19418, 31639, 22587, 7893, 26092, 10997, 14248, 7598, 30555, 13329, 31520, 27151, 6812, 23392, 30693, 7768, 29296, 429, 807, 408, 25633, 18480, 13447, 3758, 17727, 21289, 31841, 31446, 449, 15206, 24564, 19867, 14077, 14384, 27760, 7402, 25381, 9240, 15000, 23168, 22570, 13753, 17552, 29382, 4377, 15477, 4382, 905, 15906, 5190, 1313, 8771, 23670, +14761, 12530, 8630, 3282, 11603, 7308, 3731, 26810, 31872, 23598, 8119, 13488, 18590, 15521, 6101, 27831, 30522, 29270, 17633, 11507, 14054, 14247, 15884, 29531, 18630, 16789, 12669, 23820, 18102, 21441, 14722, 95, 1203, 23352, 3378, 12806, 30660, 7109, 6848, 29765, 30708, 14968, 10485, 16530, 30489, 16587, 11593, 28243, 13089, 29226, 6982, 27143, 10706, 22866, 23906, 29336, 6887, 3807, 20388, 24990, 25248, 2342, 25085, 26451, +25695, 28463, 6490, 23587, 2805, 13338, 20584, 745, 28306, 31070, 17275, 26028, 14889, 28869, 21503, 27978, 25327, 28486, 22353, 3265, 18584, 13491, 32601, 25472, 17298, 20221, 17694, 9779, 22564, 10011, 3462, 15491, 5707, 9952, 6310, 8512, 23291, 26895, 9257, 18829, 25197, 26532, 12089, 7318, 22633, 825, 2528, 15193, 29311, 24881, 18458, 15127, 5604, 18292, 7831, 22902, 5745, 25525, 32681, 28309, 2769, 3376, 11032, 8476, +13328, 17343, 16988, 3851, 11470, 26245, 22681, 3899, 20009, 2002, 11217, 9875, 2827, 13745, 25068, 32138, 5858, 10758, 14498, 11462, 29050, 22329, 1596, 2028, 15087, 1510, 30337, 17856, 4886, 8602, 26332, 18214, 25945, 10552, 22066, 4647, 4029, 11979, 8546, 24038, 13981, 19763, 1145, 16809, 740, 26213, 16179, 6598, 4204, 30677, 18060, 486, 20239, 19656, 2514, 2558, 21166, 84, 20414, 26052, 8686, 13978, 11499, 1863, +24530, 797, 6510, 28559, 12776, 15056, 19829, 26757, 2051, 20975, 10798, 2791, 14420, 26978, 9389, 18624, 24887, 27449, 19111, 12358, 14337, 21625, 14916, 2736, 21709, 2562, 28788, 30395, 16540, 7519, 32258, 8302, 8316, 6000, 4093, 21092, 21056, 23923, 15082, 23107, 12130, 25880, 25898, 26550, 20090, 2519, 12407, 12210, 29968, 31518, 24568, 11538, 20375, 6717, 14274, 9317, 9279, 10294, 6944, 25820, 17814, 6435, 1354, 26130, +12435, 5448, 14455, 724, 29371, 29537, 23831, 8733, 22649, 16962, 2515, 9972, 19481, 14922, 22182, 16682, 13672, 13982, 28220, 1280, 20699, 9726, 10597, 29979, 20020, 17541, 23031, 5066, 23976, 24385, 31197, 3644, 29833, 12884, 4368, 26436, 9653, 28199, 2401, 32302, 12393, 4917, 9506, 31875, 19839, 31688, 15789, 744, 12903, 11241, 2024, 834, 20967, 12621, 30813, 8219, 30162, 21076, 13286, 21371, 12694, 11715, 25015, 9759, +24599, 29383, 3428, 1484, 24814, 5829, 1018, 4440, 10746, 10525, 3547, 30586, 9445, 19336, 31330, 22348, 30577, 586, 23183, 18776, 13207, 21228, 26995, 10601, 9537, 7513, 31972, 22231, 19228, 24219, 31990, 11059, 20834, 2650, 12543, 12881, 8480, 13562, 17321, 19226, 24087, 20868, 17044, 764, 7436, 15606, 23113, 5245, 16192, 13528, 24021, 29399, 1988, 18248, 7233, 11525, 25762, 6437, 988, 12222, 30657, 211, 23282, 18723, +2861, 3057, 31604, 11341, 16619, 16157, 30568, 7938, 4257, 14844, 8703, 11693, 30451, 31816, 16938, 13875, 12576, 8191, 10507, 14564, 26440, 17740, 26090, 19434, 24177, 27078, 31656, 22066, 27289, 22170, 8022, 30151, 25228, 6858, 8724, 9079, 23016, 6524, 17018, 27273, 21369, 25721, 6199, 19052, 24769, 23137, 159, 4577, 31329, 10666, 19141, 25001, 28406, 12463, 11667, 19816, 6774, 10555, 9114, 1295, 32726, 17136, 31446, 25186, +23995, 7403, 1497, 14243, 13927, 18515, 8748, 2528, 11468, 14947, 21580, 3469, 5317, 21740, 8046, 3878, 32406, 27188, 28879, 28045, 6883, 7778, 15093, 13657, 18333, 24207, 14953, 18291, 8576, 13631, 10709, 32571, 21034, 12207, 14046, 2194, 30722, 22794, 4722, 9423, 4974, 26303, 12892, 10291, 15275, 20939, 14169, 14913, 15359, 10280, 10190, 22242, 18058, 25283, 3132, 3623, 16723, 18085, 21915, 25299, 31716, 32624, 25102, 19983, +12063, 6380, 22177, 10018, 29174, 26899, 19441, 1380, 20434, 32333, 11671, 2941, 20504, 25840, 17855, 3095, 3352, 28045, 25338, 21410, 20561, 28470, 25034, 4516, 13787, 14181, 29815, 12735, 14037, 22149, 32718, 26101, 28529, 22127, 3351, 24935, 16259, 22792, 26316, 3925, 22357, 5219, 6867, 10094, 31060, 24722, 13189, 1644, 19999, 5759, 23055, 7792, 1461, 15321, 12308, 15248, 29502, 9355, 27984, 10771, 31504, 27934, 4104, 27265, +17294, 7455, 19433, 785, 30247, 12981, 4710, 19837, 18200, 11577, 29931, 16492, 3531, 10352, 18137, 23531, 16112, 8424, 31323, 17573, 23745, 10864, 54, 20479, 20219, 28038, 31250, 18956, 23204, 2587, 13453, 7730, 10042, 118, 8515, 7522, 13099, 13226, 27359, 31300, 24803, 24522, 15024, 28335, 2106, 393, 19098, 18218, 8817, 17653, 3024, 32562, 28517, 3078, 20273, 15969, 31116, 18756, 2157, 21552, 21343, 15610, 29283, 31385, +15729, 5030, 6139, 28828, 18256, 730, 27360, 10292, 25252, 9617, 5859, 27359, 10010, 24957, 12809, 18828, 9842, 15833, 18622, 5592, 18911, 6128, 21561, 17259, 24884, 23718, 6044, 13459, 6560, 2559, 12076, 22289, 7589, 18216, 18350, 25846, 18946, 12942, 3370, 11431, 22559, 9229, 6022, 32570, 1418, 18831, 18630, 11260, 1897, 4484, 16852, 20808, 10612, 5645, 5300, 2728, 29363, 11344, 16187, 3156, 13903, 28264, 25445, 21492, +13712, 11027, 14570, 32658, 23970, 17940, 11321, 13761, 27169, 17343, 13563, 28587, 3407, 32193, 7080, 5304, 3910, 23932, 26112, 14522, 29578, 31412, 17251, 26173, 9988, 670, 29329, 23891, 28934, 22007, 12616, 9878, 266, 27186, 9769, 24236, 12359, 21090, 5230, 6760, 5666, 18793, 2580, 9073, 18219, 9660, 14377, 22129, 824, 7721, 3883, 30402, 6366, 21134, 23808, 16354, 21805, 20369, 7478, 17971, 9608, 20094, 27850, 9875, +14512, 4851, 1343, 26871, 25941, 6573, 864, 31607, 25367, 3444, 7912, 10818, 13104, 22289, 179, 13928, 30011, 4062, 11563, 3609, 25197, 2603, 19963, 14234, 22972, 27441, 32205, 32581, 14767, 27287, 9688, 29280, 32138, 11031, 23383, 25312, 17605, 24247, 24151, 10204, 27691, 32064, 21022, 8027, 21585, 21201, 21956, 18828, 25263, 751, 22437, 17692, 3354, 9633, 31926, 26326, 4306, 31364, 26139, 19074, 25883, 3059, 15586, 25254, +14091, 6201, 17798, 31696, 30449, 9181, 9132, 25372, 8477, 30154, 632, 30063, 18587, 22588, 16123, 11082, 23339, 5793, 28775, 26693, 15426, 27933, 20251, 19732, 26529, 13623, 6038, 19645, 16682, 21624, 12131, 30773, 27826, 29929, 29701, 25507, 6342, 6065, 18111, 14820, 3451, 18743, 12115, 22038, 8563, 28238, 353, 31902, 1263, 29128, 25827, 16689, 24293, 13311, 3654, 18055, 26934, 9692, 4932, 10848, 31317, 17063, 8854, 26375, +14224, 5787, 19114, 20566, 11853, 4457, 2618, 15304, 23201, 14733, 4575, 31764, 10204, 4928, 30899, 11467, 1288, 23958, 28157, 25581, 4501, 31811, 10868, 31435, 8735, 15800, 9516, 7284, 95, 18370, 891, 14319, 24157, 20005, 2118, 3242, 24463, 4736, 18547, 14896, 19470, 23122, 13892, 29674, 28050, 12023, 8373, 29338, 3214, 3762, 22151, 7715, 2805, 252, 6383, 11541, 16052, 15899, 18825, 16148, 1501, 19717, 30467, 25658, +6954, 32585, 28901, 31417, 4554, 14680, 13545, 24024, 5034, 27438, 20930, 316, 6693, 29303, 29654, 9907, 298, 19037, 17623, 3103, 19289, 24006, 14644, 2574, 7137, 702, 18722, 8638, 20419, 16421, 1528, 27373, 16239, 30429, 26023, 20793, 12341, 6800, 12049, 17375, 1470, 211, 17691, 8164, 29514, 14577, 18071, 29812, 847, 2926, 148, 20136, 26932, 14792, 22710, 1301, 15494, 8664, 9939, 3145, 25086, 11468, 30519, 8557, +9129, 23774, 29350, 21471, 30574, 8631, 6078, 32045, 8842, 23770, 7441, 5588, 5579, 25512, 2633, 6426, 28439, 2781, 26563, 22603, 17573, 16505, 23905, 300, 25170, 1076, 3445, 17488, 12544, 1196, 26045, 21674, 24970, 22627, 10377, 22777, 31258, 16455, 22054, 7332, 7457, 29495, 12920, 13037, 22239, 15553, 19463, 17910, 18334, 13258, 7746, 3140, 29764, 31651, 3440, 22166, 32727, 6885, 6886, 12504, 8082, 163, 1410, 284, +22790, 11787, 23061, 21280, 28242, 12347, 28612, 2932, 9074, 8764, 15969, 31314, 24318, 2664, 16456, 9884, 15923, 24202, 13024, 12919, 23085, 16464, 2317, 23045, 23350, 9203, 2781, 31432, 9366, 4191, 31716, 32156, 15978, 22010, 20668, 11452, 1589, 16512, 14384, 10664, 25276, 30353, 9210, 16826, 250, 25666, 26711, 16173, 17101, 6967, 29092, 7418, 23432, 31409, 30463, 14014, 7844, 476, 12678, 17210, 4667, 11626, 16598, 20645, +868, 4498, 32098, 2458, 21010, 13714, 13122, 13518, 11300, 22332, 30345, 11550, 15230, 24288, 27723, 32331, 31255, 24047, 6982, 21919, 22688, 4677, 3165, 30532, 5154, 15843, 14974, 9821, 27470, 31572, 30467, 28338, 3302, 29797, 30796, 24312, 10743, 11150, 5062, 22043, 714, 2639, 825, 15945, 26927, 28548, 15508, 25415, 19827, 22490, 14566, 9747, 27168, 17732, 7511, 32322, 807, 22485, 9375, 28277, 21289, 7074, 23848, 24591, +4103, 21876, 16135, 14847, 259, 21198, 4122, 973, 23837, 4948, 16918, 17997, 728, 32427, 10644, 20556, 22149, 25210, 30303, 16549, 10174, 5047, 16103, 10982, 27532, 25479, 6491, 16054, 32553, 30339, 7877, 3889, 19448, 24013, 18736, 19707, 12443, 22858, 20680, 3512, 27806, 4831, 21509, 28535, 4490, 32153, 16323, 26639, 24596, 13858, 10421, 2002, 18905, 26524, 12984, 13670, 19235, 19476, 29724, 19021, 17047, 4833, 22910, 3727, +28846, 8878, 23434, 8521, 31736, 11347, 12034, 26775, 16178, 775, 22542, 20668, 161, 6097, 14539, 24757, 19955, 24960, 26759, 6093, 18717, 6976, 19763, 5184, 26452, 16719, 24205, 10731, 21552, 14347, 14459, 17631, 23225, 5125, 26152, 22194, 16472, 5418, 16201, 32650, 6194, 5975, 20550, 6355, 12072, 2322, 31112, 32027, 27282, 25103, 5352, 13231, 32079, 25115, 18416, 25763, 9066, 9853, 3727, 30619, 24201, 18186, 15482, 14658, +23311, 8866, 4084, 7016, 14285, 20285, 6898, 20479, 26260, 27449, 26834, 5564, 29771, 25178, 4824, 24285, 17513, 10176, 4749, 16825, 2524, 23165, 9820, 11590, 250, 13547, 9441, 24451, 31733, 24923, 6342, 22277, 1022, 10426, 29293, 15307, 30712, 3423, 3018, 24204, 30872, 29852, 29769, 27875, 22262, 1825, 19393, 7007, 12001, 24142, 23832, 14525, 14539, 885, 26116, 14789, 14432, 2789, 6473, 13398, 27713, 12815, 2907, 28735, +23241, 32200, 11274, 21185, 2855, 14292, 12622, 960, 11376, 9623, 28835, 870, 11448, 15460, 7877, 23449, 6834, 31710, 5207, 21373, 32595, 31323, 3395, 14259, 1344, 9868, 27657, 29057, 22683, 30564, 25024, 13156, 29996, 3530, 1574, 84, 17822, 14196, 1044, 29198, 23819, 29879, 30068, 2499, 12572, 5178, 25948, 19406, 4120, 31155, 8012, 3947, 29710, 11407, 18206, 31055, 21275, 13096, 27344, 11190, 10892, 19601, 24346, 8121, +23131, 25920, 8205, 8186, 7348, 9249, 4616, 31167, 6360, 1917, 898, 18932, 7095, 26847, 5571, 11215, 25234, 13583, 15162, 22177, 24990, 600, 20464, 13497, 13696, 15040, 24687, 24589, 1873, 16265, 32710, 25005, 9418, 8147, 423, 16766, 17396, 5039, 15166, 23756, 6956, 16064, 9921, 14051, 10143, 15492, 25266, 2610, 29075, 7660, 24787, 21297, 8261, 12483, 2026, 21957, 27523, 26713, 13778, 29397, 10210, 13720, 21634, 19628, +21867, 22057, 3627, 6495, 27096, 18793, 30252, 1285, 2089, 7405, 15336, 12233, 22897, 7835, 14843, 19204, 15495, 6862, 7733, 23756, 19345, 9759, 12946, 14100, 3704, 26724, 10729, 13914, 7677, 32363, 775, 29544, 21652, 4402, 3272, 15981, 23195, 756, 17266, 25284, 8161, 32602, 4749, 31058, 7669, 19592, 17494, 23165, 26454, 25227, 14153, 13031, 2218, 27099, 27132, 5922, 21056, 5093, 19836, 28733, 4689, 20611, 25509, 26341, +25013, 28781, 9554, 15440, 29537, 26820, 7957, 4930, 26655, 12706, 3220, 1556, 32299, 20714, 24721, 25985, 13173, 6107, 6249, 15391, 438, 613, 21313, 21494, 5706, 8382, 17459, 10395, 28993, 10201, 3969, 21239, 6214, 13523, 3911, 2984, 7576, 11868, 7914, 1463, 24575, 11135, 3019, 24106, 31849, 27741, 17323, 12255, 1080, 23572, 27646, 1518, 24185, 16192, 23013, 29892, 24574, 7704, 7519, 20799, 17905, 11488, 9270, 24120, +25012, 13182, 27104, 32588, 25050, 2250, 1283, 16857, 13385, 4302, 8195, 12467, 32043, 25519, 24722, 355, 16323, 19600, 1874, 7741, 3024, 24887, 4865, 27598, 32591, 12384, 15630, 17729, 23873, 24900, 9081, 16117, 5314, 3417, 15937, 30365, 5667, 17220, 14454, 19053, 21522, 22650, 31520, 20798, 15401, 23474, 21153, 31724, 10306, 23027, 6697, 13331, 15146, 11562, 8161, 14970, 23947, 23791, 32699, 15052, 15924, 9012, 31169, 21238, +12429, 14338, 18835, 18096, 31558, 522, 4381, 20312, 23172, 3133, 8342, 5805, 26607, 29496, 4761, 4146, 19755, 11459, 17477, 2134, 23021, 25638, 17104, 14200, 16662, 17035, 29252, 32586, 26047, 27653, 21056, 5708, 9223, 7124, 23804, 8013, 7646, 28186, 28326, 30818, 31319, 3900, 3855, 25159, 628, 8616, 29305, 20384, 20075, 14014, 22518, 10329, 6884, 6854, 24529, 23546, 23889, 21014, 23364, 17168, 15899, 11653, 22876, 25123, +18777, 13912, 368, 26423, 9330, 28694, 24473, 7882, 32595, 28328, 273, 455, 4176, 29578, 20839, 24252, 10824, 10589, 1813, 17708, 17443, 26342, 8487, 8564, 14588, 31851, 25732, 30488, 10736, 15840, 22843, 29513, 29753, 23211, 23168, 6315, 19138, 14873, 14197, 18965, 10433, 14470, 19420, 14610, 11280, 7492, 6094, 22104, 18081, 7907, 7045, 2757, 1481, 15532, 11321, 16070, 14615, 4286, 13790, 25352, 20126, 3865, 22097, 17111, +27076, 12498, 23427, 13446, 27371, 4856, 32411, 5037, 19327, 19064, 19647, 30607, 26556, 25741, 19944, 11869, 880, 26989, 14626, 2361, 9753, 25948, 18431, 24368, 30234, 32221, 16952, 17592, 3318, 6282, 1936, 30395, 18780, 25363, 11073, 13383, 30219, 10717, 18420, 16778, 29781, 5299, 14618, 23569, 31040, 1794, 2670, 31920, 28783, 17297, 1514, 5768, 10477, 19945, 30136, 7943, 19399, 14321, 25535, 22717, 20603, 27471, 20344, 6615, +20066, 31418, 19998, 17518, 9367, 5651, 1528, 6380, 10950, 16146, 29949, 9223, 17940, 32619, 8375, 13955, 17148, 9889, 19723, 27625, 29835, 17092, 2800, 16466, 31413, 28336, 6415, 19248, 23039, 26760, 25863, 10338, 25410, 13093, 27856, 2009, 18744, 29384, 8389, 29695, 12763, 5570, 6150, 30703, 5421, 14525, 11891, 22570, 24415, 31614, 17427, 21482, 15938, 20228, 5180, 14583, 15796, 11595, 1063, 6067, 5587, 26926, 16405, 30997, +7252, 11493, 238, 25996, 8110, 8627, 22923, 20873, 14197, 29073, 18808, 19619, 10831, 30699, 9421, 2478, 29546, 26848, 23960, 12716, 14308, 29140, 27300, 30104, 7967, 28363, 3404, 13555, 22522, 19809, 11784, 29774, 31303, 12023, 23002, 6645, 20650, 13158, 27518, 2080, 9463, 13558, 21699, 20294, 11490, 31120, 22772, 8268, 25200, 13964, 20984, 6741, 10336, 15516, 4077, 18304, 11112, 7481, 31859, 866, 27291, 10875, 30640, 25826, +22898, 20874, 32471, 10781, 1264, 27221, 12861, 10728, 8011, 1792, 31022, 19501, 144, 21027, 27769, 25344, 2223, 15986, 32085, 12560, 31502, 3395, 30864, 9846, 10876, 29955, 10712, 5399, 8062, 8584, 31225, 30961, 29459, 30928, 8974, 30723, 25381, 21835, 8683, 625, 23627, 6938, 20126, 23771, 27965, 15128, 16347, 30188, 31114, 15665, 9980, 29848, 19060, 8076, 6927, 29936, 5263, 17639, 2568, 13326, 26224, 1025, 11519, 22915, +31954, 20493, 20870, 24567, 9560, 29554, 25192, 419, 3724, 12551, 24190, 31689, 27679, 7769, 29109, 26025, 23434, 6322, 23105, 9726, 14398, 30032, 6895, 19662, 14904, 9463, 220, 8360, 10488, 11739, 31275, 9674, 32232, 19377, 1474, 9024, 16163, 26666, 9443, 19887, 6449, 865, 18808, 1360, 8634, 15150, 27385, 32069, 21472, 17723, 9027, 3102, 14987, 15922, 22764, 29891, 25385, 22984, 5483, 3106, 1955, 3990, 12780, 1419, +23368, 14254, 10443, 6763, 8153, 19886, 26651, 14602, 20751, 12691, 15963, 29386, 27841, 10580, 28687, 16545, 28303, 4946, 19648, 10523, 20869, 9644, 7646, 13486, 32629, 13130, 16592, 1816, 17120, 29373, 3236, 7720, 10859, 13679, 14484, 19012, 798, 8367, 847, 21549, 21058, 16810, 18167, 16132, 27390, 14086, 32677, 22926, 19033, 19557, 681, 7134, 29202, 8327, 20620, 29063, 21457, 4445, 30879, 5810, 1050, 1347, 13530, 11909, +15027, 28014, 30922, 15825, 3613, 31769, 4606, 24672, 15811, 22774, 8036, 10433, 4092, 7945, 591, 23125, 27503, 1272, 30259, 23937, 9600, 18112, 20232, 31057, 22557, 18343, 4099, 23607, 19691, 17630, 2748, 1950, 12876, 902, 17775, 16490, 32671, 22381, 8394, 15714, 12387, 16430, 26148, 16480, 24375, 26739, 6837, 19110, 28012, 4329, 10279, 4844, 22441, 30511, 3133, 12230, 16087, 7233, 3069, 3010, 24863, 5817, 4960, 4971, +6720, 22735, 21461, 6623, 12348, 29855, 22338, 24736, 13517, 15718, 8448, 5125, 9689, 15285, 24235, 4933, 19614, 1747, 9777, 9287, 32258, 12911, 21517, 15577, 20144, 24586, 18587, 12239, 30404, 23547, 17210, 4356, 13514, 5904, 10979, 25863, 2991, 549, 17831, 16509, 16267, 26279, 21634, 25957, 8796, 13101, 30890, 28411, 14848, 7900, 4930, 14339, 20811, 26448, 29916, 8187, 18266, 15736, 20426, 15902, 6515, 4868, 20258, 20030, +10772, 31238, 13125, 13764, 31787, 30956, 30273, 15287, 24467, 19139, 8476, 495, 32240, 6598, 28906, 14321, 14498, 1069, 28660, 2541, 27517, 25808, 10728, 13015, 8776, 31154, 28918, 15292, 3255, 16408, 2554, 14027, 14878, 15679, 27791, 13898, 13867, 25296, 29185, 5566, 11667, 4893, 6061, 11140, 11491, 2200, 25461, 25990, 3269, 21353, 28531, 30786, 14393, 6492, 11033, 23170, 4878, 7183, 5694, 8133, 23592, 8248, 22161, 5702, +23927, 17184, 19600, 5026, 9713, 16017, 10592, 21380, 20910, 16653, 32520, 32402, 18853, 25213, 25624, 22122, 13798, 21387, 20140, 28192, 27879, 31174, 18594, 32758, 5589, 24288, 8123, 29181, 32536, 30284, 2116, 23695, 14701, 21716, 28721, 24414, 4966, 6545, 13026, 25876, 23198, 12779, 25510, 9284, 5224, 18366, 31406, 19023, 6986, 18779, 14447, 2097, 17185, 273, 2087, 22774, 24561, 10211, 19188, 24329, 7727, 21304, 15256, 22428, +10252, 11209, 14074, 15218, 17754, 27101, 8327, 8184, 7112, 1069, 17468, 12336, 19436, 16107, 31359, 26422, 2118, 13038, 28519, 19303, 13311, 30607, 9309, 5104, 8050, 28497, 29433, 15777, 17033, 11921, 5438, 27286, 23130, 19512, 9736, 8116, 13845, 18063, 16301, 20957, 19133, 1001, 526, 5801, 17108, 31885, 32223, 19226, 12156, 27974, 5761, 25467, 25813, 15071, 30572, 1095, 10800, 27237, 16873, 27834, 6391, 22311, 22352, 29521, +9055, 32088, 4870, 22901, 17384, 21171, 11090, 3749, 22172, 11616, 9550, 6513, 10734, 9005, 25739, 22890, 4211, 31501, 15589, 30025, 13804, 13393, 31120, 24604, 7863, 15225, 19670, 14254, 4768, 9254, 11007, 13824, 8575, 15877, 3957, 25959, 4280, 15047, 29708, 26453, 26664, 6490, 198, 4630, 15495, 25937, 27520, 19706, 24670, 10341, 16963, 5706, 23735, 15316, 30311, 31598, 30541, 17213, 13084, 2542, 26468, 24091, 16366, 2275, +7201, 20323, 28234, 11481, 2602, 25174, 5166, 29266, 31664, 5364, 1128, 14391, 31302, 28648, 1329, 23204, 6222, 18293, 28911, 29957, 841, 26454, 28787, 31382, 10899, 9103, 1156, 4599, 426, 17522, 6874, 7627, 5077, 2340, 19109, 7680, 27514, 24275, 4178, 26410, 29640, 5307, 8033, 28174, 1187, 9363, 18610, 7409, 27656, 14753, 4598, 28497, 8439, 617, 27111, 19339, 9720, 28268, 23938, 10147, 13022, 30813, 17774, 18100, +385, 4115, 25780, 27900, 28391, 29958, 21542, 25263, 2497, 29576, 20669, 3685, 6171, 6511, 11094, 1059, 21265, 15693, 29556, 29704, 16310, 23899, 16275, 26031, 19399, 7446, 3410, 32422, 5491, 21184, 17754, 5876, 25300, 10766, 1008, 20923, 7956, 22551, 13418, 10454, 19359, 1319, 14139, 25530, 7830, 25233, 26589, 29095, 8158, 23377, 26032, 24469, 14508, 9539, 17732, 1140, 16985, 21142, 794, 22476, 9558, 18548, 28353, 2090, +29314, 29361, 23013, 4502, 19144, 3663, 14956, 5735, 4982, 29095, 31265, 12813, 21561, 25086, 9140, 29719, 15695, 2404, 21420, 30204, 11944, 6384, 31344, 28929, 27526, 32138, 18638, 4317, 17918, 14223, 6407, 14464, 10816, 29421, 18966, 29961, 316, 1155, 2928, 5299, 30250, 1426, 18112, 19043, 26512, 27252, 15995, 9440, 29657, 4647, 6876, 8833, 11032, 5452, 4994, 5790, 4822, 23632, 10107, 22740, 5087, 16515, 4436, 15904, +13168, 23402, 13097, 13484, 24557, 16025, 18783, 22040, 17451, 4127, 8315, 11196, 31380, 24310, 20636, 28269, 28958, 27512, 4334, 7222, 196, 9328, 13012, 5018, 193, 23120, 27758, 5280, 6867, 32194, 21184, 20035, 22828, 1513, 751, 14618, 17539, 19535, 3890, 2222, 23662, 12205, 13418, 22274, 3748, 1286, 17775, 32706, 28798, 22109, 7160, 28994, 31438, 20172, 1244, 31631, 10524, 29002, 4143, 17391, 28428, 25328, 4658, 18489, +26841, 5410, 339, 11612, 24945, 4229, 13835, 15839, 16434, 27253, 5346, 20182, 28540, 23121, 20120, 24570, 12463, 27280, 20797, 11133, 14685, 22041, 9996, 25209, 18276, 14139, 9833, 13936, 6699, 14491, 32425, 773, 19901, 32764, 12385, 12078, 4225, 26220, 27918, 20660, 20706, 496, 8074, 16478, 23617, 28195, 8280, 3312, 22707, 29077, 14445, 4624, 18351, 24441, 29834, 3859, 5813, 6899, 17795, 12512, 21390, 17453, 13285, 8524, +17449, 25671, 20602, 21675, 19123, 15752, 9567, 7061, 16248, 17641, 23539, 7098, 13068, 31820, 10410, 3008, 28129, 24856, 7632, 13712, 16529, 4698, 17571, 22342, 11597, 2599, 2087, 220, 20052, 15372, 8744, 4733, 8275, 29346, 26408, 27399, 12331, 3207, 1692, 28579, 20849, 25232, 2909, 1149, 24284, 13320, 4157, 19645, 5408, 11790, 590, 21937, 16488, 18161, 11512, 28086, 20760, 13599, 28306, 8044, 28971, 4282, 12778, 4479, +860, 6418, 31878, 13191, 9626, 802, 9003, 30475, 26034, 11912, 31624, 17550, 25232, 3014, 4428, 30640, 14804, 5018, 19810, 31292, 23179, 31322, 26610, 11172, 12153, 22148, 19216, 8356, 26430, 31994, 12835, 27291, 5645, 11945, 7714, 15271, 12748, 16717, 12978, 6014, 28630, 11834, 23565, 21094, 14848, 27993, 18967, 29652, 243, 6009, 28177, 23422, 4563, 22019, 1826, 16716, 11400, 21043, 25072, 5062, 20269, 5140, 32353, 25914, +17085, 7300, 8417, 29833, 24017, 21395, 3080, 19879, 462, 26645, 8206, 15310, 21870, 27173, 12195, 22113, 414, 7604, 12767, 4977, 29623, 14594, 21693, 8255, 2869, 13997, 13318, 23138, 19137, 12903, 16285, 3455, 20203, 24702, 520, 11453, 13330, 3600, 31332, 13792, 30245, 6770, 29102, 19347, 1175, 8529, 8692, 1589, 16133, 21460, 6566, 12989, 3286, 28259, 21244, 6155, 9489, 1794, 29293, 28626, 14698, 12810, 32081, 2133, +4745, 32602, 13586, 18075, 3434, 12151, 31867, 912, 18921, 28201, 20259, 20097, 3963, 28952, 21686, 20096, 17644, 28253, 317, 20930, 23744, 21562, 27085, 465, 23356, 23610, 29092, 5286, 3653, 28405, 7420, 8398, 28239, 21006, 26473, 31674, 389, 25572, 32586, 19311, 21005, 20077, 6640, 24968, 16261, 28326, 12297, 1137, 23811, 12614, 22067, 14788, 1408, 16384, 15253, 24765, 7227, 11577, 30051, 10880, 7215, 4703, 19278, 2686, +25710, 12983, 1592, 26099, 5787, 1410, 12642, 26792, 21488, 19282, 18993, 4981, 14841, 31290, 6119, 5884, 11136, 28186, 20672, 12545, 11803, 3158, 4542, 19030, 14735, 1825, 29910, 21950, 6529, 16420, 24637, 32239, 29403, 26229, 25570, 2422, 27640, 5445, 29214, 16360, 24727, 15439, 21341, 6800, 13961, 27460, 12685, 25098, 22879, 589, 4875, 1914, 3747, 9417, 20944, 18483, 11242, 18086, 7665, 17771, 1738, 32302, 17242, 31141, +25764, 10045, 795, 20636, 15490, 30009, 4228, 7449, 12681, 25569, 14250, 26642, 20262, 26935, 18972, 10373, 27524, 23847, 12287, 31272, 496, 463, 16987, 11739, 18549, 24652, 29510, 20287, 24187, 13985, 18660, 17183, 24030, 19455, 5051, 6752, 16696, 9279, 14201, 29377, 2080, 28451, 23252, 22342, 22618, 9456, 32715, 17375, 536, 12234, 15879, 1032, 12697, 98, 12771, 31246, 24750, 9514, 18765, 16169, 23499, 4657, 584, 14761, +24112, 5635, 21513, 8041, 14914, 2946, 4650, 16995, 31398, 27902, 6569, 21248, 4591, 6517, 5855, 5127, 18751, 21734, 6159, 31449, 21832, 18931, 29927, 13815, 28445, 15925, 29984, 19176, 20582, 30569, 1169, 11927, 3436, 22682, 19968, 18351, 25628, 24618, 2578, 24258, 19753, 9147, 12739, 24344, 15664, 18594, 29471, 1648, 7561, 2862, 329, 29393, 21793, 30256, 10440, 17470, 13413, 7657, 3878, 1228, 5458, 5047, 13155, 8894, +27729, 355, 27245, 20590, 24973, 29823, 12080, 11958, 6203, 24819, 3534, 21867, 10646, 237, 23515, 18207, 3100, 23844, 14832, 24893, 21333, 25273, 9596, 1978, 162, 13474, 3206, 5620, 18522, 16361, 14514, 13483, 16716, 8992, 1305, 8922, 6047, 13386, 20880, 12250, 5437, 24415, 1350, 16083, 24652, 24865, 1522, 27752, 15942, 16355, 19878, 4507, 8860, 29474, 6485, 9022, 10180, 9692, 14642, 28702, 26053, 29156, 9418, 10002, +5380, 10723, 18924, 11428, 24109, 7036, 23678, 29547, 31451, 25028, 12862, 23336, 17126, 14385, 18320, 300, 30740, 5430, 4807, 6832, 2136, 11292, 15854, 12317, 20984, 30496, 8251, 14270, 26884, 17669, 24272, 32265, 28393, 10428, 10925, 19734, 17464, 1835, 16513, 16148, 26864, 29376, 6716, 11222, 10993, 25036, 11522, 8965, 30467, 16329, 15797, 32603, 27621, 31651, 12152, 15838, 29379, 20404, 30108, 23495, 5305, 21612, 22992, 930, +32040, 1149, 20665, 16736, 2985, 4410, 116, 29849, 1018, 6832, 8303, 12011, 31869, 19825, 20976, 29568, 3386, 4005, 29403, 31007, 2888, 8788, 14077, 32267, 29192, 11417, 22995, 1729, 261, 13219, 2660, 32301, 14369, 23325, 16270, 17354, 27735, 16386, 14435, 28754, 23219, 22738, 7997, 22320, 9795, 28974, 19120, 13181, 211, 15755, 11420, 3100, 24543, 25498, 2599, 20967, 4147, 25594, 22697, 4409, 6046, 25357, 3942, 20415, +15914, 20212, 5001, 10881, 3831, 19436, 6867, 27050, 9406, 14865, 16602, 19201, 11071, 2954, 32382, 11282, 18709, 11034, 14382, 10485, 3764, 16982, 31452, 7912, 9808, 21381, 12321, 15854, 13970, 16263, 3501, 29884, 3708, 8502, 7998, 7539, 27938, 14865, 1821, 4576, 29730, 18423, 23777, 8033, 21377, 23391, 19316, 7318, 1658, 930, 17803, 5422, 17912, 16488, 13334, 27721, 5101, 25655, 10807, 19072, 9151, 14309, 16188, 12859, +22811, 24186, 20398, 17982, 6284, 22219, 22558, 3246, 7874, 13568, 11280, 29251, 4191, 30596, 3801, 5849, 31526, 21605, 11272, 16671, 5325, 24606, 11624, 10426, 17494, 22431, 29498, 26645, 3972, 12919, 6736, 26784, 4337, 27134, 11998, 10621, 16585, 1788, 13868, 24459, 15356, 25148, 20942, 19548, 22976, 24743, 25397, 21734, 13580, 3901, 5637, 18905, 28508, 17261, 29332, 13234, 6925, 26062, 7111, 10897, 6213, 13847, 4913, 10551, +8213, 16911, 21172, 24798, 18700, 2272, 16489, 1288, 27420, 4663, 20836, 17628, 29406, 13466, 6595, 10219, 17367, 12232, 29124, 13107, 29494, 25688, 26341, 3651, 18983, 684, 14548, 25196, 14531, 19462, 2979, 22744, 3605, 24152, 14774, 22305, 26424, 31263, 23594, 21077, 3158, 11662, 5937, 32565, 25128, 12532, 10016, 9728, 24765, 6372, 22835, 21491, 32061, 16409, 25142, 18276, 17093, 6922, 10704, 31625, 26384, 13684, 21601, 29990, +5068, 3608, 19527, 31492, 2103, 10353, 19801, 5262, 22016, 25739, 5059, 14376, 5503, 15075, 24104, 30268, 21447, 14172, 18991, 20740, 30581, 11365, 6248, 14906, 18288, 16953, 13763, 11904, 30637, 2597, 9126, 2937, 6205, 28654, 1661, 8308, 6239, 21463, 13570, 28255, 14434, 18629, 9864, 19937, 936, 1200, 17438, 22384, 15372, 3661, 10356, 13185, 15027, 16605, 28092, 547, 790, 9087, 12451, 31427, 11684, 21578, 1596, 17889, +17464, 3257, 26198, 23703, 24720, 7000, 19191, 6386, 25630, 29055, 26324, 26566, 30255, 10994, 16182, 12860, 14655, 26539, 26045, 29682, 10376, 21369, 30229, 11166, 30457, 9913, 9825, 9373, 31491, 11421, 27263, 16187, 14678, 20693, 7122, 6631, 27693, 26313, 13017, 20555, 22600, 6573, 14354, 20088, 17567, 30536, 180, 32223, 24307, 26225, 29137, 1915, 14827, 26599, 13081, 12516, 3744, 22906, 21889, 2467, 1559, 16384, 18654, 16238, +4309, 25776, 22869, 32003, 19322, 3118, 19790, 9154, 9692, 1376, 29242, 27259, 31913, 29422, 26714, 23452, 22880, 23084, 25368, 4939, 16915, 5681, 17455, 20659, 28588, 6576, 23126, 30147, 22961, 9012, 13617, 27270, 2020, 3718, 26505, 21342, 6837, 13528, 30497, 16529, 14904, 26971, 11020, 14049, 23626, 4967, 4734, 13738, 28051, 30102, 18677, 12198, 3015, 3364, 89, 31603, 9940, 23215, 28983, 133, 32227, 9832, 27404, 1479, +13551, 21141, 22822, 20388, 1901, 20551, 4149, 16806, 14754, 15169, 30855, 5612, 20136, 2821, 19350, 15419, 155, 5259, 27617, 3171, 8623, 27706, 2006, 18564, 18153, 30989, 18697, 17612, 8054, 13333, 19092, 21605, 1707, 9146, 9225, 3608, 29697, 13374, 20414, 11683, 28543, 18502, 17296, 15912, 21323, 3878, 31331, 21479, 9138, 26181, 24650, 17761, 21119, 26656, 3557, 6505, 24878, 22255, 24117, 164, 2820, 10441, 21769, 4527, +19587, 30994, 8136, 16516, 11600, 28550, 28200, 7375, 14284, 12728, 23287, 2840, 16606, 21851, 24319, 25744, 15264, 16201, 10738, 3615, 10089, 14295, 10120, 2199, 3782, 1470, 2363, 6603, 11911, 24132, 11130, 31499, 22358, 19266, 15247, 1190, 15049, 10679, 8566, 29333, 23407, 31853, 32173, 7246, 20936, 23724, 222, 3432, 7157, 10960, 7048, 17247, 25256, 17168, 19446, 29038, 18638, 21810, 2873, 30550, 13174, 14004, 29281, 2765, +502, 11760, 3955, 15551, 22440, 12521, 12117, 13079, 11607, 11522, 20325, 32543, 2479, 20548, 3208, 9636, 31508, 10256, 26883, 23996, 27424, 13562, 20267, 13295, 2604, 23140, 11077, 15778, 4376, 7590, 18543, 4879, 19350, 22499, 20430, 9022, 2252, 32547, 22102, 13859, 11302, 9659, 13635, 13781, 30207, 16843, 23417, 28948, 27099, 17533, 20176, 21755, 31095, 7675, 2282, 931, 30816, 13359, 16709, 2424, 20949, 2485, 7303, 7532, +24984, 27734, 16554, 27236, 27513, 5888, 8328, 6047, 15548, 21963, 19828, 12987, 6038, 10478, 9167, 369, 28011, 29344, 22124, 26338, 4251, 24407, 27269, 2299, 4998, 11210, 4724, 25948, 13695, 12027, 712, 5911, 6993, 17266, 380, 1739, 23155, 8708, 7786, 5935, 30671, 27615, 18922, 3941, 5325, 28090, 4310, 568, 24666, 26434, 26906, 28917, 18073, 21407, 31217, 23072, 32617, 3173, 16252, 13545, 15200, 16964, 19456, 22194, +1462, 19836, 23933, 24617, 28544, 31719, 30552, 26447, 26566, 16707, 30388, 31891, 12029, 1930, 32459, 3927, 28365, 26597, 76, 13670, 15236, 31293, 3974, 15086, 1698, 20226, 28631, 16899, 4422, 15319, 6325, 5885, 2388, 30258, 30502, 30932, 29209, 28287, 24612, 23008, 12226, 22232, 22131, 24255, 24163, 21823, 28182, 19760, 15652, 28258, 662, 30889, 26784, 4637, 13207, 28482, 24863, 9070, 12613, 29286, 24389, 18938, 2403, 26777, +16428, 137, 24942, 12870, 28424, 16786, 3110, 7882, 6250, 25241, 32137, 30413, 14296, 27551, 17405, 29949, 23042, 18068, 28070, 17058, 22705, 8509, 12772, 14800, 17579, 25386, 11318, 9200, 11556, 13721, 3210, 27985, 13859, 28152, 8087, 9515, 12170, 11197, 17398, 18420, 3670, 16767, 16066, 17967, 11551, 703, 15148, 1825, 18771, 10450, 18883, 8708, 18959, 31655, 23509, 3770, 24273, 2059, 12970, 3062, 15781, 16180, 31047, 29640, +11564, 6366, 6387, 23734, 17563, 23785, 9387, 21233, 7785, 25453, 6432, 19336, 26156, 21580, 21161, 12160, 32030, 7276, 20868, 18221, 6163, 11609, 21991, 30437, 13669, 2194, 731, 29450, 18374, 31778, 26322, 29939, 5376, 32709, 20905, 22939, 23727, 30292, 11404, 31512, 22977, 17837, 18080, 16366, 6649, 6473, 28526, 5912, 13749, 16626, 24133, 19912, 28236, 13357, 17581, 9137, 15551, 18312, 5819, 1157, 17322, 32141, 31096, 22698, +32082, 19234, 12869, 23041, 16758, 24274, 21785, 6968, 9343, 7097, 23334, 15992, 13570, 19092, 21904, 27319, 2950, 13270, 14464, 31186, 26627, 32045, 7555, 9410, 17590, 13374, 10567, 2144, 12747, 8896, 24843, 12062, 28130, 4944, 2335, 12120, 29218, 24121, 19088, 5793, 31218, 9654, 21786, 12021, 28746, 10922, 6572, 31697, 24192, 21036, 30115, 18051, 20314, 4903, 27461, 5136, 18277, 5261, 7280, 31025, 14157, 32123, 10319, 9519, +4300, 12654, 21639, 750, 4007, 7960, 6544, 2458, 17614, 28330, 14479, 13593, 6484, 21051, 12522, 30677, 9320, 9869, 15960, 29634, 14772, 10654, 2002, 282, 15915, 9282, 31307, 30072, 8638, 8858, 6823, 12938, 21512, 28462, 13688, 25520, 3654, 20232, 27978, 21269, 15794, 9689, 2094, 22279, 30740, 14616, 20188, 7292, 24485, 3380, 4158, 6490, 14034, 6160, 6772, 29949, 15443, 5311, 27253, 24081, 14169, 1308, 4251, 2913, +29771, 17939, 28433, 657, 5404, 23643, 21926, 21198, 564, 24020, 10709, 31305, 5868, 30897, 5829, 30354, 1510, 9988, 4076, 15544, 16148, 10848, 12726, 31591, 16159, 7211, 22904, 30328, 8520, 27155, 473, 5523, 12327, 28907, 6180, 17731, 19782, 28107, 6161, 20347, 19359, 16871, 18884, 25228, 15000, 24713, 22814, 16510, 1933, 26890, 32055, 18082, 4970, 12013, 16905, 21129, 19224, 7042, 18689, 27744, 1429, 19162, 499, 13756, +15301, 6680, 31487, 2316, 2019, 4881, 22663, 21378, 21752, 8779, 13838, 3984, 724, 3884, 20495, 2658, 30774, 19782, 20740, 2976, 31795, 4877, 24105, 18251, 11919, 10026, 13228, 13349, 29189, 13727, 27105, 11722, 20407, 25825, 14038, 22426, 30706, 3933, 11037, 19690, 12712, 24875, 23674, 13437, 28760, 11401, 16095, 26766, 31183, 4067, 29743, 30210, 8944, 21080, 15694, 20864, 31107, 28922, 1445, 27528, 9881, 28550, 6482, 30289, +21607, 20521, 19947, 19545, 24454, 30984, 6467, 4399, 23092, 30142, 17836, 19084, 8775, 1163, 13082, 7191, 5230, 10057, 4633, 14174, 31138, 20327, 2270, 29477, 16481, 3715, 24237, 26363, 32266, 30719, 23884, 21105, 18472, 11063, 7883, 10159, 9280, 14350, 14558, 32372, 11724, 32394, 18688, 20500, 789, 31770, 27691, 6019, 9060, 32324, 20193, 7430, 19884, 22464, 4139, 3597, 26179, 28376, 29960, 25677, 26327, 21076, 14015, 12032, +32140, 21898, 22191, 8652, 3480, 3981, 8256, 15205, 3607, 26944, 2937, 4396, 25946, 30628, 10415, 2238, 30184, 30608, 9668, 17300, 20304, 13807, 20898, 13716, 9415, 18090, 6625, 2975, 6399, 20640, 15007, 5771, 9770, 4430, 14423, 13251, 8411, 22679, 28456, 12018, 16855, 31393, 16414, 10033, 29253, 26829, 12272, 26669, 24669, 21940, 11202, 12206, 2980, 32100, 25922, 12395, 17422, 32547, 15370, 23821, 20420, 30377, 29592, 30190, +2039, 11247, 10673, 10450, 1158, 6361, 22468, 18013, 4986, 6114, 28047, 1471, 175, 7551, 28141, 24845, 29491, 6575, 4283, 32471, 5907, 30205, 12099, 23329, 29984, 27469, 14383, 17636, 25079, 11207, 15059, 27118, 22455, 25732, 4801, 23613, 32094, 27269, 8859, 4312, 616, 4138, 5784, 791, 11689, 1157, 25636, 8412, 7732, 29919, 8116, 13639, 27356, 20215, 4200, 24573, 14916, 18583, 9441, 7227, 29791, 24500, 1578, 19478, +17465, 6379, 10323, 16791, 880, 19182, 21103, 1496, 23320, 26887, 2288, 2241, 28044, 27924, 10654, 3008, 25076, 18770, 16647, 19664, 6217, 20848, 11469, 21133, 6663, 20911, 28361, 3686, 12643, 29939, 23164, 30108, 3550, 720, 14131, 4430, 19902, 2467, 5927, 10455, 29354, 8215, 12696, 24631, 3371, 23350, 27639, 28447, 9352, 11519, 15344, 15569, 32367, 26813, 3935, 6262, 14956, 32296, 9949, 27600, 29467, 345, 24940, 249, +1065, 6304, 4679, 20968, 8771, 10606, 31423, 5357, 18821, 11351, 29988, 22193, 1934, 24860, 17872, 11286, 3611, 448, 26856, 3210, 27262, 30791, 9472, 9450, 30319, 19421, 4282, 27018, 19767, 29223, 27267, 20832, 2759, 31946, 9032, 11530, 9785, 7687, 16887, 28606, 19039, 14108, 18031, 20973, 6200, 3136, 32259, 9811, 3584, 26347, 13021, 30846, 24370, 22493, 7529, 21921, 9147, 11811, 16171, 28914, 8266, 10670, 16978, 11025, +9849, 26011, 22555, 19634, 930, 6675, 15472, 19969, 20783, 736, 8174, 26983, 3872, 7666, 4026, 7456, 1245, 17047, 5535, 25616, 6772, 13064, 14769, 15919, 24875, 30941, 12065, 374, 8843, 29044, 11399, 18692, 22287, 1187, 5558, 23217, 7862, 21031, 10419, 28645, 21767, 18593, 22860, 25639, 26259, 26886, 327, 27505, 11165, 5862, 20353, 17937, 18926, 2354, 1089, 11034, 527, 13154, 11408, 9371, 9430, 22807, 28063, 31717, +23994, 854, 22167, 31856, 21885, 32586, 27733, 10884, 18411, 17825, 3755, 11903, 11943, 4082, 6640, 23108, 9945, 26993, 8278, 28871, 29347, 9367, 7137, 29875, 22521, 18545, 6478, 31952, 8585, 1773, 30901, 32579, 2627, 20300, 31668, 24512, 20118, 26633, 2628, 5762, 11691, 6383, 17665, 23634, 10466, 24305, 13975, 20411, 18530, 22253, 16514, 15109, 31620, 23652, 12216, 21373, 9429, 18694, 20557, 18014, 20468, 18691, 17826, 23095, +6223, 16726, 14840, 26342, 10591, 17468, 32104, 22282, 23852, 17001, 13149, 1550, 8538, 27124, 21961, 27068, 16609, 5707, 9409, 15461, 29359, 21626, 4066, 6021, 7552, 24624, 24035, 28020, 10547, 9093, 18348, 16770, 25819, 420, 10344, 3643, 17888, 9680, 25925, 8972, 26681, 6306, 10522, 2451, 662, 32483, 29519, 17271, 5423, 6161, 32732, 2014, 27787, 4031, 8035, 2571, 28655, 32071, 30592, 6434, 8396, 16172, 23204, 1448, +16592, 781, 5091, 1712, 10461, 31016, 10685, 4375, 4555, 21207, 6826, 5217, 20923, 3578, 22489, 26346, 9739, 22453, 28360, 4758, 26484, 3628, 7329, 22371, 2931, 5153, 28805, 11327, 21325, 19242, 12775, 5149, 20023, 17866, 6862, 30484, 16115, 17547, 2091, 20670, 5986, 8918, 25887, 26909, 12496, 15608, 20487, 22235, 5294, 16080, 26993, 31778, 19708, 1554, 21382, 22639, 6708, 17419, 1198, 28033, 3893, 13974, 415, 23916, +31840, 7277, 21633, 15187, 24824, 23724, 3089, 30810, 32642, 28977, 24952, 12370, 11817, 12671, 1837, 17111, 28751, 28830, 16122, 15691, 30385, 4736, 5562, 4325, 22155, 6761, 32358, 26049, 20735, 5, 17197, 19807, 7282, 6062, 2227, 32106, 29787, 5316, 30149, 29661, 1525, 22333, 9264, 13343, 2236, 11101, 30454, 30988, 7164, 13808, 13911, 4781, 18544, 19474, 9106, 7932, 26235, 8696, 1213, 14202, 8702, 18410, 1241, 15984, +24473, 3468, 15323, 21492, 8785, 12704, 18385, 10310, 2269, 27649, 23653, 4505, 5983, 21340, 2725, 13147, 2380, 16637, 17928, 20925, 3343, 27034, 28857, 29578, 2962, 30070, 11012, 11664, 15712, 12253, 27649, 7417, 15722, 10204, 28909, 24507, 22908, 14527, 2049, 25177, 9408, 25703, 29682, 15391, 14275, 32408, 28538, 16655, 16277, 13698, 4812, 19620, 7964, 901, 16430, 10927, 30971, 27442, 22591, 13916, 6927, 17472, 21333, 22649, +27676, 17475, 14388, 17816, 32002, 16438, 10225, 8642, 9373, 7140, 24034, 23648, 6780, 19804, 7535, 23057, 735, 12348, 9909, 8699, 13249, 26339, 19626, 11453, 21013, 9450, 25369, 27940, 26922, 13934, 17822, 21831, 31409, 32210, 6879, 30643, 15880, 17105, 6518, 25253, 24245, 30552, 16133, 31025, 17588, 23669, 21314, 18323, 3249, 31223, 27023, 16498, 24794, 13881, 27951, 13039, 23331, 20552, 8211, 17486, 1719, 26033, 6549, 360, +25476, 13428, 31004, 8588, 30533, 4754, 1074, 22010, 2538, 17207, 20267, 20126, 8108, 8813, 5682, 11357, 7268, 32705, 27856, 32062, 13818, 23039, 12333, 4382, 10824, 20545, 21868, 12543, 13810, 28417, 12903, 6518, 9077, 11139, 15107, 6843, 15893, 16181, 28853, 18431, 620, 16353, 5790, 8729, 25166, 11472, 20086, 32435, 11409, 15174, 31729, 25227, 5446, 11295, 29609, 16270, 31840, 18709, 28813, 12882, 14358, 8948, 19401, 23436, +20088, 1740, 30279, 3213, 17921, 26364, 21645, 18541, 9949, 27435, 27270, 2348, 6139, 14589, 2015, 17548, 29763, 976, 10007, 2441, 12271, 6849, 18711, 11343, 25558, 14756, 24226, 7149, 23705, 10859, 30585, 11025, 12599, 28096, 14238, 30520, 21692, 3115, 16293, 31642, 30550, 10796, 1222, 3921, 25385, 3237, 21469, 22380, 4213, 31477, 24822, 16485, 5558, 10765, 27828, 31116, 25522, 19286, 5497, 16459, 30145, 3314, 27484, 9976, +31410, 8954, 7728, 20335, 12070, 24022, 19209, 9852, 2050, 20431, 13774, 27435, 23668, 2475, 17047, 27881, 1184, 9101, 11598, 6742, 19867, 6659, 5091, 12621, 25945, 10588, 29080, 23323, 13903, 23796, 531, 12545, 32750, 8260, 112, 12052, 32282, 19321, 21905, 1564, 6984, 2911, 28999, 30652, 5386, 13278, 25766, 6571, 22380, 4596, 13313, 9479, 11255, 18404, 22100, 4433, 28993, 18412, 27756, 10128, 9440, 28287, 22673, 9422, +3779, 22786, 21475, 3293, 9339, 10612, 4857, 16324, 13523, 1088, 14208, 18909, 14367, 7206, 25480, 3979, 11803, 6026, 13458, 23058, 24430, 2790, 27491, 20655, 21202, 22479, 30783, 30642, 17999, 20689, 7296, 21778, 10707, 28771, 25072, 20046, 6615, 29929, 3602, 20138, 31018, 17811, 6280, 12617, 25017, 31760, 16596, 4052, 5018, 30054, 27111, 29449, 76, 21834, 17336, 21278, 11546, 15352, 19152, 29545, 3273, 26448, 18555, 13980, +22452, 10859, 1258, 29067, 8021, 4861, 16438, 6271, 22672, 22718, 18888, 14921, 21710, 2716, 18974, 26729, 2, 13317, 23410, 78, 2383, 7978, 21356, 13929, 23330, 7740, 10706, 26603, 1420, 29262, 7815, 23872, 7353, 9074, 20172, 15374, 13935, 3842, 21645, 3839, 26560, 7765, 18760, 15502, 10481, 4966, 9463, 10483, 18283, 105, 10561, 20667, 8084, 31917, 1828, 31414, 6889, 12535, 25250, 8310, 9029, 297, 32182, 16382, +9371, 19586, 31757, 23306, 23428, 20634, 27145, 17220, 28400, 13138, 32723, 6113, 18104, 9418, 16597, 3620, 9524, 27158, 24287, 17608, 26308, 26115, 16254, 429, 5882, 8736, 8739, 14911, 9034, 8154, 31294, 18405, 27740, 30283, 8944, 18401, 18149, 3321, 2853, 13781, 16459, 2808, 19895, 1796, 12227, 3724, 5416, 21751, 30882, 29703, 6591, 24422, 23050, 22845, 24852, 28933, 31582, 823, 11076, 7848, 8977, 9602, 26253, 3950, +7117, 2429, 22351, 25267, 5751, 25204, 6280, 22210, 28013, 26175, 24006, 7472, 29899, 29422, 29223, 28014, 26357, 3046, 19668, 16640, 25891, 11752, 12805, 24705, 12576, 23881, 32553, 21553, 716, 26039, 25503, 7833, 28468, 15086, 332, 1451, 7523, 6613, 23662, 2768, 20, 14900, 10240, 29920, 11555, 6695, 25166, 5144, 9741, 12066, 21784, 2864, 23819, 1821, 27570, 3627, 25703, 27355, 25180, 26419, 20626, 17916, 1484, 16327, +234, 1817, 17778, 7757, 8430, 8672, 10525, 8450, 23573, 20765, 5602, 2360, 27460, 30768, 7504, 4433, 10067, 29289, 7298, 1118, 31110, 2100, 4745, 24045, 29455, 29925, 17696, 17314, 15073, 19181, 873, 15308, 20998, 18651, 23065, 29428, 27324, 823, 5110, 18129, 21588, 10713, 20489, 16281, 8713, 27993, 20714, 18780, 24514, 28012, 19898, 22857, 30112, 24643, 14134, 26800, 21801, 31831, 11346, 4106, 18244, 12219, 19414, 6474, +30870, 9712, 3134, 25426, 10535, 8244, 10787, 32123, 18957, 31276, 15636, 27671, 26502, 3583, 13683, 18248, 31595, 814, 8337, 28940, 25457, 22472, 22972, 14490, 21535, 1550, 18597, 7011, 13769, 5243, 13485, 11871, 14955, 16619, 4530, 25490, 24863, 15317, 24846, 11053, 13826, 7714, 5956, 7560, 11297, 19639, 25808, 10125, 20453, 1378, 6297, 13143, 23850, 29269, 27633, 12617, 30819, 13462, 19628, 11820, 18706, 345, 23691, 893, +16964, 28221, 26384, 9059, 10771, 18462, 20112, 24597, 26176, 26068, 32157, 4706, 12940, 25197, 14831, 625, 26575, 21128, 13768, 17657, 17629, 8634, 30274, 15680, 22096, 17134, 27500, 8034, 17479, 18423, 8928, 1675, 13877, 2544, 10735, 24648, 21006, 30847, 16477, 14414, 24148, 15866, 19120, 4320, 8295, 1183, 4945, 2103, 22311, 18714, 19760, 7172, 27348, 17267, 22852, 16676, 1633, 17584, 24711, 19113, 3240, 871, 20788, 17117, +3415, 31523, 8997, 24421, 29603, 25474, 6067, 20983, 8572, 25188, 25303, 16867, 26371, 30248, 18970, 15915, 16194, 5963, 23087, 10774, 23230, 13172, 27451, 24863, 30756, 19394, 11208, 1228, 20265, 31997, 18345, 23680, 30752, 27342, 15333, 27587, 20048, 21400, 15802, 28620, 13820, 8337, 12720, 7424, 5818, 31690, 23339, 22012, 4885, 13658, 19, 28115, 26830, 27470, 20211, 24819, 14096, 31419, 26047, 1593, 30648, 11625, 25273, 28633, +6199, 7838, 23452, 26248, 29238, 6487, 22100, 10291, 14824, 2052, 17715, 20642, 975, 8286, 9887, 5860, 21944, 9906, 1208, 16007, 4608, 21419, 8058, 18704, 20070, 1337, 20297, 17951, 12962, 12802, 13816, 19162, 20640, 4500, 12642, 17110, 10987, 1974, 27401, 25812, 4027, 12348, 13686, 5002, 20634, 23573, 10862, 9811, 711, 12070, 25818, 5319, 721, 1108, 24023, 20792, 2445, 11552, 5975, 15408, 24354, 19791, 1802, 12226, +24291, 14444, 29337, 2511, 16418, 23970, 28323, 20445, 3551, 9241, 25447, 24185, 47, 3542, 1228, 758, 15612, 27046, 6078, 16334, 28154, 30101, 4358, 30600, 8886, 10333, 13240, 472, 30124, 15042, 12699, 21647, 29486, 9268, 24158, 13136, 470, 19713, 814, 4021, 28955, 26261, 28207, 29002, 29803, 29435, 29760, 12648, 23714, 3070, 28982, 19100, 404, 572, 16932, 9290, 10905, 30172, 9762, 8261, 12446, 22461, 29908, 9164, +31729, 21299, 22301, 32200, 8244, 23115, 3453, 4431, 16608, 31660, 665, 13644, 28328, 30426, 26292, 19274, 728, 22506, 5606, 1132, 23078, 22539, 10422, 1215, 19943, 20185, 9476, 32390, 9878, 6616, 8786, 8840, 27915, 31087, 8272, 3392, 21434, 11725, 7823, 5275, 10618, 8489, 18919, 6178, 6147, 12443, 25452, 6875, 2181, 31058, 8008, 25259, 20829, 18430, 26474, 8005, 5847, 3182, 7627, 15726, 9798, 16413, 24566, 4946, +14733, 70, 8338, 3399, 11795, 16161, 8674, 22413, 24650, 27593, 28591, 30797, 7268, 21275, 4905, 9449, 19566, 12913, 1940, 7627, 31343, 28414, 15632, 4423, 31596, 23259, 20149, 8627, 6905, 11947, 13573, 21638, 12017, 21911, 25037, 23812, 5304, 944, 13458, 29955, 28537, 9281, 27984, 3038, 30557, 121, 12487, 17355, 13034, 14428, 24982, 11610, 10074, 7847, 16033, 8903, 31106, 3414, 17530, 5243, 15361, 31103, 26881, 27378, +20246, 19151, 18422, 25550, 20095, 31880, 22737, 15864, 8394, 17954, 18902, 6183, 18075, 31390, 23538, 31110, 13050, 15752, 9952, 23124, 23599, 25985, 32027, 21938, 29399, 16789, 27181, 11992, 15124, 21295, 6602, 2602, 7678, 25024, 28153, 27773, 24137, 18122, 10869, 32531, 3308, 29772, 5946, 21384, 28394, 29484, 19726, 8676, 12468, 29678, 31800, 3300, 22895, 31060, 25238, 19526, 15081, 19651, 31518, 30206, 8178, 5352, 40, 15856, +30376, 28193, 10861, 21745, 13548, 21731, 21508, 16856, 18735, 27454, 5472, 14361, 24170, 25198, 23037, 3871, 22108, 22069, 7171, 12235, 20361, 32409, 31761, 2675, 19292, 30511, 113, 27471, 3095, 153, 10559, 704, 28347, 21421, 22449, 9127, 10384, 11190, 25983, 29119, 5876, 31456, 10712, 30047, 23886, 981, 1150, 13227, 23050, 8321, 25462, 10644, 7962, 24456, 13319, 27254, 22199, 13432, 21957, 25295, 13585, 32517, 25999, 9164, +21170, 15680, 18291, 31554, 26870, 11507, 27905, 32747, 10195, 5849, 30026, 1313, 6830, 31176, 14540, 29880, 6729, 7235, 7756, 14691, 31691, 21075, 9177, 21122, 1739, 31135, 13649, 15325, 30884, 6880, 24489, 19286, 22561, 10013, 18072, 16663, 21520, 13209, 16642, 31715, 19058, 13900, 260, 25888, 12308, 14801, 23000, 19037, 22036, 30757, 960, 20959, 19064, 10138, 9313, 20804, 8505, 22963, 3361, 6621, 29843, 27850, 25907, 19636, +5095, 11211, 3532, 26615, 24420, 20174, 25562, 10710, 1307, 25823, 3830, 13615, 7856, 26830, 32653, 29892, 24819, 845, 18083, 11116, 10983, 27396, 31920, 19488, 17591, 2513, 26109, 14667, 30363, 19248, 1535, 2691, 30459, 5067, 29306, 22111, 25242, 22101, 53, 26549, 15156, 3883, 7396, 23012, 30714, 7281, 20136, 22765, 8127, 5451, 1113, 19110, 79, 265, 5831, 17671, 2778, 31940, 32338, 374, 18421, 1105, 3065, 16112, +6173, 32371, 5456, 31415, 21704, 5509, 25196, 4092, 9393, 32592, 27104, 7339, 7106, 14472, 30104, 15233, 19923, 31218, 1575, 20003, 31483, 7406, 4906, 1494, 6579, 4476, 1868, 25000, 5581, 4933, 8344, 11754, 4536, 13800, 10401, 26241, 19310, 2829, 30333, 28703, 2654, 24670, 3274, 9760, 6374, 610, 24993, 26298, 31828, 26568, 13533, 30544, 1207, 18439, 32038, 7786, 22915, 1138, 18, 28496, 6071, 8362, 7483, 10607, +22163, 17884, 4080, 8705, 20714, 1646, 4640, 23368, 26316, 7914, 360, 32690, 8524, 25353, 26220, 7585, 19153, 6985, 5361, 20360, 25424, 4631, 28146, 15571, 5769, 28164, 11300, 11840, 3759, 18783, 22447, 25922, 3899, 26528, 1859, 24613, 28174, 6499, 15213, 21722, 14413, 15573, 21644, 22937, 8158, 15097, 30522, 27312, 22082, 3115, 14904, 14739, 7746, 10283, 30310, 13515, 5679, 8842, 25355, 9438, 27625, 15035, 2592, 31525, +8795, 4451, 23370, 4201, 10950, 5816, 25923, 25363, 21389, 14799, 15533, 29548, 29896, 13287, 24092, 19211, 16403, 6228, 1182, 24149, 16511, 31492, 4897, 22191, 7567, 30252, 31629, 2424, 12519, 1454, 1181, 21314, 5905, 24552, 25515, 16856, 30368, 18670, 9451, 18989, 702, 24984, 15769, 30598, 5504, 7093, 17041, 21907, 13322, 18223, 13288, 29833, 16948, 18185, 19256, 24515, 15670, 18118, 26939, 28189, 19572, 28121, 16736, 25477, +19905, 9483, 9565, 17505, 28154, 19017, 3726, 28856, 11233, 19496, 26686, 16737, 26589, 10960, 5876, 7143, 29183, 19165, 4209, 13363, 4582, 23465, 5110, 20252, 8815, 32050, 15674, 28387, 27403, 32410, 21097, 14540, 9125, 30662, 32045, 4511, 16911, 3003, 599, 28145, 22499, 27286, 12114, 16321, 5478, 17991, 23464, 1893, 4388, 27673, 15257, 8970, 18371, 20367, 29223, 27186, 19649, 12129, 22806, 14284, 11771, 11135, 28824, 20896, +9029, 28101, 25408, 25941, 31105, 26007, 21318, 20836, 20525, 664, 4389, 26003, 18655, 27854, 27897, 23043, 22759, 10386, 32014, 8362, 30753, 28469, 2781, 17635, 7830, 25587, 31919, 19601, 3954, 27976, 7729, 12983, 23309, 369, 6156, 21646, 26377, 27474, 9715, 14134, 28139, 14104, 7370, 14026, 9190, 2499, 4302, 31950, 12885, 3548, 7544, 10870, 32017, 10325, 28505, 7079, 3144, 27657, 26680, 7098, 22865, 1641, 20082, 13406, +2011, 26238, 2285, 28388, 20945, 12000, 9754, 16316, 26104, 17124, 30342, 2527, 19623, 1876, 1709, 32508, 5424, 9253, 10611, 4673, 19579, 6348, 11752, 22723, 1237, 5664, 29822, 24102, 7306, 17136, 4741, 9317, 10606, 7026, 4937, 31551, 19026, 14691, 15099, 12362, 31816, 12674, 14889, 18671, 14550, 16598, 18412, 19975, 25852, 29023, 24648, 12663, 2603, 3633, 2618, 3841, 9297, 32440, 27943, 16603, 16808, 32684, 25920, 27415, +6942, 30857, 26198, 25968, 12781, 8530, 5563, 11829, 21204, 20452, 30500, 2986, 4283, 16144, 22961, 30135, 12399, 14842, 10030, 15003, 18475, 12648, 18844, 27772, 12321, 14019, 11608, 29129, 13936, 4760, 23776, 20878, 2850, 17207, 14079, 15631, 25737, 19642, 27460, 14173, 7326, 25192, 17159, 11609, 8569, 7353, 8976, 20968, 22195, 19006, 3203, 7902, 31655, 22047, 2906, 11208, 3299, 14514, 7569, 17235, 19275, 31346, 5345, 22125, +15785, 19424, 4988, 8754, 6298, 32448, 22927, 13625, 24872, 7318, 25234, 673, 14671, 1443, 21642, 4098, 20449, 24845, 12000, 19336, 14125, 14907, 30544, 17424, 29421, 5346, 1891, 15928, 3924, 7236, 5285, 19709, 26661, 10273, 28463, 191, 9953, 18622, 13816, 2058, 25940, 6283, 2731, 7844, 7726, 24373, 11942, 28175, 16451, 23943, 14744, 30576, 6082, 12520, 15232, 2735, 17866, 17123, 18664, 21790, 24359, 23949, 8731, 18252, +1455, 4426, 18444, 11408, 23048, 32260, 13466, 16221, 5775, 16198, 24065, 13501, 7803, 3239, 8909, 24254, 27182, 23653, 22062, 496, 3405, 4526, 3232, 21272, 21649, 21896, 10294, 13241, 13077, 19026, 31493, 14532, 23452, 17169, 25941, 13733, 16662, 6639, 29954, 22437, 22837, 21251, 3171, 30641, 24490, 12080, 22127, 18905, 2965, 11422, 19401, 6370, 15948, 22633, 27642, 4830, 11761, 5169, 18071, 24839, 24195, 16796, 6603, 14879, +1198, 32544, 28612, 17860, 6416, 25798, 7529, 29253, 14281, 10700, 27126, 6004, 22780, 16486, 24909, 25745, 27908, 11542, 32116, 11088, 1408, 26990, 15918, 13169, 32159, 1221, 5240, 23586, 18018, 11844, 5698, 19216, 11620, 1542, 4308, 18036, 27341, 11837, 14522, 8854, 22538, 8880, 14858, 12550, 25366, 6999, 5528, 20506, 18542, 4876, 31595, 19950, 31866, 14745, 351, 31258, 15967, 5592, 22076, 1217, 17436, 27774, 20433, 29056, +29317, 24741, 14325, 23890, 3810, 28847, 32744, 26348, 4959, 14835, 6131, 30326, 21834, 11659, 18064, 7608, 16535, 16891, 27558, 15633, 31637, 27910, 14123, 14836, 734, 3432, 16053, 18170, 31206, 3718, 14458, 27755, 28459, 28783, 18877, 32269, 24862, 18854, 25850, 29822, 921, 31981, 27380, 22755, 10872, 12676, 30364, 27407, 29568, 25154, 10272, 28437, 20296, 24396, 10505, 21030, 27828, 26558, 6432, 26266, 30276, 20891, 21254, 25967, +16906, 7363, 25468, 9001, 26217, 18550, 6055, 27138, 17763, 667, 17126, 28635, 13343, 14722, 23274, 10143, 7108, 779, 5812, 27405, 25175, 16317, 15667, 20235, 10107, 22100, 13733, 7615, 10223, 2219, 814, 27129, 9583, 26283, 3362, 3032, 12065, 9417, 30171, 29829, 10084, 14529, 25696, 23428, 29251, 16203, 803, 3591, 16982, 6616, 30996, 9389, 22933, 13896, 29624, 273, 3228, 10589, 7888, 13451, 12809, 8703, 7812, 22392, +2218, 11175, 25424, 14283, 20592, 22827, 11344, 30677, 4588, 4273, 21337, 1071, 20476, 22140, 4663, 4690, 28756, 2891, 14079, 18922, 16787, 10935, 19195, 20015, 21524, 27083, 698, 1565, 3018, 8511, 23957, 5236, 19686, 16614, 19520, 7510, 6673, 30864, 5419, 11262, 2369, 26756, 12333, 22845, 16129, 16996, 27535, 12117, 19888, 8846, 31039, 3907, 19781, 17466, 23923, 8538, 11782, 24621, 10103, 14800, 364, 1293, 20037, 20050, +17907, 6789, 27561, 24580, 4885, 212, 3074, 7255, 26969, 15408, 30100, 10330, 32404, 24868, 22447, 19524, 946, 20719, 23432, 20728, 5417, 14587, 29266, 17199, 6440, 6601, 32000, 6805, 7894, 19269, 26855, 25801, 26058, 21648, 17614, 30943, 21861, 20688, 5430, 16062, 3328, 2763, 26392, 2965, 27631, 16071, 22489, 28577, 4022, 13153, 16537, 9440, 27740, 13035, 26639, 1413, 19637, 25871, 8218, 27531, 12372, 2305, 20565, 5662, +23954, 5411, 3838, 13047, 26099, 9268, 29109, 29428, 12031, 22733, 32393, 6894, 6036, 22114, 2704, 10059, 2500, 19241, 19499, 30240, 32277, 13370, 31653, 19146, 6474, 7103, 13909, 18846, 9409, 1706, 24509, 595, 7117, 28347, 13642, 449, 4847, 9983, 29877, 16879, 32716, 29502, 23773, 5984, 18848, 26477, 16043, 21348, 12951, 2774, 18821, 12460, 16145, 17706, 31606, 22619, 24810, 12747, 8697, 1451, 14454, 438, 2046, 21571, +28785, 15688, 22020, 865, 25671, 19129, 17744, 25619, 15863, 8749, 31603, 1944, 2459, 14879, 23292, 15410, 17653, 9345, 27870, 1030, 27052, 26708, 23649, 19094, 6687, 32347, 20545, 21141, 17, 22591, 9945, 28803, 5511, 31965, 29668, 31182, 18327, 14644, 24033, 1422, 23393, 22868, 3366, 25852, 4979, 26659, 8494, 22633, 3236, 3596, 23663, 30288, 30304, 14545, 16614, 4224, 14124, 4391, 25365, 14141, 26982, 2542, 10176, 32493, +1740, 7076, 30907, 20067, 21720, 22172, 21489, 12346, 12273, 24856, 5430, 17252, 18747, 13925, 7117, 21983, 17521, 30781, 19504, 15058, 12558, 3350, 19282, 26682, 7742, 11879, 8055, 1956, 14422, 18232, 1682, 16162, 25308, 32589, 3461, 14261, 21994, 24950, 26607, 1499, 17038, 32037, 18751, 3017, 13194, 25869, 25001, 30716, 23882, 11737, 13006, 3672, 15087, 32288, 30354, 22829, 11399, 5641, 24786, 25821, 23873, 26468, 9215, 16414, +26289, 12676, 30675, 15515, 4859, 24514, 17014, 21897, 23783, 2998, 24915, 4210, 28867, 17148, 2158, 19981, 28885, 15164, 23653, 11204, 14684, 21239, 1266, 26083, 26880, 26052, 19137, 17986, 19752, 28352, 1632, 13273, 8261, 32307, 28789, 13120, 24053, 13035, 2249, 15068, 16033, 27164, 19278, 12132, 11544, 21436, 32113, 7661, 3832, 22998, 18866, 18516, 11469, 20132, 11832, 5582, 13416, 30969, 23568, 400, 26553, 25200, 13673, 2046, +24739, 9694, 15166, 16024, 22730, 17416, 31092, 5995, 11812, 17603, 18128, 23357, 6271, 17473, 31018, 10104, 7704, 17116, 28620, 19173, 4480, 7684, 24755, 17896, 5885, 15555, 18296, 32439, 7987, 31970, 1717, 32726, 8896, 16884, 15982, 31626, 1532, 14307, 4854, 13344, 31910, 22982, 3933, 5413, 7687, 2184, 15517, 15391, 19300, 11370, 1797, 23781, 19054, 26552, 8909, 24940, 9340, 27206, 24611, 17327, 26408, 26328, 17286, 2536, +10444, 500, 1395, 11976, 14807, 6249, 25321, 13949, 29231, 29254, 19363, 4150, 31438, 2112, 19542, 17971, 13482, 21339, 8984, 32537, 15123, 17893, 24709, 24463, 12331, 16552, 9023, 5971, 10112, 26309, 8508, 20557, 26809, 9903, 32533, 8849, 16152, 25086, 22798, 12615, 21573, 9393, 16765, 20243, 11506, 3539, 5446, 24988, 24878, 14430, 24757, 7234, 32324, 16698, 31697, 11887, 482, 7952, 17859, 10595, 1493, 26367, 31152, 28303, +3502, 30917, 4384, 19654, 23236, 27182, 32269, 12041, 3808, 16266, 32284, 15314, 19806, 4963, 7534, 11916, 19393, 32292, 19150, 18949, 16222, 18080, 30837, 16705, 26032, 15928, 27300, 27526, 9527, 25684, 23061, 13029, 23833, 27445, 32683, 14301, 21859, 32184, 26342, 25667, 15682, 25859, 8213, 2720, 30822, 15748, 14637, 17447, 15272, 1019, 3629, 31494, 19099, 1698, 15431, 12364, 17626, 9963, 7122, 27153, 2879, 30183, 7414, 26713, +24860, 7329, 8246, 13951, 6745, 1821, 6851, 22427, 27680, 15064, 25148, 25734, 30812, 7017, 10413, 13316, 8036, 14042, 12043, 27136, 15740, 27474, 6732, 598, 4670, 13854, 27751, 7549, 11269, 2397, 1494, 3361, 9726, 9741, 17312, 16471, 11562, 24163, 6131, 6474, 6460, 31279, 32208, 4504, 5528, 9853, 17821, 13564, 23896, 29864, 7932, 6868, 24570, 14664, 7467, 29240, 28518, 2450, 4022, 7019, 4848, 5516, 10380, 14574, +15257, 27693, 31046, 26819, 19088, 4409, 525, 25548, 2920, 32733, 30053, 8448, 9819, 15106, 22012, 947, 12202, 29945, 7815, 4004, 11841, 15282, 477, 7592, 17733, 4499, 14611, 22581, 10015, 24992, 4387, 25273, 19917, 2665, 19324, 6237, 7074, 19850, 31786, 9994, 19815, 29071, 18442, 29634, 11409, 7687, 30581, 23611, 4864, 5629, 27615, 16705, 20911, 28092, 24297, 5876, 32591, 6141, 28457, 9839, 31133, 77, 2344, 18282, +2742, 21668, 24519, 9817, 8750, 23537, 19811, 28566, 19840, 5486, 25432, 31249, 13173, 23246, 22092, 18037, 28875, 16940, 1974, 17018, 12264, 26272, 22895, 12088, 32413, 18584, 21927, 30778, 18661, 24271, 16292, 21404, 13171, 8043, 31221, 21922, 31581, 18264, 17720, 18653, 23750, 10384, 17135, 4155, 862, 6459, 22192, 29737, 23399, 24167, 13988, 2896, 17671, 4115, 14984, 17316, 22699, 4143, 15326, 8593, 28414, 31618, 29997, 8817, +6893, 28450, 30739, 5706, 13946, 15691, 24360, 4929, 26076, 8727, 9084, 26938, 15186, 31277, 23908, 5818, 22676, 5128, 8714, 7579, 9243, 23698, 24895, 31942, 27841, 7453, 7767, 23487, 6303, 4996, 32304, 13196, 678, 30276, 18903, 14625, 13199, 10495, 19554, 6507, 19222, 28638, 678, 1640, 27147, 24586, 7458, 17055, 29714, 16172, 24634, 6189, 7102, 16761, 5363, 2175, 24214, 13131, 25662, 30517, 18127, 25199, 10946, 18806, +22707, 29849, 663, 3138, 7576, 20217, 9646, 26798, 16087, 10324, 28438, 10467, 2142, 3129, 27522, 31856, 19301, 19389, 5277, 26404, 3382, 10640, 28579, 27597, 23771, 21474, 25346, 9131, 13905, 3524, 27937, 3844, 605, 28600, 6982, 8181, 16049, 16628, 2211, 32136, 26952, 30650, 9835, 29094, 1011, 4590, 28182, 20312, 23979, 691, 13948, 27361, 11332, 9760, 22190, 2335, 31234, 14769, 11466, 12371, 18293, 6635, 16215, 18899, +2467, 23197, 27080, 18516, 7058, 29292, 17885, 1242, 27174, 27720, 30337, 28185, 32310, 25751, 15729, 23521, 26443, 29678, 18115, 5007, 6670, 7537, 7342, 5136, 22306, 18809, 17507, 7832, 25444, 954, 26731, 27912, 24151, 21043, 13660, 31209, 17567, 31545, 32452, 11973, 26498, 30021, 7390, 26040, 23004, 23120, 16794, 16679, 20030, 2141, 21686, 26700, 9678, 29029, 31836, 31985, 15070, 16575, 7049, 7746, 17529, 1012, 2890, 8912, +22055, 16551, 7354, 6855, 15328, 7038, 18828, 9058, 4291, 26219, 2331, 27295, 16571, 19125, 11207, 3833, 21266, 125, 30533, 30944, 29154, 29601, 30161, 11456, 13408, 4442, 19203, 30937, 5454, 22093, 7081, 27510, 5876, 14435, 1597, 21205, 21473, 20425, 30263, 25764, 13876, 32594, 20292, 30447, 18951, 31499, 1512, 7449, 31624, 32045, 5626, 28011, 28878, 3019, 6699, 9518, 7462, 25902, 7687, 12916, 15228, 14769, 7658, 21104, +29204, 9255, 9541, 17910, 29681, 7037, 10906, 10789, 6863, 31198, 8469, 25815, 29929, 9981, 496, 28786, 9259, 6122, 24029, 5369, 9142, 30728, 14888, 16604, 23863, 22575, 29520, 6323, 4576, 4411, 27427, 1013, 13666, 4201, 18923, 10579, 11238, 29829, 21369, 18101, 28260, 29838, 11148, 25421, 7051, 11645, 21439, 16310, 17767, 12700, 21680, 26909, 10661, 3800, 10745, 1756, 26375, 7498, 8079, 30952, 11909, 2738, 31965, 25575, +6939, 18120, 3387, 18177, 15181, 24756, 3511, 10673, 21826, 14659, 3327, 28877, 26304, 24766, 12420, 11304, 4699, 1332, 5445, 15360, 5132, 16191, 17116, 31507, 23689, 25195, 29691, 2830, 27933, 28888, 28405, 2105, 14240, 31792, 20282, 29422, 23780, 23793, 7327, 12838, 5685, 10654, 8948, 31989, 2653, 21368, 10525, 7352, 22700, 15971, 22712, 27832, 32162, 7060, 26571, 23083, 32255, 23495, 25913, 27420, 19615, 21550, 29525, 1088, +20575, 17040, 30510, 11587, 8065, 5069, 24426, 13750, 15724, 606, 12972, 18377, 21974, 23497, 25729, 11906, 6700, 15673, 6970, 6094, 22733, 773, 29177, 22220, 24268, 22322, 16872, 11116, 11105, 13630, 12204, 31680, 30670, 9946, 10499, 5967, 15015, 2157, 19718, 30739, 2763, 32690, 16348, 24737, 23419, 9309, 3875, 30120, 24982, 10845, 3446, 14947, 11619, 32624, 4399, 3119, 22178, 21272, 14235, 515, 2134, 26439, 32195, 36, +3617, 9927, 6003, 18633, 12084, 25721, 16604, 14848, 25643, 185, 6817, 16295, 9494, 10693, 13647, 1709, 21538, 17093, 16656, 389, 16949, 21056, 3509, 6360, 9560, 17744, 6875, 11694, 11416, 6303, 11730, 15033, 16230, 17733, 898, 28314, 10687, 17503, 10394, 3562, 17688, 17212, 19857, 27182, 27905, 736, 28891, 16675, 17830, 12780, 17065, 2011, 1068, 20574, 8371, 10628, 5550, 15247, 22322, 16966, 21550, 1284, 32000, 5012, +19017, 130, 558, 29704, 17633, 10953, 499, 2553, 28165, 20356, 29736, 23302, 21093, 25859, 7209, 6155, 5871, 24274, 8166, 6939, 12080, 16538, 17567, 17631, 31785, 7121, 1829, 20567, 8405, 1061, 25579, 27423, 1192, 26137, 24359, 18825, 4322, 24858, 21379, 32487, 12447, 18347, 23021, 772, 11438, 30231, 6927, 17310, 21737, 15093, 24249, 1050, 31631, 9049, 18681, 30648, 16170, 20510, 18447, 24576, 21572, 11258, 19231, 22764, +4628, 10822, 8821, 8950, 2913, 30200, 8670, 15360, 15779, 31691, 16132, 27218, 29154, 23059, 11760, 18124, 5384, 3241, 19174, 4248, 12290, 5087, 2128, 28461, 25597, 20576, 20269, 14401, 31834, 6732, 4397, 3694, 17554, 13219, 12645, 20467, 10651, 21315, 3059, 26431, 20238, 19191, 20881, 16625, 9482, 32641, 1981, 14867, 3114, 21155, 19115, 15405, 26242, 21243, 11098, 19071, 9051, 31367, 705, 8118, 5331, 5102, 11812, 22885, +18321, 24457, 10585, 28973, 13004, 13644, 22636, 475, 68, 10749, 17100, 9550, 10622, 19081, 24417, 13736, 7468, 10764, 29141, 942, 32008, 7471, 20013, 8291, 6070, 20718, 16409, 11401, 25821, 28222, 1519, 11374, 19911, 12104, 7579, 148, 25748, 30215, 623, 25816, 8196, 17723, 2599, 18818, 4036, 27016, 32555, 11504, 5013, 28928, 12446, 4253, 3632, 32459, 12544, 9702, 20410, 28954, 21104, 13463, 24408, 22623, 24837, 11551, +1959, 32417, 11699, 27707, 29864, 12322, 20756, 5293, 30045, 23355, 24111, 1313, 17603, 23898, 12817, 22616, 20059, 25263, 26869, 23691, 24955, 6646, 625, 12597, 2832, 21729, 26060, 27240, 11584, 18129, 6023, 13543, 17778, 17723, 8483, 14875, 30045, 29239, 20168, 27323, 19826, 11511, 28636, 4661, 2642, 8686, 27278, 22701, 1181, 21379, 13624, 26136, 28025, 14249, 5965, 30857, 3211, 32025, 25329, 14795, 17387, 31353, 28339, 2397, +16308, 4054, 17272, 13585, 525, 4672, 8140, 20351, 16184, 4009, 25012, 18826, 12695, 19522, 8759, 13876, 8134, 22383, 7245, 3391, 3864, 13210, 1481, 7075, 12468, 26810, 21871, 29855, 25395, 17442, 32252, 8935, 21496, 16757, 22521, 22021, 21429, 30661, 9604, 4845, 1902, 1848, 23671, 14597, 21371, 32430, 28474, 29505, 22045, 2951, 128, 25910, 16161, 1609, 217, 28629, 28420, 22088, 25716, 21047, 6762, 25201, 29983, 28258, +9190, 19736, 17511, 30619, 17629, 27115, 2697, 19532, 28964, 26368, 1361, 17567, 26031, 29835, 14304, 15308, 18, 14432, 8450, 16180, 16042, 8668, 12041, 11694, 30756, 4990, 32741, 4751, 30191, 29956, 241, 6613, 16924, 17753, 4464, 1786, 12100, 7161, 21318, 8296, 762, 22679, 25863, 26793, 19747, 7399, 9333, 19765, 21832, 17784, 3177, 5106, 26452, 15219, 16800, 24440, 20209, 16773, 29191, 17632, 13962, 29433, 24245, 30886, +14418, 28709, 32672, 26518, 3103, 21222, 2047, 3865, 11134, 27910, 30658, 30881, 2542, 7223, 17878, 24374, 25007, 21056, 29480, 18691, 3507, 13512, 10364, 23716, 30285, 6787, 8580, 11479, 3452, 57, 9598, 17870, 28766, 9502, 11621, 31869, 30725, 13668, 2966, 9091, 8810, 856, 7204, 11352, 8080, 25082, 2958, 319, 13370, 32438, 19011, 16877, 13182, 29375, 7825, 10700, 3394, 16405, 22179, 6847, 16462, 31777, 24717, 12461, +8512, 3570, 11562, 6469, 17238, 14529, 15560, 26049, 15385, 22764, 4633, 23465, 15078, 7592, 23785, 28449, 7262, 10028, 12558, 20445, 6635, 20384, 31145, 10029, 4021, 20556, 16876, 20484, 19566, 8826, 177, 28078, 12396, 11739, 1779, 29635, 26268, 17339, 22916, 8886, 7335, 27549, 32351, 22413, 2373, 23368, 18094, 9636, 628, 30653, 30081, 7263, 18269, 28458, 17293, 22290, 16246, 1401, 10006, 3044, 10227, 10183, 31122, 22624, +21923, 133, 19491, 15423, 17472, 9639, 24309, 24807, 4420, 23893, 14453, 6794, 14493, 32547, 16430, 15122, 30432, 13743, 22385, 15933, 9433, 6910, 5456, 25679, 8312, 15462, 28724, 18539, 25646, 27078, 8395, 14801, 27212, 27886, 30224, 11916, 4757, 21766, 3956, 9178, 12891, 18409, 15972, 27384, 18188, 32402, 9738, 15853, 13377, 32124, 31786, 22810, 6266, 4474, 15721, 14578, 19937, 11677, 350, 12815, 5988, 8745, 27616, 432, +3864, 25072, 12348, 8621, 14070, 16304, 17799, 26961, 1945, 1003, 21578, 20134, 637, 31316, 3219, 14014, 30672, 2237, 4056, 4171, 6712, 19778, 18749, 26649, 31455, 19099, 6696, 4675, 27845, 1544, 5107, 31709, 26616, 17456, 7562, 7919, 992, 25362, 2112, 2938, 26365, 23690, 23072, 27003, 22239, 26291, 8249, 20143, 28528, 12306, 24314, 2472, 32084, 10296, 29121, 30771, 29395, 3049, 2679, 24472, 4593, 7786, 23413, 31210, +25242, 30976, 6361, 26235, 23570, 8473, 29173, 17167, 32164, 19477, 11402, 21635, 13000, 19652, 9010, 8760, 31958, 557, 11233, 31274, 10853, 7586, 29277, 7480, 10636, 31956, 31953, 15229, 6975, 22598, 13671, 32217, 20806, 20032, 25684, 11608, 28506, 22089, 28776, 27902, 8798, 7410, 16769, 21798, 27062, 25779, 30559, 26252, 26336, 9024, 24758, 4421, 16610, 21268, 11902, 27246, 20456, 11087, 9708, 27431, 917, 23379, 26881, 21724, +10644, 19797, 564, 6382, 9119, 29340, 1516, 17917, 3983, 18285, 6948, 31045, 11296, 4739, 24530, 4865, 13763, 16520, 9286, 30373, 5020, 21188, 24852, 25477, 32275, 1792, 20140, 425, 25171, 14253, 22149, 3047, 1283, 22713, 9429, 10402, 19286, 10945, 28319, 23269, 29230, 2499, 21546, 7759, 7238, 13308, 12624, 21001, 29829, 21910, 18607, 2081, 10331, 10691, 27558, 9838, 12483, 14931, 10263, 4886, 29184, 32412, 7934, 30467, +22358, 17363, 8101, 8876, 28309, 3653, 32145, 24771, 6152, 20923, 32530, 13391, 1464, 12386, 1624, 31293, 1529, 20231, 606, 11860, 30922, 28165, 21698, 10637, 10328, 31962, 15524, 6744, 31606, 23458, 4444, 21196, 8053, 12545, 30072, 3594, 16198, 29449, 28366, 22351, 17605, 28128, 2974, 19069, 7747, 4598, 17594, 9276, 24830, 18200, 21136, 22984, 13597, 10066, 854, 23925, 9260, 16378, 30670, 8099, 7068, 2346, 29295, 15121, +14891, 26600, 18716, 31090, 23281, 14314, 20673, 8118, 9674, 23647, 27187, 17421, 28245, 12013, 26697, 20307, 30214, 15065, 10524, 11043, 25132, 11378, 2201, 1624, 27756, 103, 9723, 2056, 2449, 6251, 17177, 17340, 83, 3125, 15662, 23364, 17439, 3567, 31483, 27114, 27214, 25902, 11767, 22692, 5148, 5697, 10231, 2594, 20762, 20755, 13637, 13126, 32133, 15838, 14751, 27121, 15941, 24474, 29177, 18390, 30725, 13587, 2963, 30808, +16712, 18625, 21405, 1384, 22193, 20120, 28498, 16639, 13254, 7497, 6563, 18402, 13194, 16795, 20996, 1189, 4782, 1866, 14315, 4148, 17704, 29066, 31269, 878, 20773, 27679, 19268, 18730, 8498, 22231, 16771, 25210, 8089, 5408, 26594, 30282, 25528, 22324, 14153, 6014, 29822, 20717, 24417, 10248, 4744, 12645, 11437, 9526, 14511, 25753, 13674, 32216, 22051, 12176, 326, 10056, 7087, 19594, 28787, 15585, 9058, 12790, 8027, 17147, +18198, 1854, 14661, 10958, 24178, 28814, 16972, 21232, 16763, 8621, 31481, 21507, 21267, 10150, 31034, 3010, 3135, 11940, 2458, 25187, 24116, 2784, 2475, 31203, 22379, 31262, 14020, 31437, 11284, 22048, 15816, 29482, 23902, 30477, 7672, 15312, 26523, 24645, 3777, 10519, 498, 2490, 32026, 21765, 12640, 30292, 24776, 15776, 9465, 27234, 8195, 813, 30019, 10670, 32017, 19630, 9165, 13269, 18299, 20449, 2549, 1347, 17164, 26451, +31824, 24836, 8996, 25579, 16713, 12773, 3330, 17212, 15263, 2589, 6209, 27903, 113, 30985, 10911, 9578, 25452, 19106, 10392, 22703, 29777, 9641, 9565, 6174, 22910, 27864, 26623, 25460, 29211, 11019, 19143, 28267, 3088, 28139, 21078, 19801, 8144, 24409, 4245, 23407, 26998, 10455, 18543, 27111, 8672, 29454, 3922, 1356, 15793, 14314, 24059, 12802, 23955, 856, 18976, 14097, 28720, 12831, 6789, 25163, 23851, 25933, 20662, 26939, +21304, 8973, 13972, 29449, 614, 18218, 20088, 27612, 28673, 5863, 21955, 4577, 2550, 25877, 5934, 18343, 7423, 29993, 31145, 31378, 30850, 17353, 12708, 26802, 30184, 19497, 19198, 21267, 12662, 7092, 15438, 1199, 16065, 29411, 30648, 16679, 14861, 17968, 11523, 10766, 23832, 711, 15343, 26382, 26588, 21277, 11957, 1244, 18503, 10334, 32622, 16585, 27687, 12562, 10619, 25103, 32060, 29817, 13603, 11954, 4142, 29041, 13153, 20207, +25684, 11033, 4119, 7777, 29002, 15642, 18543, 20066, 16353, 1119, 13680, 10174, 22396, 25637, 11418, 8131, 3203, 11272, 24716, 30890, 23835, 2568, 23225, 23127, 32385, 4060, 2313, 3759, 334, 15467, 23967, 26018, 26500, 28086, 1028, 22734, 10960, 19571, 10032, 27314, 20690, 23712, 4720, 10319, 16581, 16138, 18450, 19784, 27410, 10399, 17906, 18477, 12967, 8364, 8836, 12584, 12424, 11150, 16344, 12758, 26617, 7543, 6009, 20349, +2861, 7037, 10316, 13821, 26608, 20348, 8367, 14531, 11293, 13087, 24850, 27874, 29225, 10532, 14891, 23868, 20931, 29, 9577, 1130, 8393, 18414, 13715, 20818, 29564, 30059, 808, 23413, 4834, 6817, 10994, 7695, 13854, 21310, 21516, 7695, 8891, 29884, 22226, 20184, 10203, 14308, 15290, 6661, 24840, 30181, 30529, 13004, 30211, 7338, 14134, 5836, 25752, 27849, 26654, 22548, 25140, 27463, 13193, 29974, 1512, 24188, 4901, 15367, +12730, 26418, 23062, 21621, 23534, 12520, 9037, 969, 26828, 24328, 7630, 18900, 21741, 5391, 31904, 19184, 12730, 13271, 25021, 5714, 8352, 18907, 28263, 725, 13602, 8688, 30699, 15115, 108, 2833, 30482, 12839, 29251, 20776, 1692, 20017, 528, 10730, 20986, 27356, 2290, 28617, 13488, 24031, 1240, 12625, 10448, 13970, 25896, 2701, 19685, 1480, 21608, 15180, 2205, 2443, 23868, 137, 17558, 23977, 2970, 15272, 4048, 32221, +3280, 5740, 19470, 3808, 16470, 7688, 31164, 18760, 3537, 11884, 10024, 4778, 24509, 20472, 18748, 17637, 23173, 5665, 19118, 12013, 20845, 21323, 14456, 11946, 21460, 32014, 3155, 24430, 14518, 7203, 23883, 17798, 12943, 10585, 21606, 29414, 18274, 20002, 15406, 21811, 31887, 25430, 26589, 23628, 13134, 12570, 8498, 3539, 18235, 27616, 15553, 6313, 16171, 30009, 18259, 4864, 29256, 21414, 29294, 11006, 28617, 20410, 28805, 8792, +30995, 17643, 5438, 16501, 4878, 20845, 5545, 3997, 13507, 32134, 27625, 26642, 11936, 3355, 30181, 30172, 30971, 12966, 3717, 14375, 10208, 21976, 19239, 6696, 10622, 15765, 17702, 6471, 3407, 13739, 15263, 1635, 31383, 20702, 18136, 3493, 8779, 23681, 7490, 22286, 23048, 2347, 16160, 2216, 5703, 13574, 32388, 3906, 26540, 3337, 18281, 3980, 25313, 4752, 10676, 3167, 20518, 28379, 9638, 23925, 9350, 24902, 25560, 7965, +12836, 10929, 11458, 21615, 1842, 18948, 11133, 24890, 21296, 27294, 27107, 26999, 8100, 26727, 30905, 1872, 30065, 16419, 5853, 22610, 21171, 16529, 25778, 8921, 12140, 2648, 79, 21491, 27550, 25639, 29456, 7618, 3800, 8147, 29233, 5643, 27095, 7599, 30533, 15623, 2125, 24872, 9854, 10225, 18832, 7992, 12097, 16129, 24411, 17950, 5971, 12814, 1712, 31749, 21736, 13852, 1630, 21815, 2575, 29180, 14686, 32032, 4031, 18487, +7411, 496, 24130, 1738, 8095, 21895, 17362, 10220, 14000, 27216, 20445, 64, 2440, 32543, 16193, 26851, 17725, 22164, 6898, 19437, 21146, 28634, 522, 22776, 17681, 3097, 19188, 32367, 2361, 23219, 18086, 9772, 23716, 9448, 11511, 31811, 31344, 28873, 9264, 12576, 23321, 29709, 12640, 25762, 29484, 28833, 19845, 14442, 18229, 26743, 1111, 6607, 22609, 1633, 29383, 7522, 4731, 15804, 7122, 7092, 6255, 25208, 16865, 29971, +1889, 28376, 29015, 465, 24481, 5511, 13041, 15034, 2452, 25681, 8028, 31937, 21746, 27874, 13611, 7207, 21849, 14722, 13815, 11691, 16356, 10430, 19213, 21087, 26234, 26335, 28179, 32490, 18776, 12276, 29693, 20665, 7884, 25940, 21130, 32365, 31451, 1403, 14632, 1136, 27084, 22660, 305, 16062, 17766, 13916, 23269, 6848, 28638, 4316, 18539, 12226, 14747, 4984, 545, 8213, 31320, 28725, 7935, 17328, 8233, 4861, 5225, 16118, +30801, 26355, 15715, 29485, 27758, 30347, 30621, 22074, 20240, 30926, 5368, 5238, 12074, 28637, 12086, 7944, 186, 30625, 20171, 14933, 2842, 20716, 23146, 1394, 16673, 31082, 18722, 24907, 3175, 23947, 8257, 1208, 17534, 23972, 30693, 12524, 21552, 28546, 1830, 9024, 26704, 7198, 14262, 6010, 3067, 26349, 13955, 3253, 24206, 1358, 18186, 27048, 22074, 8565, 28442, 5980, 6879, 14396, 30887, 10054, 5575, 6376, 11262, 23109, +30348, 9188, 2865, 19132, 4966, 4695, 28156, 31671, 11893, 9651, 4913, 14961, 3232, 18868, 18214, 27438, 20226, 3633, 21719, 9533, 12198, 17393, 15513, 19077, 31790, 13632, 29131, 4597, 20008, 7625, 27707, 17588, 16813, 30572, 3953, 21780, 2500, 32109, 20683, 14393, 8992, 25596, 29354, 12224, 11697, 14801, 6895, 31923, 18434, 28614, 8688, 30632, 13239, 24201, 16941, 12261, 5065, 13304, 16859, 25073, 20929, 11798, 9894, 4975, +9602, 13847, 26755, 12102, 13188, 14670, 26496, 22181, 7498, 23082, 1637, 19195, 5115, 8532, 18351, 23549, 4378, 27039, 21413, 17618, 18473, 5586, 29879, 23538, 18890, 13970, 15844, 7052, 25768, 25738, 12027, 2603, 6817, 6014, 14705, 20005, 20684, 8433, 9418, 28182, 31516, 11056, 14610, 3863, 19588, 193, 27413, 23967, 27232, 16058, 8817, 12937, 21645, 5928, 3708, 7767, 19899, 19552, 14819, 12899, 12522, 26846, 15502, 19339, +92, 30208, 6576, 20776, 5873, 15995, 16191, 4621, 27051, 30801, 8485, 13871, 30994, 3130, 5070, 25458, 19188, 13887, 5628, 8065, 19816, 9336, 15833, 6947, 28888, 30652, 19846, 8642, 24731, 2581, 27981, 24823, 21, 1789, 12832, 5894, 17784, 29023, 10516, 12067, 27056, 19001, 25939, 25282, 22131, 31009, 17972, 8551, 12129, 23600, 16617, 31945, 168, 32450, 6124, 29056, 30334, 25970, 4930, 22297, 28551, 143, 14353, 28572, +1933, 27185, 1699, 19717, 23440, 12215, 31785, 17728, 31216, 24956, 10242, 20579, 23197, 28214, 29130, 2558, 19047, 12979, 1735, 19215, 12661, 7859, 15504, 10228, 1062, 20434, 32525, 29613, 20578, 14110, 25418, 22511, 8527, 27117, 9460, 31967, 6564, 8477, 16927, 5012, 665, 27169, 25591, 23863, 22616, 21953, 26421, 8895, 2165, 28157, 28110, 14826, 3248, 10846, 25054, 4310, 31281, 24812, 1156, 19091, 6154, 26574, 8834, 14682, +20923, 18294, 13881, 27487, 26772, 30809, 32499, 27437, 25210, 25322, 18532, 15058, 14507, 12186, 23953, 16672, 7575, 19296, 31499, 10823, 30142, 23785, 15134, 28655, 15829, 16290, 14978, 21984, 10096, 23812, 3898, 31019, 9339, 17779, 25738, 3343, 15820, 25469, 30780, 8263, 18023, 16545, 23321, 32530, 28731, 14507, 16435, 3538, 1035, 15166, 14361, 31177, 6183, 29495, 27065, 22013, 13017, 9275, 11229, 23113, 320, 15127, 21364, 9659, +138, 14334, 13002, 15959, 7035, 11014, 24222, 25058, 27559, 14775, 24821, 23522, 29282, 8488, 27060, 30317, 23654, 8654, 28727, 29837, 5381, 23024, 19082, 18399, 32299, 30311, 8744, 32619, 12670, 30109, 9510, 12809, 11675, 22512, 28768, 18711, 759, 20222, 11001, 28318, 2229, 3054, 19073, 31512, 11542, 13365, 29061, 2428, 22019, 25020, 32266, 27401, 15276, 18580, 13032, 14808, 16124, 21776, 14659, 28794, 19117, 24170, 8835, 30793, +13914, 4835, 16736, 14673, 25057, 27737, 10224, 27287, 30792, 29297, 26031, 9566, 9894, 22324, 11995, 31914, 14577, 11493, 26547, 29853, 30073, 6811, 11893, 13429, 28587, 26553, 9456, 14937, 17955, 18291, 12962, 31869, 23127, 29698, 13775, 15416, 24667, 23999, 9935, 22691, 20528, 3198, 32258, 30422, 25523, 11485, 29568, 7332, 22978, 23347, 4417, 20283, 30158, 16311, 945, 25978, 10096, 10401, 8147, 28051, 28692, 21109, 27152, 19051, +18039, 8159, 1700, 9938, 32158, 11635, 32630, 19918, 14834, 32120, 17573, 7589, 10837, 14373, 14921, 1047, 4953, 19338, 21330, 2343, 2881, 22275, 28321, 12977, 32676, 3700, 8260, 28601, 24809, 2645, 14884, 10080, 10804, 16584, 20019, 10195, 28220, 19881, 30113, 10286, 19233, 14918, 17875, 30070, 29292, 28, 31117, 1477, 19366, 19679, 3820, 22248, 9187, 32142, 2457, 9095, 3074, 10718, 4928, 27884, 13363, 19813, 5196, 24167, +3629, 25215, 1594, 31849, 12328, 31708, 9367, 31561, 13858, 27242, 28863, 10382, 27270, 27212, 11859, 13869, 14124, 15680, 3349, 23311, 15054, 5806, 32406, 18128, 16524, 4567, 13244, 29887, 24380, 18441, 21287, 28009, 10888, 22881, 27091, 23217, 21821, 3690, 22010, 2912, 30933, 18106, 13294, 25435, 12550, 25154, 6536, 26674, 8066, 9885, 17217, 23120, 15692, 16856, 8480, 32216, 21423, 21725, 29336, 13035, 7398, 17855, 8276, 18286, +7968, 2599, 8735, 29790, 6290, 30746, 32702, 4455, 16084, 13228, 29890, 28634, 5614, 3659, 22541, 13680, 13544, 6990, 4032, 29236, 23846, 12513, 28685, 12501, 1470, 25253, 25536, 8868, 10340, 1045, 27154, 18308, 3644, 3122, 15330, 9934, 1100, 15264, 14389, 17184, 28493, 11512, 13050, 1339, 15171, 2823, 15020, 28715, 9814, 19052, 25184, 892, 31565, 21101, 13394, 267, 13586, 6162, 9135, 23926, 7207, 3522, 9466, 10852 +}; + +void +srnd(void) +{ + rp = 0; +} + +unsigned int +rnd(void) +{ + unsigned short r1, r2; + + r1 = r[rp]; + rp = (rp + 1) % 65536; + rp = r[rp]; + r2 = r[rp]; + rp = (rp + 1) % 65536; + return (int)(((unsigned int)r1 << 16) | ((unsigned int)r2)); +} diff --git a/src/bin/elementary/perf_test_01.c b/src/bin/elementary/perf_test_01.c new file mode 100644 index 0000000000..adb849fb80 --- /dev/null +++ b/src/bin/elementary/perf_test_01.c @@ -0,0 +1,45 @@ +#ifdef T2 +TPROT(01); +#endif +#ifdef T1 +{ TFUN(01), "Rectangles (Few)", 0.2 }, +#endif +#if !defined(T1) && !defined(T2) +# include "perf.h" +static Evas_Object *objs[NUM_FEW]; + +TST(01, init) (Evas *e) { + Evas_Object *o; + int i; + + srnd(); + for (i = 0; i < NUM_FEW; i++) + { + objs[i] = o = evas_object_rectangle_add(e); + cleanup_add(o); + evas_object_color_set + (o, rnd() & 0x7f, rnd() & 0x7f, rnd() & 0x7f, 0x80); + evas_object_pass_events_set(o, EINA_TRUE); + evas_object_show(o); + } +} + +TST(01, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h) { + int i; + Evas_Coord x, y, w, h, w0, h0; + + for (i = 0; i < NUM_FEW; i++) + { + Evas_Object *o = objs[i]; + w0 = 120; + h0 = 120; + w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2); + h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2); + x = (win_w / 2) - (w / 2); + x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2); + y = (win_h / 2) - (h / 2); + y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2); + evas_object_geometry_set(o, x, y, w, h); + } +} +#endif diff --git a/src/bin/elementary/perf_test_02.c b/src/bin/elementary/perf_test_02.c new file mode 100644 index 0000000000..2683cd116d --- /dev/null +++ b/src/bin/elementary/perf_test_02.c @@ -0,0 +1,45 @@ +#ifdef T2 +TPROT(02); +#endif +#ifdef T1 +{ TFUN(02), "Rectangles (Few) - Solid", 0.4 }, +#endif +#if !defined(T1) && !defined(T2) +# include "perf.h" +static Evas_Object *objs[NUM_FEW]; + +TST(02, init) (Evas *e) { + Evas_Object *o; + int i; + + srnd(); + for (i = 0; i < NUM_FEW; i++) + { + objs[i] = o = evas_object_rectangle_add(e); + cleanup_add(o); + evas_object_color_set + (o, rnd() & 0xff, rnd() & 0xff, rnd() & 0xff, 0xff); + evas_object_pass_events_set(o, EINA_TRUE); + evas_object_show(o); + } +} + +TST(02, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h) { + int i; + Evas_Coord x, y, w, h, w0, h0; + + for (i = 0; i < NUM_FEW; i++) + { + Evas_Object *o = objs[i]; + w0 = 120; + h0 = 120; + w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2); + h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2); + x = (win_w / 2) - (w / 2); + x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2); + y = (win_h / 2) - (h / 2); + y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2); + evas_object_geometry_set(o, x, y, w, h); + } +} +#endif diff --git a/src/bin/elementary/perf_test_03.c b/src/bin/elementary/perf_test_03.c new file mode 100644 index 0000000000..065bd6d984 --- /dev/null +++ b/src/bin/elementary/perf_test_03.c @@ -0,0 +1,45 @@ +#ifdef T2 +TPROT(03); +#endif +#ifdef T1 +{ TFUN(03), "Rectangles", 1.0 }, +#endif +#if !defined(T1) && !defined(T2) +# include "perf.h" +static Evas_Object *objs[NUM]; + +TST(03, init) (Evas *e) { + Evas_Object *o; + int i; + + srnd(); + for (i = 0; i < NUM; i++) + { + objs[i] = o = evas_object_rectangle_add(e); + cleanup_add(o); + evas_object_color_set + (o, rnd() & 0x7f, rnd() & 0x7f, rnd() & 0x7f, 0x80); + evas_object_pass_events_set(o, EINA_TRUE); + evas_object_show(o); + } +} + +TST(03, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h) { + int i; + Evas_Coord x, y, w, h, w0, h0; + + for (i = 0; i < NUM; i++) + { + Evas_Object *o = objs[i]; + w0 = 120; + h0 = 120; + w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2); + h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2); + x = (win_w / 2) - (w / 2); + x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2); + y = (win_h / 2) - (h / 2); + y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2); + evas_object_geometry_set(o, x, y, w, h); + } +} +#endif diff --git a/src/bin/elementary/perf_test_04.c b/src/bin/elementary/perf_test_04.c new file mode 100644 index 0000000000..17aae98342 --- /dev/null +++ b/src/bin/elementary/perf_test_04.c @@ -0,0 +1,45 @@ +#ifdef T2 +TPROT(04); +#endif +#ifdef T1 +{ TFUN(04), "Rectangles - Solid", 2.0 }, +#endif +#if !defined(T1) && !defined(T2) +# include "perf.h" +static Evas_Object *objs[NUM]; + +TST(04, init) (Evas *e) { + Evas_Object *o; + int i; + + srnd(); + for (i = 0; i < NUM; i++) + { + objs[i] = o = evas_object_rectangle_add(e); + cleanup_add(o); + evas_object_color_set + (o, rnd() & 0xff, rnd() & 0xff, rnd() & 0xff, 0xff); + evas_object_pass_events_set(o, EINA_TRUE); + evas_object_show(o); + } +} + +TST(04, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h) { + int i; + Evas_Coord x, y, w, h, w0, h0; + + for (i = 0; i < NUM; i++) + { + Evas_Object *o = objs[i]; + w0 = 120; + h0 = 120; + w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2); + h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2); + x = (win_w / 2) - (w / 2); + x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2); + y = (win_h / 2) - (h / 2); + y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2); + evas_object_geometry_set(o, x, y, w, h); + } +} +#endif diff --git a/src/bin/elementary/perf_test_05.c b/src/bin/elementary/perf_test_05.c new file mode 100644 index 0000000000..64618ae608 --- /dev/null +++ b/src/bin/elementary/perf_test_05.c @@ -0,0 +1,45 @@ +#ifdef T2 +TPROT(05); +#endif +#ifdef T1 +{ TFUN(05), "Rectangles (Many)", 1.0 }, +#endif +#if !defined(T1) && !defined(T2) +# include "perf.h" +static Evas_Object *objs[NUM_MANY]; + +TST(05, init) (Evas *e) { + Evas_Object *o; + int i; + + srnd(); + for (i = 0; i < NUM_MANY; i++) + { + objs[i] = o = evas_object_rectangle_add(e); + cleanup_add(o); + evas_object_color_set + (o, rnd() & 0x7f, rnd() & 0x7f, rnd() & 0x7f, 0x80); + evas_object_pass_events_set(o, EINA_TRUE); + evas_object_show(o); + } +} + +TST(05, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h) { + int i; + Evas_Coord x, y, w, h, w0, h0; + + for (i = 0; i < NUM_MANY; i++) + { + Evas_Object *o = objs[i]; + w0 = 120; + h0 = 120; + w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2); + h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2); + x = (win_w / 2) - (w / 2); + x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2); + y = (win_h / 2) - (h / 2); + y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2); + evas_object_geometry_set(o, x, y, w, h); + } +} +#endif diff --git a/src/bin/elementary/perf_test_06.c b/src/bin/elementary/perf_test_06.c new file mode 100644 index 0000000000..952a4bced2 --- /dev/null +++ b/src/bin/elementary/perf_test_06.c @@ -0,0 +1,45 @@ +#ifdef T2 +TPROT(06); +#endif +#ifdef T1 +{ TFUN(06), "Rectangles (Many) - Solid", 2.0 }, +#endif +#if !defined(T1) && !defined(T2) +# include "perf.h" +static Evas_Object *objs[NUM_MANY]; + +TST(06, init) (Evas *e) { + Evas_Object *o; + int i; + + srnd(); + for (i = 0; i < NUM_MANY; i++) + { + objs[i] = o = evas_object_rectangle_add(e); + cleanup_add(o); + evas_object_color_set + (o, rnd() & 0xff, rnd() & 0xff, rnd() & 0xff, 0xff); + evas_object_pass_events_set(o, EINA_TRUE); + evas_object_show(o); + } +} + +TST(06, tick) (Evas *e EINA_UNUSED, double f, Evas_Coord win_w, Evas_Coord win_h) { + int i; + Evas_Coord x, y, w, h, w0, h0; + + for (i = 0; i < NUM_MANY; i++) + { + Evas_Object *o = objs[i]; + w0 = 120; + h0 = 120; + w = 5 + ((1.0 + cos((double)((f * 30.0) + (i * 10)))) * w0 * 2); + h = 5 + ((1.0 + sin((double)((f * 40.0) + (i * 19)))) * h0 * 2); + x = (win_w / 2) - (w / 2); + x += sin((double)((f * 50.0) + (i * 13))) * (w0 / 2); + y = (win_h / 2) - (h / 2); + y += cos((double)((f * 45.0) + (i * 28))) * (h0 / 2); + evas_object_geometry_set(o, x, y, w, h); + } +} +#endif From bbd70d1c201f69451bac592e6d6f304cde1adf39 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 22 Nov 2018 16:59:47 +0000 Subject: [PATCH 34/86] eina+evas cpu - add theoretical SVE support SVE is a new-ish ARM vector instruction set like neon... but with wider vectors (and variable vector sizes). this adds the flags and hwcaps checks. --- src/lib/eina/eina_cpu.c | 17 +++++++--- src/lib/eina/eina_cpu.h | 19 ++++++----- src/lib/evas/common/evas_cpu.c | 38 +++++++++++++++++++++- src/lib/evas/include/evas_common_private.h | 3 +- 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/lib/eina/eina_cpu.c b/src/lib/eina/eina_cpu.c index f12bec0fa8..45b3b9295d 100644 --- a/src/lib/eina/eina_cpu.c +++ b/src/lib/eina/eina_cpu.c @@ -49,7 +49,7 @@ #include "eina_log.h" #include "eina_cpu.h" -#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) +#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && (defined(__arm__) || defined(__aarch64__)) && defined(__linux__) # include # include #endif @@ -126,7 +126,7 @@ void _x86_simd(Eina_Cpu_Features *features) } #endif -#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) +#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && (defined(__arm__) || defined(__aarch64__)) && defined(__linux__) static void _arm_cpu_features(Eina_Cpu_Features *features) { @@ -134,8 +134,15 @@ _arm_cpu_features(Eina_Cpu_Features *features) aux = getauxval(AT_HWCAP); - if (aux & HWCAP_NEON) - *features |= EINA_CPU_NEON; +# if defined(__aarch64__) + *features |= EINA_CPU_NEON; +# endif +# ifdef HWCAP_NEON + if (aux & HWCAP_NEON) *features |= EINA_CPU_NEON; +# endif +# ifdef HWCAP_SVE + if (aux & HWCAP_SVE) *features |= EINA_CPU_SVE; +# endif } #endif @@ -157,7 +164,7 @@ eina_cpu_init(void) { #if defined(__i386__) || defined(__x86_64__) _x86_simd(&eina_cpu_features); -#elif defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) +#elif defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && (defined(__arm__) || defined(__aarch64__)) && defined(__linux__) _arm_cpu_features(&eina_cpu_features); #endif diff --git a/src/lib/eina/eina_cpu.h b/src/lib/eina/eina_cpu.h index 6235b7b939..6426017be6 100644 --- a/src/lib/eina/eina_cpu.h +++ b/src/lib/eina/eina_cpu.h @@ -45,17 +45,18 @@ */ typedef enum _Eina_Cpu_Features { - EINA_CPU_MMX = 0x00000001, - EINA_CPU_SSE = 0x00000002, - EINA_CPU_SSE2 = 0x00000004, - EINA_CPU_SSE3 = 0x00000008, + EINA_CPU_MMX = 0x00000001, + EINA_CPU_SSE = 0x00000002, + EINA_CPU_SSE2 = 0x00000004, + EINA_CPU_SSE3 = 0x00000008, /* TODO 3DNow! */ EINA_CPU_ALTIVEC = 0x00000010, - EINA_CPU_VIS = 0x00000020, - EINA_CPU_NEON = 0x00000040, - EINA_CPU_SSSE3 = 0x00000080, - EINA_CPU_SSE41 = 0x00000100, - EINA_CPU_SSE42 = 0x00000200 + EINA_CPU_VIS = 0x00000020, + EINA_CPU_NEON = 0x00000040, + EINA_CPU_SSSE3 = 0x00000080, + EINA_CPU_SSE41 = 0x00000100, + EINA_CPU_SSE42 = 0x00000200, + EINA_CPU_SVE = 0x00000400 } Eina_Cpu_Features; /** diff --git a/src/lib/evas/common/evas_cpu.c b/src/lib/evas/common/evas_cpu.c index 5551775733..d9215e1140 100644 --- a/src/lib/evas/common/evas_cpu.c +++ b/src/lib/evas/common/evas_cpu.c @@ -7,7 +7,6 @@ static int cpu_feature_mask = 0; - #ifdef BUILD_ALTIVEC # ifdef __POWERPC__ # ifdef __VEC__ @@ -26,6 +25,12 @@ static int cpu_feature_mask = 0; # endif #endif +#if defined(__aarch64__) +# ifdef BUILD_NEON +# define NEED_FEATURE_TEST +# endif +#endif + #ifdef NEED_FEATURE_TEST # ifdef HAVE_SIGLONGJMP # include @@ -70,6 +75,7 @@ evas_common_cpu_neon_test(void) # ifdef BUILD_NEON # ifdef BUILD_NEON_INTRINSICS volatile uint32x4_t temp = vdupq_n_u32(0x1); + vaddq_u32(temp, temp); # else asm volatile ( ".fpu neon \n\t" @@ -84,6 +90,15 @@ evas_common_cpu_neon_test(void) //#endif } +void +evas_common_cpu_sve_test(void) +{ +#if defined(__aarch64__) + volatile int result = 123; + asm("movz %w[res], #10" : [res] "=r" (result)); +#endif +} + void evas_common_cpu_vis_test(void) { @@ -164,6 +179,10 @@ evas_common_cpu_feature_test(void (*feature)(void)) # ifdef BUILD_NEON if (feature == evas_common_cpu_neon_test) return _cpu_check(EINA_CPU_NEON); +# endif +# if defined(__aarch64__) + if (feature == evas_common_cpu_sve_test) + return _cpu_check(EINA_CPU_SVE); # endif return 0; # endif @@ -249,6 +268,23 @@ evas_common_cpu_init(void) else cpu_feature_mask |= CPU_FEATURE_NEON; #endif + +#if defined(__aarch64__) + if (getenv("EVAS_CPU_NO_SVE")) + cpu_feature_mask &= ~CPU_FEATURE_SVE; + else + { +# if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) +#error "xx" + cpu_feature_mask |= CPU_FEATURE_SVE * + !!(eina_cpu_features_get() & EINA_CPU_SVE); +# else + cpu_feature_mask |= CPU_FEATURE_SVE * + evas_common_cpu_feature_test(evas_common_cpu_sve_test); + evas_common_cpu_end_opt(); +# endif + } +#endif } int diff --git a/src/lib/evas/include/evas_common_private.h b/src/lib/evas/include/evas_common_private.h index d0354347fc..7fe19b7b9a 100644 --- a/src/lib/evas/include/evas_common_private.h +++ b/src/lib/evas/include/evas_common_private.h @@ -503,7 +503,8 @@ typedef enum _CPU_Features CPU_FEATURE_VIS = (1 << 4), CPU_FEATURE_VIS2 = (1 << 5), CPU_FEATURE_NEON = (1 << 6), - CPU_FEATURE_SSE3 = (1 << 7) + CPU_FEATURE_SSE3 = (1 << 7), + CPU_FEATURE_SVE = (1 << 8) } CPU_Features; /*****************************************************************************/ From 66df2617bc7496cfb60b10b46fc64c930d87d8cb Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Wed, 28 Nov 2018 12:39:45 +0000 Subject: [PATCH 35/86] efl ui text - check if string exists beofre using it... don't segv. --- src/lib/elementary/efl_ui_text.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_text.c b/src/lib/elementary/efl_ui_text.c index 9c0d292356..8cfed9a062 100644 --- a/src/lib/elementary/efl_ui_text.c +++ b/src/lib/elementary/efl_ui_text.c @@ -2100,7 +2100,7 @@ _update_text_theme(Eo *obj, Efl_Ui_Text_Data *sd) // color colorcode = edje_object_data_get(wd->resize_obj, "guide.style.color"); - if (_format_color_parse(colorcode, strlen(colorcode), &r, &g, &b, &a)) + if (colorcode && _format_color_parse(colorcode, strlen(colorcode), &r, &g, &b, &a)) { efl_text_normal_color_set(sd->text_guide_obj, r, g, b, a); } From e3caf6ef84fd8d5d33aac9f57145b3ee9e070aac Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 3 Dec 2018 11:43:53 +0000 Subject: [PATCH 36/86] elm_config: repair configs Summary: in eec7bc458eee333fd7237a3bd43e8c2c884f21ca the epoch offset was edited, which seems to be wrong, as this caused every single config to be deleted. This also updates the configs in the elementry base configs as they have been forgotten. This brings back the ability to edit the config in elementary_config. Reviewers: segfaultxavi, devilhorns, ManMower, raster Reviewed By: raster Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7403 --- data/elementary/config/default/base.src.in | 2 +- data/elementary/config/mobile/base.src.in | 2 +- data/elementary/config/standard/base.src.in | 2 +- src/lib/elementary/elm_priv.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/elementary/config/default/base.src.in b/data/elementary/config/default/base.src.in index 1bbbf62bf2..ac33b78c6c 100644 --- a/data/elementary/config/default/base.src.in +++ b/data/elementary/config/default/base.src.in @@ -1,5 +1,5 @@ group "Elm_Config" struct { - value "config_version" int: 131090; + value "config_version" int: 131091; value "entry_select_allow" uchar: 1; value "engine" string: ""; value "vsync" uchar: 0; diff --git a/data/elementary/config/mobile/base.src.in b/data/elementary/config/mobile/base.src.in index a2526bc43f..701fbdbfe6 100644 --- a/data/elementary/config/mobile/base.src.in +++ b/data/elementary/config/mobile/base.src.in @@ -1,5 +1,5 @@ group "Elm_Config" struct { - value "config_version" int: 131090; + value "config_version" int: 131091; value "entry_select_allow" uchar: 1; value "engine" string: ""; value "vsync" uchar: 0; diff --git a/data/elementary/config/standard/base.src.in b/data/elementary/config/standard/base.src.in index 4a7107ad07..9ddfe6ea9a 100644 --- a/data/elementary/config/standard/base.src.in +++ b/data/elementary/config/standard/base.src.in @@ -1,5 +1,5 @@ group "Elm_Config" struct { - value "config_version" int: 131090; + value "config_version" int: 131091; value "entry_select_allow" uchar: 1; value "engine" string: ""; value "vsync" uchar: 0; diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h index 6b181e8ffb..dbc3511ac9 100644 --- a/src/lib/elementary/elm_priv.h +++ b/src/lib/elementary/elm_priv.h @@ -167,7 +167,7 @@ struct _Efl_Ui_Theme_Data * to be put in */ # define ELM_CONFIG_FILE_GENERATION 0x0013 -# define ELM_CONFIG_VERSION_EPOCH_OFFSET 17 +# define ELM_CONFIG_VERSION_EPOCH_OFFSET 16 # define ELM_CONFIG_VERSION ((ELM_CONFIG_EPOCH << ELM_CONFIG_VERSION_EPOCH_OFFSET) | \ ELM_CONFIG_FILE_GENERATION) /* NB: profile configuration files (.src) must have their From 8c32f8bb22e401ad919d83cf95a2e55a9a1d3351 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 3 Dec 2018 11:46:31 +0000 Subject: [PATCH 37/86] elm - fix config version bump correctly bump version right and fix eec7bc458eee333fd7237a3bd43e8c2c884f21ca properly. --- data/elementary/config/default/base.src.in | 2 +- data/elementary/config/mobile/base.src.in | 2 +- data/elementary/config/standard/base.src.in | 2 +- src/lib/elementary/elm_priv.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/elementary/config/default/base.src.in b/data/elementary/config/default/base.src.in index ac33b78c6c..20670544eb 100644 --- a/data/elementary/config/default/base.src.in +++ b/data/elementary/config/default/base.src.in @@ -1,5 +1,5 @@ group "Elm_Config" struct { - value "config_version" int: 131091; + value "config_version" int: 131092; value "entry_select_allow" uchar: 1; value "engine" string: ""; value "vsync" uchar: 0; diff --git a/data/elementary/config/mobile/base.src.in b/data/elementary/config/mobile/base.src.in index 701fbdbfe6..00de42f095 100644 --- a/data/elementary/config/mobile/base.src.in +++ b/data/elementary/config/mobile/base.src.in @@ -1,5 +1,5 @@ group "Elm_Config" struct { - value "config_version" int: 131091; + value "config_version" int: 131092; value "entry_select_allow" uchar: 1; value "engine" string: ""; value "vsync" uchar: 0; diff --git a/data/elementary/config/standard/base.src.in b/data/elementary/config/standard/base.src.in index 9ddfe6ea9a..bf9aaf4c24 100644 --- a/data/elementary/config/standard/base.src.in +++ b/data/elementary/config/standard/base.src.in @@ -1,5 +1,5 @@ group "Elm_Config" struct { - value "config_version" int: 131091; + value "config_version" int: 131092; value "entry_select_allow" uchar: 1; value "engine" string: ""; value "vsync" uchar: 0; diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h index dbc3511ac9..e97538e58a 100644 --- a/src/lib/elementary/elm_priv.h +++ b/src/lib/elementary/elm_priv.h @@ -166,7 +166,7 @@ struct _Efl_Ui_Theme_Data * the users config doesn't need to be wiped - simply new values need * to be put in */ -# define ELM_CONFIG_FILE_GENERATION 0x0013 +# define ELM_CONFIG_FILE_GENERATION 0x0014 # define ELM_CONFIG_VERSION_EPOCH_OFFSET 16 # define ELM_CONFIG_VERSION ((ELM_CONFIG_EPOCH << ELM_CONFIG_VERSION_EPOCH_OFFSET) | \ ELM_CONFIG_FILE_GENERATION) From fc7acd0e3830bb09ab6f76e21ed3a54b38364a95 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 3 Dec 2018 15:50:02 +0000 Subject: [PATCH 38/86] ecore evas - buffer - init ecore event evas as many times as shutdown so ecore_event_evas_shutdown() was getting called much more than ecore_event_evas_init() - missing an init in the ee + img obj creator in ecore evas. this adds it in and ensures in allocation failures we dont over-init or shutdown too. @fix --- src/lib/ecore_evas/ecore_evas_buffer.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c index 173f33289f..8fea11a9f3 100644 --- a/src/lib/ecore_evas/ecore_evas_buffer.c +++ b/src/lib/ecore_evas/ecore_evas_buffer.c @@ -20,6 +20,7 @@ _ecore_evas_buffer_free(Ecore_Evas *ee) { Ecore_Evas_Engine_Buffer_Data *bdata = ee->engine.data; + if (!bdata) return; if (bdata->image) { Ecore_Evas *ee2; @@ -31,11 +32,11 @@ _ecore_evas_buffer_free(Ecore_Evas *ee) } else { - bdata->free_func(bdata->data, - bdata->pixels); + bdata->free_func(bdata->data, bdata->pixels); } free(bdata); + ee->engine.data = NULL; ecore_event_evas_shutdown(); } @@ -895,6 +896,8 @@ ecore_evas_buffer_new(int w, int h) ee = ecore_evas_buffer_allocfunc_new (w, h, _ecore_evas_buffer_pix_alloc, _ecore_evas_buffer_pix_free, NULL); + if (!ee) ecore_event_evas_shutdown(); + ecore_evas_done(ee, EINA_TRUE); return ee; @@ -1084,5 +1087,6 @@ ecore_evas_object_image_new(Ecore_Evas *ee_target) } _ecore_evas_subregister(ee_target, ee); + ecore_event_evas_init(); return o; } From 3b162458ffb72e0bd484d4fa0445e78dd634fb56 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Mon, 3 Dec 2018 17:55:07 +0100 Subject: [PATCH 39/86] autotools: include eolian_aux eo files in release --- src/Makefile_Eolian.am | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am index aa2f2344e8..6d607ef950 100644 --- a/src/Makefile_Eolian.am +++ b/src/Makefile_Eolian.am @@ -102,7 +102,10 @@ tests/eolian/data/struct.eo \ tests/eolian/data/typedef.eo \ tests/eolian/data/var.eo \ tests/eolian/data/function_types.eot \ -tests/eolian/data/import_types.eot +tests/eolian/data/import_types.eot \ +tests/eolian/data_aux/aux_a.eo \ +tests/eolian/data_aux/aux_b.eo \ +tests/eolian/data_aux/aux_c.eo if EFL_ENABLE_TESTS check_PROGRAMS += \ From 907ee1a497417874c243a7a99e3ed4e8c3a234cd Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 3 Dec 2018 18:49:47 +0100 Subject: [PATCH 40/86] meson: use eolian_gen with -S this ensures that eolian does not parse installed .eo files Differential Revision: https://phab.enlightenment.org/D7405 --- src/bin/eolian/meson.build | 7 ++++++- src/lib/ecore/meson.build | 6 +++--- src/lib/ecore_audio/meson.build | 2 +- src/lib/ecore_con/meson.build | 8 ++++---- src/lib/ector/cairo/meson.build | 2 +- src/lib/ector/gl/meson.build | 2 +- src/lib/ector/meson.build | 4 ++-- src/lib/ector/software/meson.build | 2 +- src/lib/edje/meson.build | 8 ++++---- src/lib/efl/interfaces/meson.build | 8 ++++---- src/lib/eio/meson.build | 2 +- src/lib/eldbus/meson.build | 4 ++-- src/lib/elementary/meson.build | 10 +++++----- src/lib/emotion/meson.build | 4 ++-- src/lib/eo/meson.build | 2 +- src/lib/evas/canvas/meson.build | 8 ++++---- src/lib/evas/gesture/meson.build | 10 +++++----- src/lib/evas/include/meson.build | 2 +- src/lib/evas/meson.build | 8 ++++---- src/modules/elementary/web/none/meson.build | 2 +- src/modules/evas/engines/gl_generic/meson.build | 2 +- src/modules/evas/engines/software_generic/meson.build | 2 +- src/tests/efl_mono/meson.build | 2 +- src/tests/eina_cxx/meson.build | 2 +- src/tests/elementary/meson.build | 2 +- src/tests/eolian/meson.build | 4 ++-- src/tests/eolian_cxx/meson.build | 2 +- 27 files changed, 61 insertions(+), 56 deletions(-) diff --git a/src/bin/eolian/meson.build b/src/bin/eolian/meson.build index 2104676f3e..0714fbea85 100644 --- a/src/bin/eolian/meson.build +++ b/src/bin/eolian/meson.build @@ -11,9 +11,14 @@ eolian_gen_src = [ 'docs.h' ] -eolian_gen = executable('eolian_gen', +eolian_gen_bin = executable('eolian_gen', eolian_gen_src, dependencies: eolian, install: true, c_args : package_c_args, ) + +eolian_gen_path = eolian_gen_bin.full_path() + + +eolian_gen = [eolian_gen_bin, '-S'] diff --git a/src/lib/ecore/meson.build b/src/lib/ecore/meson.build index cfa6609666..3757bad5f3 100644 --- a/src/lib/ecore/meson.build +++ b/src/lib/ecore/meson.build @@ -16,7 +16,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -27,7 +27,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -85,7 +85,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/ecore_audio/meson.build b/src/lib/ecore_audio/meson.build index 6fdd5a30b4..b73d53d81b 100644 --- a/src/lib/ecore_audio/meson.build +++ b/src/lib/ecore_audio/meson.build @@ -19,7 +19,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/ecore_con/meson.build b/src/lib/ecore_con/meson.build index f945ccd0d4..d1375e246e 100644 --- a/src/lib/ecore_con/meson.build +++ b/src/lib/ecore_con/meson.build @@ -31,7 +31,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -42,7 +42,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -99,7 +99,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -120,7 +120,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/lib/ector/cairo/meson.build b/src/lib/ector/cairo/meson.build index e9ebc60708..123ea90d1f 100644 --- a/src/lib/ector/cairo/meson.build +++ b/src/lib/ector/cairo/meson.build @@ -24,7 +24,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : false, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/ector/gl/meson.build b/src/lib/ector/gl/meson.build index 11bb8cfc6a..071e98eaee 100644 --- a/src/lib/ector/gl/meson.build +++ b/src/lib/ector/gl/meson.build @@ -27,7 +27,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : false, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/ector/meson.build b/src/lib/ector/meson.build index 874d16a21c..5b86466873 100644 --- a/src/lib/ector/meson.build +++ b/src/lib/ector/meson.build @@ -39,7 +39,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : false, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -66,7 +66,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : false, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/lib/ector/software/meson.build b/src/lib/ector/software/meson.build index cef9c957c8..1484553374 100644 --- a/src/lib/ector/software/meson.build +++ b/src/lib/ector/software/meson.build @@ -27,7 +27,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : false, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/edje/meson.build b/src/lib/edje/meson.build index bd2374637b..393383fbde 100644 --- a/src/lib/edje/meson.build +++ b/src/lib/edje/meson.build @@ -46,7 +46,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -57,7 +57,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -74,7 +74,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) @@ -90,7 +90,7 @@ foreach eo_file : priv_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-gchd', '@INPUT@']) diff --git a/src/lib/efl/interfaces/meson.build b/src/lib/efl/interfaces/meson.build index fbcc31bcb1..bcd9b22bba 100644 --- a/src/lib/efl/interfaces/meson.build +++ b/src/lib/efl/interfaces/meson.build @@ -24,7 +24,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'interfaces'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -35,7 +35,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : join_paths(dir_package_include, 'interfaces'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -113,7 +113,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'interfaces'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -137,7 +137,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'interfaces'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/lib/eio/meson.build b/src/lib/eio/meson.build index c3410d752e..40f0def8f3 100644 --- a/src/lib/eio/meson.build +++ b/src/lib/eio/meson.build @@ -13,7 +13,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths( meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), diff --git a/src/lib/eldbus/meson.build b/src/lib/eldbus/meson.build index fcb452c8a3..1fd852fcb3 100644 --- a/src/lib/eldbus/meson.build +++ b/src/lib/eldbus/meson.build @@ -18,7 +18,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -37,7 +37,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/lib/elementary/meson.build b/src/lib/elementary/meson.build index e2bed0773c..ac69f99905 100644 --- a/src/lib/elementary/meson.build +++ b/src/lib/elementary/meson.build @@ -120,7 +120,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), @@ -289,7 +289,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -300,7 +300,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -322,7 +322,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) @@ -346,7 +346,7 @@ foreach eo_file : priv_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/emotion/meson.build b/src/lib/emotion/meson.build index 1caea9dcee..ad25dc65a6 100644 --- a/src/lib/emotion/meson.build +++ b/src/lib/emotion/meson.build @@ -12,7 +12,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -23,7 +23,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) diff --git a/src/lib/eo/meson.build b/src/lib/eo/meson.build index 34f60aac76..6647096d6c 100644 --- a/src/lib/eo/meson.build +++ b/src/lib/eo/meson.build @@ -35,7 +35,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/evas/canvas/meson.build b/src/lib/evas/canvas/meson.build index 034483bcb6..c7e8810f63 100644 --- a/src/lib/evas/canvas/meson.build +++ b/src/lib/evas/canvas/meson.build @@ -17,7 +17,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'canvas'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), @@ -90,7 +90,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'canvas'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -101,7 +101,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : join_paths(dir_package_include, 'canvas'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -122,7 +122,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'canvas'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/lib/evas/gesture/meson.build b/src/lib/evas/gesture/meson.build index 5a341f5bff..86927504ac 100644 --- a/src/lib/evas/gesture/meson.build +++ b/src/lib/evas/gesture/meson.build @@ -16,7 +16,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'gesture'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -27,7 +27,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : join_paths(dir_package_include, 'gesture'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -47,7 +47,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : false, install_dir : join_paths(dir_package_include, 'gesture'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -58,7 +58,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.legacy.d', install : false, install_dir : join_paths(dir_package_include, 'gesture'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -79,7 +79,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : join_paths(dir_package_include, 'gesture'), - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/lib/evas/include/meson.build b/src/lib/evas/include/meson.build index a833f67b40..b9f90fce0f 100644 --- a/src/lib/evas/include/meson.build +++ b/src/lib/evas/include/meson.build @@ -10,7 +10,7 @@ foreach eo_file : pub_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/lib/evas/meson.build b/src/lib/evas/meson.build index f9f038dc93..10347d3e5a 100644 --- a/src/lib/evas/meson.build +++ b/src/lib/evas/meson.build @@ -30,7 +30,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -41,7 +41,7 @@ foreach eo_file : pub_legacy_eo_files depfile : eo_file + '.legacy.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'l:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.legacy.d'), '-gld', '@INPUT@']) @@ -58,7 +58,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -77,7 +77,7 @@ foreach eo_file : pub_eo_types_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), '-ghd', '@INPUT@']) diff --git a/src/modules/elementary/web/none/meson.build b/src/modules/elementary/web/none/meson.build index 18a5aa4187..e71a16837d 100644 --- a/src/modules/elementary/web/none/meson.build +++ b/src/modules/elementary/web/none/meson.build @@ -10,7 +10,7 @@ foreach eo_file : pub_eo_files depfile : eo_file + '.d', install : true, install_dir : dir_package_include, - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/modules/evas/engines/gl_generic/meson.build b/src/modules/evas/engines/gl_generic/meson.build index 5d29b4e020..cbc467b7ab 100644 --- a/src/modules/evas/engines/gl_generic/meson.build +++ b/src/modules/evas/engines/gl_generic/meson.build @@ -25,7 +25,7 @@ foreach eo_file : pub_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/modules/evas/engines/software_generic/meson.build b/src/modules/evas/engines/software_generic/meson.build index fe3ef78ee8..ef499821e8 100644 --- a/src/modules/evas/engines/software_generic/meson.build +++ b/src/modules/evas/engines/software_generic/meson.build @@ -21,7 +21,7 @@ foreach eo_file : pub_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/tests/efl_mono/meson.build b/src/tests/efl_mono/meson.build index 975bb868e4..f901152b54 100644 --- a/src/tests/efl_mono/meson.build +++ b/src/tests/efl_mono/meson.build @@ -6,7 +6,7 @@ foreach eo_file : eo_files eo_file_targets += custom_target('eolian_gen_' + eo_file, input : eo_file, output : [eo_file + '.h'], - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-gch', '@INPUT@']) diff --git a/src/tests/eina_cxx/meson.build b/src/tests/eina_cxx/meson.build index 07470a2e0d..6caee80f30 100644 --- a/src/tests/eina_cxx/meson.build +++ b/src/tests/eina_cxx/meson.build @@ -27,7 +27,7 @@ foreach eo_file : pub_eo_files priv_eo_file_target += custom_target('eolian_gen_eina_cxx_' + eo_file, input : eo_file, output : [eo_file + '.h'], - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-gch', '@INPUT@']) diff --git a/src/tests/elementary/meson.build b/src/tests/elementary/meson.build index 405278d169..823e93e1cf 100644 --- a/src/tests/elementary/meson.build +++ b/src/tests/elementary/meson.build @@ -9,7 +9,7 @@ foreach eo_file : priv_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), diff --git a/src/tests/eolian/meson.build b/src/tests/eolian/meson.build index a453974cc0..a9f569dfd1 100644 --- a/src/tests/eolian/meson.build +++ b/src/tests/eolian/meson.build @@ -18,7 +18,7 @@ foreach eo_file : priv_eo_files input : eo_file, output : [eo_file + '.h'], depfile : eo_file + '.d', - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'), @@ -29,7 +29,7 @@ eolian_suite = executable('eolian_suite', eolian_test_src, priv_eo_file_target, dependencies: [eolian, check, eo], c_args : [ - '-DEOLIAN_GEN="'+eolian_gen.full_path()+'"', + '-DEOLIAN_GEN="'+eolian_gen_path+'"', '-DTESTS_BUILD_DIR="'+meson.current_build_dir()+'"', '-DEO_SRC_DIR="'+join_paths(meson.source_root(), 'src', 'lib')+'"', '-DTESTS_SRC_DIR="'+meson.current_source_dir()+'"'] diff --git a/src/tests/eolian_cxx/meson.build b/src/tests/eolian_cxx/meson.build index be2f5c37c8..d93fe60c88 100644 --- a/src/tests/eolian_cxx/meson.build +++ b/src/tests/eolian_cxx/meson.build @@ -53,7 +53,7 @@ foreach eo_file : pub_eo_files pub_eo_file_target += custom_target('eolian_gen_' + eo_file, input : eo_file, output : [eo_file + '.h'], - command : [eolian_gen, '-I', meson.current_source_dir(), eolian_include_directories, + command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories, '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'), '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'), '-gch', '@INPUT@']) From c4245941ad3150ee145afba324041cc5a08b417f Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sun, 25 Nov 2018 12:49:15 +0100 Subject: [PATCH 41/86] meson: fix running of benchmark Differential Revision: https://phab.enlightenment.org/D7362 --- src/benchmarks/eina/meson.build | 3 ++- src/benchmarks/eo/meson.build | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/benchmarks/eina/meson.build b/src/benchmarks/eina/meson.build index aa9081cef2..34c75b7ca0 100644 --- a/src/benchmarks/eina/meson.build +++ b/src/benchmarks/eina/meson.build @@ -37,5 +37,6 @@ eina_bench = executable('eina_bench', ) benchmark('eina_bench', eina_bench, + args : 'libcity.la', timeout : 20*60 -) \ No newline at end of file +) diff --git a/src/benchmarks/eo/meson.build b/src/benchmarks/eo/meson.build index 2df6c71e97..971359ceb1 100644 --- a/src/benchmarks/eo/meson.build +++ b/src/benchmarks/eo/meson.build @@ -13,4 +13,6 @@ eo_bench = executable('eo_bench', dependencies: [eo, eina], ) -benchmark('eo', eo_bench) +benchmark('eo', eo_bench, + args: run_command('date','+%F_%s').stdout() +) From 0fbace647d800b4296a0153fbbdc489cd7e74173 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sun, 25 Nov 2018 12:50:03 +0100 Subject: [PATCH 42/86] elementary: add a benchmark for focus widget tree interation The benchmark checks how long it takes to move focus through a few nested scrollers. Differential Revision: https://phab.enlightenment.org/D7363 --- meson.build | 2 +- src/benchmarks/elementary/focus_widget_tree.c | 264 ++++++++++++++++++ src/benchmarks/elementary/meson.build | 9 + 3 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 src/benchmarks/elementary/focus_widget_tree.c create mode 100644 src/benchmarks/elementary/meson.build diff --git a/meson.build b/meson.build index 0ae8b3ea9a..c40d30c185 100644 --- a/meson.build +++ b/meson.build @@ -244,7 +244,7 @@ subprojects = [ ['ethumb' ,[] , true, true, true, false, false, false, ['eina', 'efl', 'eo'], []], ['ethumb_client' ,[] , false, true, true, false, false, true, ['eina', 'efl', 'eo', 'ethumb'], []], ['elocation' ,[] , false, true, false, false, false, false, ['ecore', 'eldbus'], []], -['elementary' ,[] , true, true, true, false, true, false, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio', 'elocation'], ['atspi']], +['elementary' ,[] , true, true, true, true, true, false, ['eina', 'efl', 'eo', 'eet', 'evas', 'ecore', 'ecore-evas', 'ecore-file', 'ecore-input', 'edje', 'ethumb-client', 'emotion', 'ecore-imf', 'ecore-con', 'eldbus', 'efreet', 'efreet-mime', 'efreet-trash', 'eio', 'elocation'], ['atspi']], ['efl_wl' ,['wl'] , false, true, true, false, false, false, ['evas', 'ecore'], []], ['elua' ,['elua'] , false, true, true, false, true, false, ['eina', 'luajit'], []], ['ecore_wayland' ,['wl-deprecated'] , false, true, false, false, false, false, ['eina'], []], diff --git a/src/benchmarks/elementary/focus_widget_tree.c b/src/benchmarks/elementary/focus_widget_tree.c new file mode 100644 index 0000000000..3b95781bad --- /dev/null +++ b/src/benchmarks/elementary/focus_widget_tree.c @@ -0,0 +1,264 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#include +#include "elm_widget.h" + +#define PSIZE 318 + +typedef struct +{ + Evas_Object *scroller; + Evas_Object *first_it; + Ecore_Timer *timer; + Ecore_Event_Key key; + int frames; + int focus_max; + int state; + int total_count; + unsigned long long total, min, max, first; +} Focus; + +static Eina_Bool +_focus_test_cb(void *data) +{ + Focus *focus = data; + + if (!ecore_evas_focus_get(ecore_evas_ecore_evas_get(evas_object_evas_get(focus->scroller)))) + return EINA_TRUE; + + if (focus->state == -1 || focus->state == 0) + focus->state = 1; + + if (focus->state & 1) + { + focus->key.keyname = "Down"; + focus->key.key = "Down"; + focus->key.keycode = 116; + } + else + { + focus->key.keyname = "Up"; + focus->key.key = "Up"; + focus->key.keycode = 111; + } + struct timespec t0, t1; + unsigned long long t1ll, t0ll, trll, ret; + + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0); + ecore_event_evas_key_down(NULL, 0, &(focus->key)); + clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1); + + t0ll = ((unsigned long long) t0.tv_sec * 1000000000ULL) + t0.tv_nsec; + t1ll = ((unsigned long long) t1.tv_sec * 1000000000ULL) + t1.tv_nsec; + trll = t1ll - t0ll; + if (focus->min > trll) focus->min = trll; + if (focus->max < trll) focus->max = trll; + focus->total += trll; + focus->total_count++; + if (focus->total_count == 1) + focus->first = trll; + //printf("time : %llu\n", trll); + + ret = focus->total / focus->total_count; + + if (focus->state > focus->focus_max * 2) + { + printf(" first : %llu nsec, min : %llu nsec, max : %llu nsec\n", focus->first, focus->min, focus->max); + printf(" average : %llu nsec (total : %llu nsec / count : %d)\n", ret, focus->total, focus->total_count); + elm_exit(); + } + return EINA_TRUE; +} + +static void +_scroll2_del_cb(void *data, Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Focus *focus = data; + + ecore_timer_del(focus->timer); + free(focus); +} + +static void +_focus_state_change_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + Focus *focus = data; + + focus->state++; +} + +static void +force_focus(Evas_Object *win) +{ + Ecore_Evas *ee; + + ee = ecore_evas_ecore_evas_get(evas_object_evas_get(win)); + ecore_evas_focus_set(ee, EINA_TRUE); + ecore_evas_callback_focus_in_set(ee, NULL); + ecore_evas_callback_focus_out_set(ee, NULL); + + Elm_Widget_Smart_Data *pd = efl_data_scope_safe_get(win, EFL_UI_WIDGET_CLASS); + pd->top_win_focused = EINA_TRUE; +} + +void +focus_test1(int focus_max) +{ + Evas_Object *win, *bt, *bx, *bx2, *sc, *tb, *tb2, *rc; + Focus *focus; + int i, j; + + focus = calloc(1, sizeof(Focus)); + focus->max = 0; + focus->min = ULONG_MAX; + + win = elm_win_util_standard_add("scroller2", "Scroller 2"); + force_focus(win); + elm_win_autodel_set(win, EINA_TRUE); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0); + + /* { */ + for (i = 0; i < 3; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Vertical"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + if (i == 0) + { + evas_object_smart_callback_add(bt, "focused", _focus_state_change_cb, focus); + focus->first_it = bt; + } + } + /* } */ + + /* { */ + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, 0.5); + elm_scroller_bounce_set(sc, EINA_TRUE, EINA_FALSE); + elm_scroller_content_min_limit(sc, 0, 1); + elm_box_pack_end(bx, sc); + evas_object_show(sc); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, EINA_TRUE); + + for (i = 0; i < 10; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "... Horizontal scrolling ..."); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + } + + elm_object_content_set(sc, bx2); + evas_object_show(bx2); + /* } */ + + /* { */ + for (i = 0; i < 3; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Vertical"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + /* } */ + + /* { */ + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(rc, 200, 120); + elm_table_pack(tb, rc, 0, 0, 1, 1); + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, sc, 0, 0, 1, 1); + evas_object_show(sc); + + tb2 = elm_table_add(win); + + for (j = 0; j < 20; j++) + { + for (i = 0; i < 20; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Both"); + elm_table_pack(tb2, bt, i, j, 1, 1); + evas_object_show(bt); + } + } + + elm_object_content_set(sc, tb2); + evas_object_show(tb2); + /* } */ + + for (i = 0; i < 24; i++) + { + bt = elm_button_add(win); + elm_object_text_set(bt, "Vertical"); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + if (i == 23) + evas_object_smart_callback_add(bt, "focused", _focus_state_change_cb, focus); + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE); + elm_win_resize_object_add(win, sc); + elm_object_content_set(sc, bx); + evas_object_show(bx); + evas_object_show(sc); + + focus->scroller = sc; + + evas_object_resize(win, 320, 480); + evas_object_show(win); + elm_object_focus_set(focus->first_it, EINA_TRUE); + focus->state = -1; + + evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _scroll2_del_cb, focus); + + focus->key.window = elm_win_window_id_get(win); + focus->key.event_window = elm_win_window_id_get(win); + focus->focus_max = focus_max; + focus->timer = ecore_timer_add(0.05, _focus_test_cb, focus); + + elm_run(); +} + +EAPI_MAIN int +elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) +{ + setenv("ELM_DISPLAY", "buffer", 1); + elm_config_focus_autoscroll_mode_set(ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN); + elm_config_window_auto_focus_animate_set(EINA_FALSE); + elm_config_focus_highlight_animate_set(EINA_TRUE); + focus_test1(atoi(argv[1])); + + return EXIT_SUCCESS; +} +ELM_MAIN() diff --git a/src/benchmarks/elementary/meson.build b/src/benchmarks/elementary/meson.build new file mode 100644 index 0000000000..158a535ae2 --- /dev/null +++ b/src/benchmarks/elementary/meson.build @@ -0,0 +1,9 @@ +focus_widget_tree_bench = executable('focus_widget_tree_bench', + 'focus_widget_tree.c', + dependencies: [elementary, ecore_input_evas], +) + +benchmark('focus_widget_tree', focus_widget_tree_bench, + args: ['5'], + timeout : 5*60 +) From e45b3d523e8fa8e0e89d65e6f6a6a46901a05ab2 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Tue, 4 Dec 2018 13:54:30 +0900 Subject: [PATCH 43/86] evas ector: use proper prefix name --- .../evas/engines/software_generic/evas_ector_software.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/evas/engines/software_generic/evas_ector_software.h b/src/modules/evas/engines/software_generic/evas_ector_software.h index 4b2385cc3a..f2625371a3 100644 --- a/src/modules/evas/engines/software_generic/evas_ector_software.h +++ b/src/modules/evas/engines/software_generic/evas_ector_software.h @@ -1,5 +1,5 @@ -#ifndef EVAS_ECTOR_GL_H -#define EVAS_ECTOR_GL_H +#ifndef EVAS_ECTOR_SOFTWARE_H +#define EVAS_ECTOR_SOFTWARE_H #ifdef EAPI # undef EAPI @@ -33,5 +33,5 @@ #undef EAPI #define EAPI -#endif /* ! EVAS_ECTOR_GL_H */ +#endif /* ! EVAS_ECTOR_SOFTWARE_H */ From 03f73ac37144358aded67212de85db094afc5c64 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 26 Nov 2018 12:40:17 +0100 Subject: [PATCH 44/86] elm_interface_scrollable: add support for *jumping* into a scroller Until recently we have been only registering the border elements of the graph, (so only the elements that don't have a neighboor). However this lead to the situation that a scroller that is scrolled into the middle (so not the x nor the y axis is scrolled to the max), is not accessable. Now, we register all elements that have a neighboor in the outside. The patch in the test suite is required in order to provide the correct geometry to the implementation of efl_ui_focus_manager_sub. Differential Revision: https://phab.enlightenment.org/D7360 --- src/lib/elementary/efl_ui_focus_manager.eo | 15 +++ .../elementary/efl_ui_focus_manager_calc.c | 103 ++++++++++++++++-- .../elementary/efl_ui_focus_manager_calc.eo | 1 + .../efl_ui_focus_manager_root_focus.c | 9 ++ .../efl_ui_focus_manager_root_focus.eo | 1 + src/lib/elementary/efl_ui_focus_manager_sub.c | 2 +- src/lib/elementary/elm_interface_scrollable.c | 4 + src/tests/elementary/elm_test_focus.c | 33 ++++++ src/tests/elementary/elm_test_focus_sub.c | 5 + src/tests/elementary/focus_test_sub_main.eo | 3 +- 10 files changed, 166 insertions(+), 10 deletions(-) diff --git a/src/lib/elementary/efl_ui_focus_manager.eo b/src/lib/elementary/efl_ui_focus_manager.eo index 767c0b6b8d..35614712b7 100644 --- a/src/lib/elementary/efl_ui_focus_manager.eo +++ b/src/lib/elementary/efl_ui_focus_manager.eo @@ -1,4 +1,5 @@ import efl_ui; +import eina_types; struct Efl.Ui.Focus.Relations { [[Structure holding the graph of relations between focussable objects. @@ -90,6 +91,20 @@ interface Efl.Ui.Focus.Manager { over the border objects.]] } } + @property viewport_elements { + [[The list of elements which are at the border of the viewport. + + This means one of the relations right,left or down,up are not set. + This call flushes all changes. See @Efl.Ui.Focus.Manager.move + ]] + get {} + keys { + viewport : Eina.Rect; + } + values { + viewport_elements : iterator; + } + } @property root { [[Root node for all logical subtrees. diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index e4d0332889..d6b5569cd1 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -937,8 +937,74 @@ typedef struct { Eina_Iterator iterator; Eina_Iterator *real_iterator; Efl_Ui_Focus_Manager *object; + Eina_Each_Cb filter_cb; + Eina_Rect viewport; + Eina_Bool use_viewport; } Border_Elements_Iterator; +static Eina_Bool +_border_filter_cb(Node *node, Border_Elements_Iterator *pd EINA_UNUSED) +{ + for(int i = EFL_UI_FOCUS_DIRECTION_UP ;i < EFL_UI_FOCUS_DIRECTION_LAST; i++) + { + if (!DIRECTION_ACCESS(node, i).one_direction) + { + return EINA_TRUE; + } + } + return EINA_FALSE; +} + +static Eina_Bool +eina_rectangle_real_inside(Eina_Rect rect, Eina_Rect geom) +{ + int min_x, max_x, min_y, max_y; + + min_x = geom.rect.x; + min_y = geom.rect.y; + max_x = eina_rectangle_max_x(&geom.rect); + max_y = eina_rectangle_max_y(&geom.rect); + + Eina_Bool inside = eina_rectangle_coords_inside(&rect.rect, min_x, min_y) && + eina_rectangle_coords_inside(&rect.rect, min_x, max_y) && + eina_rectangle_coords_inside(&rect.rect, max_x, min_y) && + eina_rectangle_coords_inside(&rect.rect, max_x, max_y); + + return inside; +} + +static Eina_Bool +_viewport_filter_cb(Node *node, Border_Elements_Iterator *pd) +{ + Node *partner; + Eina_Rect geom; + + if (node->type == NODE_TYPE_ONLY_LOGICAL) return EINA_FALSE; + + geom = efl_ui_focus_object_focus_geometry_get(node->focusable); + + if (eina_rectangle_real_inside(pd->viewport, geom)) + { + for (int i = 0; i < 4; ++i) + { + Eina_List *n, *lst = G(node).directions[i].one_direction; + + if (!lst) + return EINA_TRUE; + + EINA_LIST_FOREACH(lst, n, partner) + { + Eina_Rect partner_geom; + partner_geom = efl_ui_focus_object_focus_geometry_get(partner->focusable); + if (!eina_rectangle_real_inside(pd->viewport, partner_geom)) + return EINA_TRUE; + } + } + } + return EINA_FALSE; +} + + static Eina_Bool _iterator_next(Border_Elements_Iterator *it, void **data) { @@ -946,17 +1012,21 @@ _iterator_next(Border_Elements_Iterator *it, void **data) EINA_ITERATOR_FOREACH(it->real_iterator, node) { + Eina_Bool use = EINA_FALSE; if (node->type == NODE_TYPE_ONLY_LOGICAL) continue; - for(int i = EFL_UI_FOCUS_DIRECTION_UP ;i < EFL_UI_FOCUS_DIRECTION_LAST; i++) + if (!it->use_viewport) + use = _border_filter_cb(node, it); + else + use = _viewport_filter_cb(node, it); + + if (use) { - if (!DIRECTION_ACCESS(node, i).one_direction) - { - *data = node->focusable; - return EINA_TRUE; - } + *data = node->focusable; + return EINA_TRUE; } } + return EINA_FALSE; } @@ -987,8 +1057,8 @@ _prepare_node(Node *root) } } -EOLIAN static Eina_Iterator* -_efl_ui_focus_manager_calc_efl_ui_focus_manager_border_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd) +static Border_Elements_Iterator* +_elements_iterator_new(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd) { Border_Elements_Iterator *it; @@ -1009,6 +1079,23 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_border_elements_get(const Eo *ob it->iterator.free = FUNC_ITERATOR_FREE(_iterator_free); it->object = (Eo *)obj; + return it; +} + +EOLIAN static Eina_Iterator* +_efl_ui_focus_manager_calc_efl_ui_focus_manager_border_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd) +{ + return (Eina_Iterator*) _elements_iterator_new(obj, pd); +} + +EOLIAN static Eina_Iterator* +_efl_ui_focus_manager_calc_efl_ui_focus_manager_viewport_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Eina_Rect viewport) +{ + Border_Elements_Iterator *it = _elements_iterator_new(obj, pd); + + it->use_viewport = EINA_TRUE; + it->viewport = viewport; + return (Eina_Iterator*) it; } diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.eo b/src/lib/elementary/efl_ui_focus_manager_calc.eo index ba4addf3d3..8bf30964a2 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.eo +++ b/src/lib/elementary/efl_ui_focus_manager_calc.eo @@ -95,6 +95,7 @@ class Efl.Ui.Focus.Manager_Calc (Efl.Object, Efl.Ui.Focus.Manager) { Efl.Ui.Focus.Manager.manager_focus {get; set;} Efl.Ui.Focus.Manager.redirect {set; get;} Efl.Ui.Focus.Manager.border_elements {get;} + Efl.Ui.Focus.Manager.viewport_elements {get;} Efl.Ui.Focus.Manager.root {set; get;} Efl.Ui.Focus.Manager.request_subchild; Efl.Ui.Focus.Manager.fetch; diff --git a/src/lib/elementary/efl_ui_focus_manager_root_focus.c b/src/lib/elementary/efl_ui_focus_manager_root_focus.c index 3070a6f183..0df8b5e862 100644 --- a/src/lib/elementary/efl_ui_focus_manager_root_focus.c +++ b/src/lib/elementary/efl_ui_focus_manager_root_focus.c @@ -141,6 +141,15 @@ _efl_ui_focus_manager_root_focus_efl_ui_focus_manager_border_elements_get(const return efl_ui_focus_manager_border_elements_get(efl_super(obj, MY_CLASS)); } +EOLIAN static Eina_Iterator * +_efl_ui_focus_manager_root_focus_efl_ui_focus_manager_viewport_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Root_Focus_Data *pd, Eina_Rect viewport) +{ + if (pd->rect_registered) + return eina_list_iterator_new(pd->iterator_list); + + return efl_ui_focus_manager_border_elements_get(efl_super(obj, MY_CLASS)); +} + EOLIAN static Efl_Ui_Focus_Object* _efl_ui_focus_manager_root_focus_efl_ui_focus_manager_request_move(Eo *obj, Efl_Ui_Focus_Manager_Root_Focus_Data *pd, Efl_Ui_Focus_Direction direction, Efl_Ui_Focus_Object *child, Eina_Bool logical) { diff --git a/src/lib/elementary/efl_ui_focus_manager_root_focus.eo b/src/lib/elementary/efl_ui_focus_manager_root_focus.eo index 81bd312abf..3f89751623 100644 --- a/src/lib/elementary/efl_ui_focus_manager_root_focus.eo +++ b/src/lib/elementary/efl_ui_focus_manager_root_focus.eo @@ -20,6 +20,7 @@ class Efl.Ui.Focus.Manager_Root_Focus(Efl.Ui.Focus.Manager_Calc) { Efl.Ui.Focus.Manager.fetch; Efl.Ui.Focus.Manager.logical_end; Efl.Ui.Focus.Manager.border_elements {get;} + Efl.Ui.Focus.Manager.viewport_elements {get;} Efl.Ui.Focus.Manager.request_move; Efl.Ui.Focus.Manager.move; Efl.Object.constructor; diff --git a/src/lib/elementary/efl_ui_focus_manager_sub.c b/src/lib/elementary/efl_ui_focus_manager_sub.c index 90ac4f7387..7fb1383ad6 100644 --- a/src/lib/elementary/efl_ui_focus_manager_sub.c +++ b/src/lib/elementary/efl_ui_focus_manager_sub.c @@ -53,7 +53,7 @@ _border_flush(Eo *obj, Efl_Ui_Focus_Manager_Sub_Data *pd) manager = efl_ui_focus_object_focus_manager_get(obj); logical = obj; - borders = efl_ui_focus_manager_border_elements_get(obj); + borders = efl_ui_focus_manager_viewport_elements_get(obj, efl_gfx_entity_geometry_get(obj)); selection = NULL; EINA_ITERATOR_FOREACH(borders, node) diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c index df77c8a793..3bfac1e625 100644 --- a/src/lib/elementary/elm_interface_scrollable.c +++ b/src/lib/elementary/elm_interface_scrollable.c @@ -103,6 +103,10 @@ _elm_pan_update(Elm_Pan_Smart_Data *psd) efl_ui_focus_manager_dirty_logic_freeze(manager); evas_object_move(psd->content, psd->x - psd->px, psd->y - psd->py); efl_ui_focus_manager_dirty_logic_unfreeze(manager); + //XXX: hack, right now there is no api in efl_ui_focus_manager_sub.eo to mark it dirty + // If we have moved the content, then emit this event, in order to ensure that the focus_manager_sub + // logic tries to fetch the viewport again + efl_event_callback_call(manager, EFL_UI_FOCUS_MANAGER_EVENT_COORDS_DIRTY, NULL); } } diff --git a/src/tests/elementary/elm_test_focus.c b/src/tests/elementary/elm_test_focus.c index 7dde8e4e2a..e9bc5a97c9 100644 --- a/src/tests/elementary/elm_test_focus.c +++ b/src/tests/elementary/elm_test_focus.c @@ -1074,6 +1074,38 @@ EFL_START_TEST(test_events_child_focus) } EFL_END_TEST + +EFL_START_TEST(viewport_check) +{ + Efl_Ui_Focus_Manager *m; + Efl_Ui_Focus_Object *middle, *east, *west, *north, *south, *root; + Eina_List *list = NULL; + Eina_Iterator *iter; + Efl_Ui_Focus_Object *obj; + + elm_focus_test_setup_cross(&middle, &south, &north, &east, &west); + + m = elm_focus_test_manager_new(&root); + efl_ui_focus_manager_calc_register(m, middle, root, NULL); + efl_ui_focus_manager_calc_register(m, south, root, NULL); + efl_ui_focus_manager_calc_register(m, north, root, NULL); + efl_ui_focus_manager_calc_register(m, east, root, NULL); + efl_ui_focus_manager_calc_register(m, west, root, NULL); + + iter = efl_ui_focus_manager_viewport_elements_get(m, EINA_RECT(80, 0, 100, 100)); + + EINA_ITERATOR_FOREACH(iter, obj) + { + list = eina_list_append(list, obj); + } + + eina_iterator_free(iter); + + ck_assert(eina_list_count(list) == 1); + ck_assert_ptr_eq(eina_list_data_get(list), east); +} +EFL_END_TEST + void elm_test_focus(TCase *tc) { tcase_add_test(tc, focus_register_twice); @@ -1105,4 +1137,5 @@ void elm_test_focus(TCase *tc) tcase_add_test(tc, test_request_move); tcase_add_test(tc, redirect_unregister_entrypoint); tcase_add_test(tc, test_events_child_focus); + tcase_add_test(tc, viewport_check); } diff --git a/src/tests/elementary/elm_test_focus_sub.c b/src/tests/elementary/elm_test_focus_sub.c index 5454ecd414..9fdddbd2d2 100644 --- a/src/tests/elementary/elm_test_focus_sub.c +++ b/src/tests/elementary/elm_test_focus_sub.c @@ -5,6 +5,11 @@ typedef struct { } Focus_Test_Sub_Main_Data; +EOLIAN static Eina_Rect +_focus_test_sub_main_efl_gfx_entity_geometry_get(const Eo *obj, Focus_Test_Sub_Main_Data *pd) +{ + return EINA_RECT(-10, -10, 40, 40); +} EOLIAN static Eina_Rect _focus_test_sub_main_efl_ui_focus_object_focus_geometry_get(const Eo *obj EINA_UNUSED, Focus_Test_Sub_Main_Data *pd EINA_UNUSED) diff --git a/src/tests/elementary/focus_test_sub_main.eo b/src/tests/elementary/focus_test_sub_main.eo index d259d38787..9ac058f32f 100644 --- a/src/tests/elementary/focus_test_sub_main.eo +++ b/src/tests/elementary/focus_test_sub_main.eo @@ -1,10 +1,11 @@ class Focus.Test.Sub.Main extends Efl.Object - implements Efl.Ui.Focus.Object, Efl.Ui.Focus.Manager_Sub + implements Efl.Ui.Focus.Object, Efl.Ui.Focus.Manager_Sub, Efl.Gfx.Entity { implements { Efl.Ui.Focus.Object.focus_manager { get; } Efl.Ui.Focus.Object.focus_parent { get; } Efl.Ui.Focus.Object.focus_geometry { get; } + Efl.Gfx.Entity.geometry {get;} } } From d24ed5f1d3e7306936ae7a169a4ec29a93845e10 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 26 Nov 2018 17:30:19 +0100 Subject: [PATCH 45/86] efl_ui_focus_manager_root_focus: ensure that adapter is part of viewport This ensures that the adapter part is part of the viewport elements and border elements. This is done in order to support cases where a elm_scroller content is not focusable. Before the element was not correctly in viewport, and so not correctly registered. ref T6804 Differential Revision: https://phab.enlightenment.org/D7364 --- src/bin/elementary/test.c | 2 + src/bin/elementary/test_scroller.c | 44 +++++++++++++++++++ .../elementary/efl_ui_focus_manager_calc.c | 9 ++-- .../efl_ui_focus_manager_root_focus.c | 4 +- 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index 4d01d963db..f44052f216 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c @@ -179,6 +179,7 @@ void test_scroller2(void *data, Evas_Object *obj, void *event_info); void test_scroller3(void *data, Evas_Object *obj, void *event_info); void test_scroller4(void *data, Evas_Object *obj, void *event_info); void test_scroller5(void *data, Evas_Object *obj, void *event_info); +void test_scroller6(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_scroller(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_scroller2(void *data, Evas_Object *obj, void *event_info); void test_spinner(void *data, Evas_Object *obj, void *event_info); @@ -1060,6 +1061,7 @@ add_tests: ADD_TEST(NULL, "Scroller", "Scroller 3", test_scroller3); ADD_TEST(NULL, "Scroller", "Page Scroller", test_scroller4); ADD_TEST(NULL, "Scroller", "Scroller on Popup", test_scroller5); + ADD_TEST(NULL, "Scroller", "Scroller 6", test_scroller6); ADD_TEST_EO(NULL, "Scroller", "Efl.Ui.Scroller", test_efl_ui_scroller); //------------------------------// diff --git a/src/bin/elementary/test_scroller.c b/src/bin/elementary/test_scroller.c index a6670c6613..ef8ef7e49c 100644 --- a/src/bin/elementary/test_scroller.c +++ b/src/bin/elementary/test_scroller.c @@ -1017,3 +1017,47 @@ test_scroller5(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event evas_object_resize(win, 400, 550); evas_object_show(win); } + +void +test_scroller6(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *win, *scr, *lb, *table, *btn, *btn2; + + win = elm_win_util_standard_add("Scroller with unfocusable content", "Scroller with unfocusable content"); + elm_win_autodel_set(win, EINA_TRUE); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + table = elm_table_add(win); + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, table); + evas_object_show(table); + + scr = elm_scroller_add(win); + evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(table, scr, 0, 0, 1, 1); + evas_object_show(scr); + + lb = elm_label_add(scr); + elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too."); + elm_object_content_set(scr, lb); + evas_object_show(lb); + + btn = elm_button_add(table); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0); + elm_object_text_set(btn, "Button 2"); + elm_table_pack(table, btn, 0, 1, 2, 1); + evas_object_show(btn); + + btn2 = elm_button_add(table); + evas_object_size_hint_weight_set(btn2, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn2, 0.0, EVAS_HINT_FILL); + elm_object_text_set(btn2, "Button 3"); + elm_table_pack(table, btn2, 1, 0, 1, 1); + evas_object_show(btn2); + + evas_object_resize(win, 400, 550); + evas_object_show(win); +} diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index d6b5569cd1..b22832e41a 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -243,8 +243,11 @@ node_item_free(Node *item) #define MAKE_LIST_DIRTY(node, field) \ EINA_LIST_FOREACH(DIRECTION_ACCESS(node, i).field, l, partner) \ { \ - dirty_add(obj, pd, partner); \ - dirty_added = EINA_TRUE; \ + if (partner->type != NODE_TYPE_ONLY_LOGICAL) \ + { \ + dirty_add(obj, pd, partner); \ + dirty_added = EINA_TRUE; \ + } \ } MAKE_LIST_DIRTY(item, one_direction) @@ -409,7 +412,7 @@ dirty_flush_node(Efl_Ui_Focus_Manager *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Cal static void dirty_flush(Efl_Ui_Focus_Manager *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Node *node) { - if (!pd->dirty) return; + if (!pd->dirty && node->type == NODE_TYPE_NORMAL) return; efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FLUSH_PRE, NULL); diff --git a/src/lib/elementary/efl_ui_focus_manager_root_focus.c b/src/lib/elementary/efl_ui_focus_manager_root_focus.c index 0df8b5e862..82eb1fb697 100644 --- a/src/lib/elementary/efl_ui_focus_manager_root_focus.c +++ b/src/lib/elementary/efl_ui_focus_manager_root_focus.c @@ -180,7 +180,7 @@ _efl_ui_focus_manager_root_focus_canvas_object_set(Eo *obj, Efl_Ui_Focus_Manager if (pd->replacement_object) { - pd->iterator_list = eina_list_remove(pd->iterator_list, pd->replacement_object); + pd->iterator_list = eina_list_remove(pd->iterator_list, pd->rect); pd->replacement_object = NULL; } @@ -188,7 +188,7 @@ _efl_ui_focus_manager_root_focus_canvas_object_set(Eo *obj, Efl_Ui_Focus_Manager if (pd->replacement_object) { efl_ui_focus_composition_adapter_canvas_object_set(pd->rect, pd->replacement_object); - pd->iterator_list = eina_list_append(pd->iterator_list, pd->replacement_object); + pd->iterator_list = eina_list_append(pd->iterator_list, pd->rect); } } From 68462553d1040eb7ef6b51e16a9a1a81bcb39e29 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Wed, 28 Nov 2018 14:17:28 +0100 Subject: [PATCH 46/86] elm_scroller: update behaviour to match legacy behaviour more closely This implements scrolling the scroller when the scroller is not in the maximum position of the requested relation, but there is no more focus object in that relation. Summing up, the scroller is scrolled manually, when the focus object is not fitting in the viewport, and the object is beeing out of the viewport in the requested direction. Or the scroller is not at its max position in the requested direction, and there is no more focusable object in this requested direction. ref T6804 Differential Revision: https://phab.enlightenment.org/D7382 --- src/bin/elementary/test.c | 2 + src/bin/elementary/test_scroller.c | 72 +++++++++++++++++++++++++ src/lib/elementary/elm_scroller.c | 84 +++++++++++++++++------------- 3 files changed, 121 insertions(+), 37 deletions(-) diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index f44052f216..1cedec20ac 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c @@ -180,6 +180,7 @@ void test_scroller3(void *data, Evas_Object *obj, void *event_info); void test_scroller4(void *data, Evas_Object *obj, void *event_info); void test_scroller5(void *data, Evas_Object *obj, void *event_info); void test_scroller6(void *data, Evas_Object *obj, void *event_info); +void test_scroller7(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_scroller(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_scroller2(void *data, Evas_Object *obj, void *event_info); void test_spinner(void *data, Evas_Object *obj, void *event_info); @@ -1062,6 +1063,7 @@ add_tests: ADD_TEST(NULL, "Scroller", "Page Scroller", test_scroller4); ADD_TEST(NULL, "Scroller", "Scroller on Popup", test_scroller5); ADD_TEST(NULL, "Scroller", "Scroller 6", test_scroller6); + ADD_TEST(NULL, "Scroller", "Scroller 7", test_scroller7); ADD_TEST_EO(NULL, "Scroller", "Efl.Ui.Scroller", test_efl_ui_scroller); //------------------------------// diff --git a/src/bin/elementary/test_scroller.c b/src/bin/elementary/test_scroller.c index ef8ef7e49c..7ca95955fe 100644 --- a/src/bin/elementary/test_scroller.c +++ b/src/bin/elementary/test_scroller.c @@ -1061,3 +1061,75 @@ test_scroller6(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event evas_object_resize(win, 400, 550); evas_object_show(win); } + +void +test_scroller7(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *win, *scr, *lb, *table, *btn, *btn2, *inner_table, *o, *inner_button; + + win = elm_win_util_standard_add("Scroller with unfocusable content", "Scroller with unfocusable content"); + elm_win_autodel_set(win, EINA_TRUE); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + table = elm_table_add(win); + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, table); + evas_object_show(table); + + scr = elm_scroller_add(win); + evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(table, scr, 0, 0, 1, 1); + evas_object_show(scr); + + inner_table = o = elm_table_add(win); + evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_content_set(scr, inner_table); + evas_object_show(scr); + + lb = elm_label_add(scr); + elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too."); + elm_table_pack(inner_table, lb, 0, 1, 1, 1); + evas_object_show(lb); + + lb = elm_label_add(scr); + elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too."); + elm_table_pack(inner_table, lb, 1, 0, 1, 1); + evas_object_show(lb); + + lb = elm_label_add(scr); + elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too."); + elm_table_pack(inner_table, lb, 1, 2, 1, 1); + evas_object_show(lb); + + lb = elm_label_add(scr); + elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too."); + elm_table_pack(inner_table, lb, 2, 1, 1, 1); + evas_object_show(lb); + + btn = elm_button_add(table); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0); + elm_object_text_set(btn, "Button 2"); + elm_table_pack(inner_table, btn, 1, 1, 1, 1); + evas_object_show(btn); + + btn = elm_button_add(table); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0); + elm_object_text_set(btn, "Button 2"); + elm_table_pack(table, btn, 0, 1, 2, 1); + evas_object_show(btn); + + btn2 = elm_button_add(table); + evas_object_size_hint_weight_set(btn2, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn2, 0.0, EVAS_HINT_FILL); + elm_object_text_set(btn2, "Button 3"); + elm_table_pack(table, btn2, 1, 0, 1, 1); + evas_object_show(btn2); + + evas_object_resize(win, 400, 550); + evas_object_show(win); +} diff --git a/src/lib/elementary/elm_scroller.c b/src/lib/elementary/elm_scroller.c index 418d96759c..b32067e2cf 100644 --- a/src/lib/elementary/elm_scroller.c +++ b/src/lib/elementary/elm_scroller.c @@ -82,27 +82,6 @@ _elm_scroller_proxy_set(Evas_Object *obj, Elm_Scroller_Data *sd, Evas_Object *pr evas_object_image_source_set(proxy, content); evas_object_show(proxy); } -//describe position of rect2 relative to rect1 -// 1 = top outside -// 2 = left outside -// 4 = bottom outside -// 8 = right outside -static char -_intersect_direction(Eina_Rectangle *rect1, Eina_Rectangle *rect2) -{ - char ret = 0; - - if (rect1->y > rect2->y) - ret |= 1; - if (rect1->x > rect2->x) - ret |= 2; - if (rect1->y + rect1->h < rect2->y + rect2->h) - ret |= 4; - if (rect1->x + rect1->w < rect2->x + rect2->w) - ret |= 8; - - return ret; -} static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) @@ -133,41 +112,72 @@ _key_action_move(Evas_Object *obj, const char *params) evas_object_geometry_get(sd->content, NULL, NULL, &max_x, &max_y); { - Efl_Ui_Focus_Object *focused; + Efl_Ui_Focus_Direction focus_dir = 0; + Efl_Ui_Focus_Object *focused, *next_target; Eina_Rectangle focused_geom, viewport; + Eina_Bool scroller_adjustment = EINA_FALSE; + + if (!strcmp(dir, "prior")) + focus_dir = EFL_UI_FOCUS_DIRECTION_PREVIOUS; + else if (!strcmp(dir, "next")) + focus_dir = EFL_UI_FOCUS_DIRECTION_NEXT; + else if (!strcmp(dir, "left")) + focus_dir = EFL_UI_FOCUS_DIRECTION_LEFT; + else if (!strcmp(dir, "right")) + focus_dir = EFL_UI_FOCUS_DIRECTION_RIGHT; + else if (!strcmp(dir, "up")) + focus_dir = EFL_UI_FOCUS_DIRECTION_UP; + else if (!strcmp(dir, "down")) + focus_dir = EFL_UI_FOCUS_DIRECTION_DOWN; + else return EINA_FALSE; focused = efl_ui_focus_manager_focus_get(obj); + next_target = efl_ui_focus_manager_request_move(obj, focus_dir, focused, EINA_FALSE); + //logical movement is handled by focus directly if (focused && - (!strcmp(dir, "next") || - !strcmp(dir, "prior"))) + (focus_dir == EFL_UI_FOCUS_DIRECTION_NEXT || + focus_dir == EFL_UI_FOCUS_DIRECTION_PREVIOUS)) return EINA_FALSE; - if (focused && - (!strcmp(dir, "left") || - !strcmp(dir, "right") || - !strcmp(dir, "up") || - !strcmp(dir, "down"))) + //check if a object that is focused is lapping out of the viewport + // if this is the case, and the object is lapping out of the viewport in + // the direction we want to move, then move the scroller + if (focused) { - char relative; + Eina_Rectangle_Outside relative; evas_object_geometry_get(focused, &focused_geom.x, &focused_geom.y, &focused_geom.w, &focused_geom.h); elm_interface_scrollable_content_viewport_geometry_get(obj, &viewport.x, &viewport.y, &viewport.w, &viewport.h); - relative = _intersect_direction(&viewport, &focused_geom); + relative = eina_rectangle_outside_position(&viewport, &focused_geom); //now precisly check if the direction is also lapping out - if ((!strcmp(dir, "up") && !(relative & 1)) || - (!strcmp(dir, "left") && !(relative & 2)) || - (!strcmp(dir, "down") && !(relative & 4)) || - (!strcmp(dir, "right") && !(relative & 8))) + if ((focus_dir == EFL_UI_FOCUS_DIRECTION_UP && (relative & EINA_RECTANGLE_OUTSIDE_TOP)) || + (focus_dir == EFL_UI_FOCUS_DIRECTION_LEFT && (relative & EINA_RECTANGLE_OUTSIDE_LEFT)) || + (focus_dir == EFL_UI_FOCUS_DIRECTION_DOWN && (relative & EINA_RECTANGLE_OUTSIDE_BOTTOM)) || + (focus_dir == EFL_UI_FOCUS_DIRECTION_RIGHT && (relative & EINA_RECTANGLE_OUTSIDE_RIGHT))) { - //focus will handle that - return EINA_FALSE; + scroller_adjustment = EINA_TRUE; } } + //check if there is a next target in the direction where we want to move + //if not, and the scroller is not at its max in that relation, + //then move the scroller instead of the focus + if (!next_target) + { + if ((focus_dir == EFL_UI_FOCUS_DIRECTION_UP && (y != 0)) || + (focus_dir == EFL_UI_FOCUS_DIRECTION_LEFT && (x != 0)) || + (focus_dir == EFL_UI_FOCUS_DIRECTION_DOWN && (y != max_y)) || + (focus_dir == EFL_UI_FOCUS_DIRECTION_RIGHT && (x != max_x))) + { + scroller_adjustment = EINA_TRUE; + } + } + if (!scroller_adjustment) + return EINA_FALSE; } elm_interface_scrollable_paging_get(obj, NULL, NULL, &pagesize_h, &pagesize_v); From a5dbb49b685afcda31028d371eafc0b1d03e03c3 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:21:49 +0000 Subject: [PATCH 47/86] eina - iterator - remove unused variable - warn --- src/lib/eina/eina_iterator.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib/eina/eina_iterator.c b/src/lib/eina/eina_iterator.c index 34763f2148..1043a9c6e0 100644 --- a/src/lib/eina/eina_iterator.c +++ b/src/lib/eina/eina_iterator.c @@ -304,8 +304,6 @@ struct _Eina_Iterator_Multi static Eina_Bool eina_multi_iterator_next(Eina_Multi_Iterator *it, void **data) { - Eina_Bool r; - if (!it->iterators) return EINA_FALSE; From 328afdd69812f3cb981da760305d0688c8058960 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:24:02 +0000 Subject: [PATCH 48/86] eina iterator tests - use same unisnged ints to store - warn use unsigned ints to we have no more wantings about signed compares --- src/tests/eina/eina_test_iterator.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/tests/eina/eina_test_iterator.c b/src/tests/eina/eina_test_iterator.c index e2b0a4befb..28fe0dfc5b 100644 --- a/src/tests/eina/eina_test_iterator.c +++ b/src/tests/eina/eina_test_iterator.c @@ -614,10 +614,10 @@ EFL_END_TEST EFL_START_TEST(eina_iterator_carray_length) { - int array[] = { 1, 4, 9, 16 }; + unsigned int array[] = { 1, 4, 9, 16 }; Eina_Iterator *it; - int j = 1; - int i = 0; + unsigned int j = 1; + unsigned int i = 0; it = EINA_C_ARRAY_ITERATOR_NEW(array); EINA_ITERATOR_FOREACH(it, i) @@ -632,12 +632,12 @@ EFL_END_TEST EFL_START_TEST(eina_iterator_multi) { - int array1[] = { 1, 4, 9, 16 }; - int array2[] = { 25, 36, 49, 64 }; - int array3[] = { 81, 100, 121, 144 }; + unsigned int array1[] = { 1, 4, 9, 16 }; + unsigned int array2[] = { 25, 36, 49, 64 }; + unsigned int array3[] = { 81, 100, 121, 144 }; Eina_Iterator *it; - int i; - int j = 1; + unsigned int i; + unsigned int j = 1; it = eina_multi_iterator_new(EINA_C_ARRAY_ITERATOR_NEW(array1), EINA_C_ARRAY_ITERATOR_NEW(array2), From 4d7d199acef3f186000765ac374f0e04402624fa Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:30:09 +0000 Subject: [PATCH 49/86] efl model loop - fix unused param (add EINA_UNUSED) - warn --- src/lib/ecore/efl_model_loop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ecore/efl_model_loop.c b/src/lib/ecore/efl_model_loop.c index 81764e3f3f..3303f96c89 100644 --- a/src/lib/ecore/efl_model_loop.c +++ b/src/lib/ecore/efl_model_loop.c @@ -66,7 +66,7 @@ _propagate_future(void *data, const Efl_Event *event) } static void -_event_cancel(void *data, const Eina_Promise *dead_ptr) +_event_cancel(void *data, const Eina_Promise *dead_ptr EINA_UNUSED) { _efl_model_loop_wathcer_free(data); } From 8c55cbff9571e8b65ea009e0052d6e841dbb8731 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:33:28 +0000 Subject: [PATCH 50/86] eldbus model - fix signed compare warn --- src/lib/eldbus/eldbus_model_arguments.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/eldbus/eldbus_model_arguments.c b/src/lib/eldbus/eldbus_model_arguments.c index f5ee2ace82..1af07305b9 100644 --- a/src/lib/eldbus/eldbus_model_arguments.c +++ b/src/lib/eldbus/eldbus_model_arguments.c @@ -293,7 +293,7 @@ _eldbus_model_arguments_is(Eldbus_Model_Arguments_Data *pd, _eldbus_model_arguments_properties_load(pd); i = _eldbus_model_arguments_argument_index_get(pd, argument); - if (i >= eina_hash_population(pd->properties)) + if ((i > 0x7fffffff) || ((int)i >= eina_hash_population(pd->properties))) { WRN("Argument not found: %s", argument); return false; From c255a72b3d8664ac1878e0dc1757fef288a29f63 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:33:46 +0000 Subject: [PATCH 51/86] eldbus model - remove unused vars warn --- src/lib/eldbus/eldbus_model_arguments.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib/eldbus/eldbus_model_arguments.c b/src/lib/eldbus/eldbus_model_arguments.c index 1af07305b9..ed6cbe2cce 100644 --- a/src/lib/eldbus/eldbus_model_arguments.c +++ b/src/lib/eldbus/eldbus_model_arguments.c @@ -321,8 +321,6 @@ _eldbus_model_arguments_is_output_argument(Eldbus_Model_Arguments_Data *pd, cons static unsigned int _eldbus_model_arguments_argument_index_get(Eldbus_Model_Arguments_Data *pd, const char *argument) { - Eina_Stringshare *name; - Eina_Array_Iterator it; unsigned int i = 0; if (sscanf(argument, ARGUMENT_FORMAT, &i) > 0) From 34e754ebb4214deb2da031b50db4ea37d3514117 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:34:40 +0000 Subject: [PATCH 52/86] elm glview - fix unused param warn --- src/lib/elementary/elm_glview.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/elm_glview.c b/src/lib/elementary/elm_glview.c index 8f61da8645..82308479af 100644 --- a/src/lib/elementary/elm_glview.c +++ b/src/lib/elementary/elm_glview.c @@ -363,7 +363,7 @@ _elm_glview_version_constructor(Eo *obj, Elm_Glview_Data *sd, } EOLIAN static Efl_Object* -_elm_glview_efl_object_constructor(Eo *obj, Elm_Glview_Data *pd) +_elm_glview_efl_object_constructor(Eo *obj, Elm_Glview_Data *pd EINA_UNUSED) { legacy_object_focus_handle(obj); return efl_constructor(efl_super(obj, MY_CLASS)); From 90b8b7678ee7efc439cabedd04fed39f625e0f6e Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:36:00 +0000 Subject: [PATCH 53/86] efl ui focus manager - remove unused local vars warn --- src/lib/elementary/efl_ui_focus_manager_calc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c index b22832e41a..b5bf40bd02 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.c +++ b/src/lib/elementary/efl_ui_focus_manager_calc.c @@ -679,7 +679,7 @@ _efl_ui_focus_manager_calc_update_order(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data { Node *pnode; Efl_Ui_Focus_Object *o; - Eina_List *node_order = NULL, *not_ordered, *trash, *node_order_clean, *n; + Eina_List *node_order = NULL, *not_ordered, *n; F_DBG("Manager_update_order on %p %p", obj, parent); From ece7433ff97ed4f414e86d14103c7de654457650 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:37:01 +0000 Subject: [PATCH 54/86] benchmarks - focus tree - fix unused param warn --- src/benchmarks/elementary/focus_widget_tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/benchmarks/elementary/focus_widget_tree.c b/src/benchmarks/elementary/focus_widget_tree.c index 3b95781bad..5f05df3445 100644 --- a/src/benchmarks/elementary/focus_widget_tree.c +++ b/src/benchmarks/elementary/focus_widget_tree.c @@ -84,7 +84,7 @@ _scroll2_del_cb(void *data, Evas *e EINA_UNUSED, } static void -_focus_state_change_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_focus_state_change_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Focus *focus = data; From 64044e564fbafda4eb79b3f350558c042d428820 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:37:59 +0000 Subject: [PATCH 55/86] efl ui focus manager - fix unused param warn --- src/lib/elementary/efl_ui_focus_manager_root_focus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_focus_manager_root_focus.c b/src/lib/elementary/efl_ui_focus_manager_root_focus.c index 82eb1fb697..4a2fd4ddba 100644 --- a/src/lib/elementary/efl_ui_focus_manager_root_focus.c +++ b/src/lib/elementary/efl_ui_focus_manager_root_focus.c @@ -142,7 +142,7 @@ _efl_ui_focus_manager_root_focus_efl_ui_focus_manager_border_elements_get(const } EOLIAN static Eina_Iterator * -_efl_ui_focus_manager_root_focus_efl_ui_focus_manager_viewport_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Root_Focus_Data *pd, Eina_Rect viewport) +_efl_ui_focus_manager_root_focus_efl_ui_focus_manager_viewport_elements_get(const Eo *obj, Efl_Ui_Focus_Manager_Root_Focus_Data *pd, Eina_Rect viewport EINA_UNUSED) { if (pd->rect_registered) return eina_list_iterator_new(pd->iterator_list); From de5191e3d6898851ea6c3e39a4491ef38843bc83 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:38:44 +0000 Subject: [PATCH 56/86] elm colorselector - fix unused param warn --- src/lib/elementary/elm_colorselector.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/elm_colorselector.c b/src/lib/elementary/elm_colorselector.c index 80ffdf8129..42d13995d2 100644 --- a/src/lib/elementary/elm_colorselector.c +++ b/src/lib/elementary/elm_colorselector.c @@ -2733,7 +2733,7 @@ _elm_color_item_efl_ui_focus_object_focus_parent_get(const Eo *obj EINA_UNUSED, } EOLIAN static Efl_Ui_Focus_Manager* -_elm_color_item_efl_ui_focus_object_focus_manager_get(const Eo *obj, Elm_Color_Item_Data *pd) +_elm_color_item_efl_ui_focus_object_focus_manager_get(const Eo *obj EINA_UNUSED, Elm_Color_Item_Data *pd) { return efl_ui_focus_object_focus_manager_get(WIDGET(pd)); } From f3d5fd36ae4cb61cacb899cd49b7b7fb04f7d58d Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:39:25 +0000 Subject: [PATCH 57/86] elm toolbar - fix unused param warn --- src/lib/elementary/elm_toolbar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c index a8f541ff7d..0a5a56d7fc 100644 --- a/src/lib/elementary/elm_toolbar.c +++ b/src/lib/elementary/elm_toolbar.c @@ -4072,7 +4072,7 @@ _elm_toolbar_efl_ui_focus_composition_prepare(Eo *obj, Elm_Toolbar_Data *pd) } EOLIAN static Efl_Ui_Focus_Object* -_elm_toolbar_item_efl_ui_focus_object_focus_parent_get(const Eo *obj, Elm_Toolbar_Item_Data *pd) +_elm_toolbar_item_efl_ui_focus_object_focus_parent_get(const Eo *obj EINA_UNUSED, Elm_Toolbar_Item_Data *pd) { return WIDGET(pd); } From 8594417a8d1c7d59f9dd29c7406b55d6aa230928 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:40:02 +0000 Subject: [PATCH 58/86] elm main - fix unused param in cb warn --- src/lib/elementary/elm_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elementary/elm_main.c b/src/lib/elementary/elm_main.c index 75f5641f6f..6fcfc39678 100644 --- a/src/lib/elementary/elm_main.c +++ b/src/lib/elementary/elm_main.c @@ -42,7 +42,7 @@ static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV }; EAPI Elm_Version *elm_version = &_version; static void -_focus_ev_redirect_cb(void *data, const Efl_Event *ev) +_focus_ev_redirect_cb(void *data, const Efl_Event *ev EINA_UNUSED) { efl_event_callback_call(data, EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_GEOMETRY_CHANGED, NULL); } From b3966ac073a0697a5a01a377d3fc8c8b3a53218f Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:40:35 +0000 Subject: [PATCH 59/86] elm test - button - remove unused local var warn --- src/bin/elementary/test_scroller.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/elementary/test_scroller.c b/src/bin/elementary/test_scroller.c index 7ca95955fe..3861e924b5 100644 --- a/src/bin/elementary/test_scroller.c +++ b/src/bin/elementary/test_scroller.c @@ -1065,7 +1065,7 @@ test_scroller6(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event void test_scroller7(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *win, *scr, *lb, *table, *btn, *btn2, *inner_table, *o, *inner_button; + Evas_Object *win, *scr, *lb, *table, *btn, *btn2, *inner_table, *o; win = elm_win_util_standard_add("Scroller with unfocusable content", "Scroller with unfocusable content"); elm_win_autodel_set(win, EINA_TRUE); From e75e000d96232e4fb3115d29243e8c613cb1528e Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:41:24 +0000 Subject: [PATCH 60/86] elm tests - gengrid - fix unused param warn --- src/tests/elementary/elm_test_gengrid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/elementary/elm_test_gengrid.c b/src/tests/elementary/elm_test_gengrid.c index b363ba44ab..95e55052a9 100644 --- a/src/tests/elementary/elm_test_gengrid.c +++ b/src/tests/elementary/elm_test_gengrid.c @@ -91,7 +91,7 @@ EFL_END_TEST #endif static void -_realized(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_realized(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { static int i = 0; From 46bd405acf42439512708acf565a2ec0bb25b805 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:42:19 +0000 Subject: [PATCH 61/86] elm tests - focus - fix unused param warn --- src/tests/elementary/elm_test_focus_sub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/elementary/elm_test_focus_sub.c b/src/tests/elementary/elm_test_focus_sub.c index 9fdddbd2d2..3c0d994aeb 100644 --- a/src/tests/elementary/elm_test_focus_sub.c +++ b/src/tests/elementary/elm_test_focus_sub.c @@ -6,7 +6,7 @@ typedef struct { } Focus_Test_Sub_Main_Data; EOLIAN static Eina_Rect -_focus_test_sub_main_efl_gfx_entity_geometry_get(const Eo *obj, Focus_Test_Sub_Main_Data *pd) +_focus_test_sub_main_efl_gfx_entity_geometry_get(const Eo *obj EINA_UNUSED, Focus_Test_Sub_Main_Data *pd EINA_UNUSED) { return EINA_RECT(-10, -10, 40, 40); } From aeaed76b5c852034eaa7c085c1693ae94ccfbf99 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:43:02 +0000 Subject: [PATCH 62/86] elm teest - focus - fix unused param warn --- src/tests/elementary/elm_test_widget_focus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/elementary/elm_test_widget_focus.c b/src/tests/elementary/elm_test_widget_focus.c index ec4be8f2d3..113ae2c86b 100644 --- a/src/tests/elementary/elm_test_widget_focus.c +++ b/src/tests/elementary/elm_test_widget_focus.c @@ -140,7 +140,7 @@ static const Simple_Test_Widget simple_widgets[] = { }; static void -_eventing_test(void *data, Evas_Object *obj, void *event_info) +_eventing_test(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Eina_Bool *val = data; From 4b79c95b35f7a8194d6c20b7cdd5929bf324ce61 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 4 Dec 2018 08:45:02 +0000 Subject: [PATCH 63/86] elm config - fix warnings about unused vars and params --- src/lib/elementary/elm_config.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c index 6102ec6dcb..8466faff4d 100644 --- a/src/lib/elementary/elm_config.c +++ b/src/lib/elementary/elm_config.c @@ -1436,7 +1436,7 @@ _profile_fetch_from_conf(void) { char buf[PATH_MAX], *p, *s; Eet_File *ef = NULL; - int len = 0, i; + int len = 0; // if env var - use profile without question s = getenv("ELM_PROFILE"); @@ -2188,9 +2188,9 @@ _elm_config_eet_close_error_get(Eet_File *ef, static char * _elm_config_profile_name_get() { - char buf[PATH_MAX], *p, *s; + char buf[PATH_MAX], *p; Eet_File *ef = NULL; - int len = 0, i; + int len = 0; char *rst = NULL; _elm_config_user_dir_snprintf(buf, sizeof(buf), "config/profile.cfg"); @@ -4408,12 +4408,11 @@ _config_change_delay_cb(void *data EINA_UNUSED) static Eina_Bool _elm_config_file_monitor_cb(void *data EINA_UNUSED, - int type, + int type EINA_UNUSED, void *event) { Eio_Monitor_Event *ev = event; const char *file = ecore_file_file_get(ev->filename); - char buf[PATH_MAX]; if (ev->monitor == _eio_config_monitor) { From 0d4032ac2711e9ccea0dec21ee2fe4695af38d2c Mon Sep 17 00:00:00 2001 From: Yeongjong Lee Date: Tue, 4 Dec 2018 10:09:33 +0100 Subject: [PATCH 64/86] examples: update gitignore Test Plan: make examples git state Reviewers: Jaehyun_Cho, Hermet, segfaultxavi Reviewed By: segfaultxavi Subscribers: segfaultxavi, cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7406 --- src/examples/ecore/.gitignore | 1 + src/examples/edje/.gitignore | 1 + src/examples/eet/.gitignore | 14 +++++++------- src/examples/eina/.gitignore | 4 ++++ src/examples/elementary/.gitignore | 8 ++++++++ 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/examples/ecore/.gitignore b/src/examples/ecore/.gitignore index cda3e56d8d..7f0a1c8a82 100644 --- a/src/examples/ecore/.gitignore +++ b/src/examples/ecore/.gitignore @@ -37,6 +37,7 @@ /ecore_file_download_example /ecore_getopt_example /ecore_idler_example +/ecore_input_joystick_example /ecore_imf_example /ecore_job_example /ecore_pipe_gstreamer_example diff --git a/src/examples/edje/.gitignore b/src/examples/edje/.gitignore index 027f4d35b8..7c7accdf56 100644 --- a/src/examples/edje/.gitignore +++ b/src/examples/edje/.gitignore @@ -1,6 +1,7 @@ /animations2 /codegen_example_generated.c /codegen_example_generated.h +/edje-anchors /edje-animations /edje-basic /edje-basic2 diff --git a/src/examples/eet/.gitignore b/src/examples/eet/.gitignore index adf609354b..7d6591a6c1 100644 --- a/src/examples/eet/.gitignore +++ b/src/examples/eet/.gitignore @@ -1,7 +1,7 @@ -/eet_basic -/eet_data_cipher_decipher -/eet_data_file_descriptor_01 -/eet_data_file_descriptor_02 -/eet_data_nested -/eet_data_simple -/eet_file +/eet-basic +/eet-data-cipher_decipher +/eet-data-file_descriptor_01 +/eet-data-file_descriptor_02 +/eet-data-nested +/eet-data-simple +/eet-file diff --git a/src/examples/eina/.gitignore b/src/examples/eina/.gitignore index 3762b139af..5e1fa1e416 100644 --- a/src/examples/eina/.gitignore +++ b/src/examples/eina/.gitignore @@ -28,13 +28,17 @@ /eina_log_03 /eina_magic_01 /eina_simple_xml_parser_01 +/eina_simple_xml_parser_02 /eina_str_01 /eina_strbuf_01 +/eina_strbuf_02 /eina_stringshare_01 /eina_tiler_01 +/eina_tiler_02 /eina_tmpstr_01 /eina_value_01 /eina_value_02 /eina_value_03 +/eina_value_04 /eina_xattr_01 /eina_xattr_02 diff --git a/src/examples/elementary/.gitignore b/src/examples/elementary/.gitignore index f59adb353e..54d71c14a0 100644 --- a/src/examples/elementary/.gitignore +++ b/src/examples/elementary/.gitignore @@ -53,6 +53,8 @@ /index_example_02 /inwin_example /label_example_01 +/label_example_02 +/label_example_03 /layout_example_01 /layout_example_02 /layout_example_03 @@ -161,3 +163,9 @@ /codegen_example_generated.c /codegen_example_generated.h /toolbar_cxx_example_01 +/efl_canvas_layout_text +/efl_ui_list_view_example_1 +/efl_ui_list_view_example_2 +/efl_ui_list_view_example_3 +/efl_ui_theme_example_01 +/efl_ui_theme_example_02 From 44db8aa9a0db716db633077ecf1d64a4c7859a36 Mon Sep 17 00:00:00 2001 From: Lauro Moura Date: Tue, 4 Dec 2018 15:50:48 -0200 Subject: [PATCH 65/86] eolian_cxx: Add documentation field to property_def Test Plan: run eolian_cxx suite Reviewers: vitor.sousa, felipealmeida Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7414 --- src/lib/eolian_cxx/grammar/klass_def.hpp | 10 ++++++++++ src/tests/eolian_cxx/eolian_cxx_test_documentation.cc | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp index 1db9324001..08240b6e28 100644 --- a/src/lib/eolian_cxx/grammar/klass_def.hpp +++ b/src/lib/eolian_cxx/grammar/klass_def.hpp @@ -802,6 +802,7 @@ struct property_def { klass_name klass; std::string name; + documentation_def documentation; efl::eina::optional getter; efl::eina::optional setter; @@ -810,6 +811,7 @@ struct property_def { return lhs.klass == rhs.klass && lhs.name == rhs.name + && lhs.documentation == rhs.documentation && lhs.getter == rhs.getter && lhs.setter == rhs.setter; } @@ -828,6 +830,14 @@ struct property_def const Eolian_Class *eolian_klass = eolian_function_class_get(function); klass = klass_name(eolian_klass, {attributes::qualifier_info::is_none, std::string()}); + + Eolian_Implement const* implement = ::eolian_function_implement_get(function); + if (!implement) + return; + + Eolian_Function_Type type = ::eolian_function_type_get(function); + if (type == EOLIAN_PROP_GET || type == EOLIAN_PROP_SET || type == EOLIAN_PROPERTY) + documentation = eolian_implement_documentation_get(implement, EOLIAN_PROPERTY); } }; diff --git a/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc b/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc index 4690f45498..d3908ffb42 100644 --- a/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc +++ b/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc @@ -144,6 +144,12 @@ EFL_START_TEST(eolian_cxx_test_property_docs) ck_assert_str_eq(doc.summary.c_str(), "Set documentation."); ck_assert_str_eq(doc.description.c_str(), ""); ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class* + + auto property_iter = klass.properties.begin(); + auto property = *property_iter; + doc = property.documentation; + ck_assert_str_eq(doc.summary.c_str(), "Property common documentation."); + ck_assert_str_eq(doc.since.c_str(), "1.18"); } EFL_END_TEST From dc4eb5d72829b1650015319c0791ffc737f0740d Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Wed, 5 Dec 2018 10:35:30 +0900 Subject: [PATCH 66/86] efl_ui_win: enable bg color set although alpha is set Summary: This patch sets background transparent if window supports alpha. If alpha window does not emit signal to show background rectangle, then the background color set by _efl_ui_win_part_color_set cannot be applied because the background rectangle remains hidden. This patch fixes the side effect of D6569. Test Plan: Run Efl.Ui.Win (Bg part) in elementary_test. Reviewers: zmike, devilhorns, woohyun Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7302 --- src/lib/elementary/efl_ui_win.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 535316119e..1e12b46702 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -4659,11 +4659,18 @@ _elm_win_frame_style_update(Efl_Ui_Win_Data *sd, Eina_Bool force_emit, Eina_Bool else #endif focus = ecore_evas_focus_get(sd->ee); - bg_solid = sd->csd.need_bg_solid && (!alpha); bg_standard = sd->csd.need_bg_standard; unresizable = sd->csd.need_unresizable; menu = sd->csd.need_menu; indicator = sd->csd.need_indicator; + bg_solid = sd->csd.need_bg_solid; + /* Set background transparent if window supports alpha. + * If alpha window does not emit signal to show background rectangle, then + * the background color set by _efl_ui_win_part_color_set cannot be applied + * because the background rectangle remains hidden. + */ + if (alpha && bg_solid && !(sd->csd.cur_bg_solid)) + edje_object_color_class_set(sd->frame_obj, "elm/win/background", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); /* FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME * At the moment, E Wayland uses SSD for its internal windows. Which means From 23c1e63eaa746cab467adb6cb9f12e93673b8dbf Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Wed, 5 Dec 2018 11:04:23 +0100 Subject: [PATCH 67/86] Revert "Revert "eina: add locale-independent eina_convert_strtod_c function"" This reverts commit ddd263875896c11b7d0875c7357a3322243290d9. --- src/lib/eina/eina_convert.c | 10 ++++++++++ src/lib/eina/eina_convert.h | 16 ++++++++++++++++ src/lib/eina/eina_main.c | 19 +++++++++++++++++++ src/lib/eina/eina_private.h | 6 ++++++ src/tests/eina/eina_test_convert.c | 21 +++++++++++++++++++++ 5 files changed, 72 insertions(+) diff --git a/src/lib/eina/eina_convert.c b/src/lib/eina/eina_convert.c index 2943b37343..152ef5be4a 100644 --- a/src/lib/eina/eina_convert.c +++ b/src/lib/eina/eina_convert.c @@ -453,6 +453,16 @@ eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) return EINA_TRUE; } +EAPI double +eina_convert_strtod_c(const char *nptr, char **endptr) +{ +#ifdef _WIN32 + return _strtod_l(nptr, endptr, _eina_c_locale_get()); +#else + return strtod_l(nptr, endptr, _eina_c_locale_get()); +#endif +} + /** * @} */ diff --git a/src/lib/eina/eina_convert.h b/src/lib/eina/eina_convert.h index 026fc6c8f6..337cd88ad8 100644 --- a/src/lib/eina/eina_convert.h +++ b/src/lib/eina/eina_convert.h @@ -333,6 +333,22 @@ EAPI Eina_Bool eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3); +/** + * @brief Converts a string to a floating point number. + * + * @param[in] nptr a string to convert. It shouldn't be NULL. + * @param[out] endptr If endptr is not NULL, a pointer to the character after the last + * character used in the conversion is stored in the location referenced + * by endptr. + * @return a double type floating point number. + * + * This function returns converted floating point number with locale-independency. + * Actually, it use "C" locale for strtod_l function internally. If you need strtod + * without locale-dependency, this function can replace strtod. + * For more information, please refer documents of strtod, strtod_l. + */ +EAPI double eina_convert_strtod_c(const char *nptr, char **endptr); + /** * @} */ diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c index 024d1e3eaa..535e4e7611 100644 --- a/src/lib/eina/eina_main.c +++ b/src/lib/eina/eina_main.c @@ -85,6 +85,7 @@ static int _eina_main_count = 0; static int _eina_main_thread_count = 0; #endif static int _eina_log_dom = -1; +static locale_t _eina_c_locale; #ifdef ERR #undef ERR @@ -285,6 +286,12 @@ eina_init(void) if (EINA_LIKELY(_eina_main_count > 0)) return ++_eina_main_count; +#ifdef _WIN32 + _eina_c_locale = _create_locale(LC_ALL, "C"); +#else + _eina_c_locale = newlocale(LC_ALL_MASK, "C", NULL); +#endif + srand(time(NULL)); while (eina_seed == 0) eina_seed = rand(); @@ -348,6 +355,12 @@ eina_init(void) return 1; } +locale_t +_eina_c_locale_get(void) +{ + return _eina_c_locale; +} + EAPI int eina_shutdown(void) { @@ -359,6 +372,12 @@ eina_shutdown(void) _eina_main_count--; if (EINA_UNLIKELY(_eina_main_count == 0)) { +#ifdef _WIN32 + _free_locale(_eina_c_locale); +#else + freelocale(_eina_c_locale); +#endif + eina_log_timing(_eina_log_dom, EINA_LOG_STATE_START, EINA_LOG_STATE_SHUTDOWN); diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h index eab59586c1..be826e0fb0 100644 --- a/src/lib/eina/eina_private.h +++ b/src/lib/eina/eina_private.h @@ -20,6 +20,7 @@ #define EINA_PRIVATE_H_ #include +#include #ifdef _WIN32 # include @@ -151,6 +152,11 @@ Eina_Stringshare *eina_file_sanitize(const char *path); void eina_freeq_main_set(Eina_FreeQ *fq); +#ifdef _WIN32 +typedef _locale_t locale_t; +#endif +locale_t _eina_c_locale_get(void); + #include "eina_inline_private.h" #endif /* EINA_PRIVATE_H_ */ diff --git a/src/tests/eina/eina_test_convert.c b/src/tests/eina/eina_test_convert.c index 1b08a00a19..c8ccfcb772 100644 --- a/src/tests/eina/eina_test_convert.c +++ b/src/tests/eina/eina_test_convert.c @@ -160,10 +160,31 @@ _eina_convert_fp_check(double d, Eina_F32p32 fp, int length) } EFL_END_TEST +static void +_eina_convert_strtod_c_check(const char *str, double expected_result) +{ + double result = eina_convert_strtod_c(str, NULL); + + fail_if(result != expected_result); +} + +EFL_START_TEST(eina_convert_strtod_c_simple) +{ + _eina_convert_strtod_c_check("0.0", 0.0); + _eina_convert_strtod_c_check("0.5", 0.5); + _eina_convert_strtod_c_check("1.0", 1.0); + _eina_convert_strtod_c_check("-0.5", -0.5); + _eina_convert_strtod_c_check("-1.0", -1.0); + _eina_convert_strtod_c_check("3.45e-2", 0.0345); + _eina_convert_strtod_c_check("3.45e+2", 345.0); +} +EFL_END_TEST + void eina_test_convert(TCase *tc) { tcase_add_test(tc, eina_convert_simple); tcase_add_test(tc, eina_convert_double); tcase_add_test(tc, eina_convert_fp); + tcase_add_test(tc, eina_convert_strtod_c_simple); } From c1429aa7b8fced8e5bf8b68c260d1afcee3dbb6c Mon Sep 17 00:00:00 2001 From: Youngbok Shin Date: Wed, 5 Dec 2018 07:56:22 +0000 Subject: [PATCH 68/86] eina: fix a build failure caused by missing 'locale_t' from OSX In OSX, locale_t is included in xlocale.h @fix Differential Revision: https://phab.enlightenment.org/D7395 --- src/lib/eina/eina_private.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h index be826e0fb0..d377357b67 100644 --- a/src/lib/eina/eina_private.h +++ b/src/lib/eina/eina_private.h @@ -21,6 +21,9 @@ #include #include +#if defined (__MacOSX__) || (defined (__MACH__) && defined (__APPLE__)) +#include +#endif #ifdef _WIN32 # include From e686199a76a5f253889f595a7ba3337965275e71 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 5 Dec 2018 20:01:28 +0900 Subject: [PATCH 69/86] ecore_imf: Fix document about ecore_imf_context_input_panel_position_set() Signed-off-by: Jihoon Kim --- src/lib/ecore_imf/Ecore_IMF.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/ecore_imf/Ecore_IMF.h b/src/lib/ecore_imf/Ecore_IMF.h index d9ba33bd0f..85c43234a7 100644 --- a/src/lib/ecore_imf/Ecore_IMF.h +++ b/src/lib/ecore_imf/Ecore_IMF.h @@ -1978,7 +1978,7 @@ EAPI void ecore_imf_context_mime_type_accept_set(Ecore_I /** * @ingroup Ecore_IMF_Context_Group * @brief Sets the x,y coordinates of the input panel. - * This API can be used in floating mode. + * @remarks This API can be used in floating mode. * * @since 1.21.0 * From e8827de96da406986605ac8b56c2e00aa06efcc7 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Wed, 5 Dec 2018 20:28:24 +0900 Subject: [PATCH 70/86] efl_ui_tab_bar: fix error about double free Summary: tab is the parent of the icon. so deleting the tab causes deleting the icon automatically. in this case, it can cause double-freed problem once icon has deleted. Test Plan: elementary_test -to efl.ui.tab_pager Reviewers: cedric, Jaehyun_Cho, jpeg Reviewed By: Jaehyun_Cho Subscribers: #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D7407 --- src/lib/elementary/efl_ui_tab_bar.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_tab_bar.c b/src/lib/elementary/efl_ui_tab_bar.c index 7aeb78cf5f..7d9f5c29dc 100644 --- a/src/lib/elementary/efl_ui_tab_bar.c +++ b/src/lib/elementary/efl_ui_tab_bar.c @@ -298,7 +298,6 @@ _efl_ui_tab_bar_tab_remove(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Bar_Data *sd, int ind _tab_unselect(sd, ti); evas_object_box_remove(sd->bx, ti->tab); efl_del(ti->tab); - efl_del(ti->icon); sd->tab_infos = eina_list_remove(sd->tab_infos, ti); sd->cnt --; From ebc2e0f5828318fc39ea0b6db2ac890aaddc586b Mon Sep 17 00:00:00 2001 From: Daniel Zaoui Date: Wed, 5 Dec 2018 22:54:38 +0200 Subject: [PATCH 71/86] Tests: adapt some tests for Exactness Home directory cannot be used for the tests as the shots will always be different between machines. A test directory is created to solve this issue. --- src/bin/elementary/test_fileselector.c | 27 ++++++++++++++++--- src/bin/elementary/test_fileselector_button.c | 4 +-- src/bin/elementary/test_fileselector_entry.c | 20 +++++++------- src/bin/elementary/test_panel.c | 24 ++++++++++++++++- 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/src/bin/elementary/test_fileselector.c b/src/bin/elementary/test_fileselector.c index 3568fcdb57..1c23066097 100644 --- a/src/bin/elementary/test_fileselector.c +++ b/src/bin/elementary/test_fileselector.c @@ -511,13 +511,33 @@ _edje_filter(const char *path, Eina_Bool dir, return EINA_FALSE; } +static void +_create_dir_struct(void) +{ + FILE *fp; + if (mkdir("/tmp/test_fs", S_IRWXU) < 0) + printf("make dir /tmp/test_fs failed!\n"); + fp = fopen("/tmp/test_fs/a_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs/k_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs/m_file.txt", "w"); + if (fp) fclose(fp); + + if (mkdir("/tmp/test_fs/a_subdir", S_IRWXU) < 0) + printf("make dir /tmp/test_fs/a_subdir failed!\n"); + fp = fopen("/tmp/test_fs/a_subdir/d_sub_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_fs/a_subdir/j_sub_file.txt", "w"); + if (fp) fclose(fp); +} + void test_fileselector(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *win, *fs, *box, *vbox, *sep; - const char * home_env; /* Set the locale according to the system pref. * If you don't do so the file selector will order the files list in @@ -538,6 +558,7 @@ test_fileselector(void *data EINA_UNUSED, elm_win_resize_object_add(win, box); evas_object_show(box); + _create_dir_struct(); /* Create a dir struct in /tmp */ fs = elm_fileselector_add(box); evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -548,9 +569,7 @@ test_fileselector(void *data EINA_UNUSED, elm_fileselector_is_save_set(fs, EINA_TRUE); /* make the file list a tree with dir expandable in place */ elm_fileselector_expandable_set(fs, EINA_FALSE); - /* start the fileselector in the home dir */ - home_env = eina_environment_home_get(); - elm_fileselector_path_set(fs, home_env); + elm_fileselector_path_set(fs, "/tmp/test_fs"); /* provides suggested name (just for showing) */ elm_fileselector_current_name_set(fs, "No name"); diff --git a/src/bin/elementary/test_fileselector_button.c b/src/bin/elementary/test_fileselector_button.c index f87db9d0e9..b04e9d38ef 100644 --- a/src/bin/elementary/test_fileselector_button.c +++ b/src/bin/elementary/test_fileselector_button.c @@ -65,7 +65,7 @@ _api_bt_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) } static void -create_dir_struct(void) +_create_dir_struct(void) { FILE *fp; if (mkdir("/tmp/test_fs_bt", S_IRWXU) < 0) @@ -182,7 +182,7 @@ test_fileselector_button(void *data EINA_UNUSED, elm_box_pack_end(bxx, vbox); - create_dir_struct(); /* Create a dir struct in /tmp */ + _create_dir_struct(); /* Create a dir struct in /tmp */ /* file selector button */ ic = elm_icon_add(win); elm_icon_standard_set(ic, "file"); diff --git a/src/bin/elementary/test_fileselector_entry.c b/src/bin/elementary/test_fileselector_entry.c index 07d6cf0fba..3bfd438204 100644 --- a/src/bin/elementary/test_fileselector_entry.c +++ b/src/bin/elementary/test_fileselector_entry.c @@ -65,25 +65,25 @@ _api_bt_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) } static void -create_dir_struct(void) +_create_dir_struct(void) { FILE *fp; int ret = 0; - ret = mkdir("/tmp/test_fs_bt", S_IRWXU); + ret = mkdir("/tmp/test_fs_en", S_IRWXU); if (ret < 0) return; - fp = fopen("/tmp/test_fs_bt/a_file.txt", "w"); + fp = fopen("/tmp/test_fs_en/a_file.txt", "w"); if (fp) fclose(fp); - fp = fopen("/tmp/test_fs_bt/k_file.txt", "w"); + fp = fopen("/tmp/test_fs_en/k_file.txt", "w"); if (fp) fclose(fp); - fp = fopen("/tmp/test_fs_bt/m_file.txt", "w"); + fp = fopen("/tmp/test_fs_en/m_file.txt", "w"); if (fp) fclose(fp); - ret = mkdir("/tmp/test_fs_bt/a_subdir", S_IRWXU); + ret = mkdir("/tmp/test_fs_en/a_subdir", S_IRWXU); if (ret < 0) return; - fp = fopen("/tmp/test_fs_bt/a_subdir/d_sub_file.txt", "w"); + fp = fopen("/tmp/test_fs_en/a_subdir/d_sub_file.txt", "w"); if (fp) fclose(fp); - fp = fopen("/tmp/test_fs_bt/a_subdir/j_sub_file.txt", "w"); + fp = fopen("/tmp/test_fs_en/a_subdir/j_sub_file.txt", "w"); if (fp) fclose(fp); } @@ -190,14 +190,14 @@ test_fileselector_entry(void *data EINA_UNUSED, elm_box_pack_end(bxx, vbox); - create_dir_struct(); /* Create a dir struct in /tmp */ + _create_dir_struct(); /* Create a dir struct in /tmp */ /* file selector entry */ ic = elm_icon_add(win); elm_icon_standard_set(ic, "file"); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); fs_en = elm_fileselector_entry_add(win); - elm_fileselector_path_set(fs_en, "/tmp/test_fs_bt"); + elm_fileselector_path_set(fs_en, "/tmp/test_fs_en"); elm_object_text_set(fs_en, "Select a file"); elm_object_part_content_set(fs_en, "button icon", ic); evas_object_size_hint_weight_set(fs_en, EVAS_HINT_EXPAND, 0.0); diff --git a/src/bin/elementary/test_panel.c b/src/bin/elementary/test_panel.c index 60ad94edb2..371e6d5541 100644 --- a/src/bin/elementary/test_panel.c +++ b/src/bin/elementary/test_panel.c @@ -83,6 +83,27 @@ _item_del(void *data, Evas_Object *obj EINA_UNUSED) eina_stringshare_del(data); } +static void +_create_dir_struct(void) +{ + FILE *fp; + if (mkdir("/tmp/test_panel", S_IRWXU) < 0) + printf("make dir /tmp/test_panel failed!\n"); + fp = fopen("/tmp/test_panel/a_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_panel/k_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_panel/m_file.txt", "w"); + if (fp) fclose(fp); + + if (mkdir("/tmp/test_panel/a_subdir", S_IRWXU) < 0) + printf("make dir /tmp/test_panel/a_subdir failed!\n"); + fp = fopen("/tmp/test_panel/a_subdir/d_sub_file.txt", "w"); + if (fp) fclose(fp); + fp = fopen("/tmp/test_panel/a_subdir/j_sub_file.txt", "w"); + if (fp) fclose(fp); +} + static void _fill_list(Evas_Object *obj, Elm_Genlist_Item_Class *itc) { @@ -95,7 +116,8 @@ _fill_list(Evas_Object *obj, Elm_Genlist_Item_Class *itc) Eina_Iterator *it; const char *name; - it = eina_file_ls(eina_environment_home_get()); + _create_dir_struct(); + it = eina_file_ls("/tmp/test_panel"); EINA_ITERATOR_FOREACH(it, name) { if (x >= LIST_ITEM_MAX) From 716f3acfbc982613447c6ad1935c41edc7943264 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 6 Dec 2018 14:41:51 +0900 Subject: [PATCH 72/86] doc: remove since_tizen. This tag must be valid for only tizen world. --- src/lib/ecore/Ecore_Legacy.h | 8 -------- src/lib/evas/Evas_GL.h | 1 - 2 files changed, 9 deletions(-) diff --git a/src/lib/ecore/Ecore_Legacy.h b/src/lib/ecore/Ecore_Legacy.h index 80c0493034..94c4250d51 100644 --- a/src/lib/ecore/Ecore_Legacy.h +++ b/src/lib/ecore/Ecore_Legacy.h @@ -274,10 +274,6 @@ EAPI void ecore_timer_freeze(Ecore_Timer *timer); /** * @brief Return whether the timer is freezing. * - * @if MOBILE @since_tizen 3.0 - * @elseif WEARABLE @since_tizen 3.0 - * @endif - * * @return True if the timer object is freezed, false otherwise. * * @see ecore_timer_freeze(), ecore_timer_thaw() @@ -287,10 +283,6 @@ EAPI Eina_Bool ecore_timer_freeze_get(Ecore_Timer *timer); /** * @brief Resumes a frozen (paused) timer. * - * @if MOBILE @since_tizen 2.3 - * @elseif WEARABLE @since_tizen 2.3.1 - * @endif - * * @remarks The timer will be resumed from its previous relative position in time. That * means, if it had X seconds remaining until expire when it was paused, it will * be started now with those same X seconds remaining to expire again. But diff --git a/src/lib/evas/Evas_GL.h b/src/lib/evas/Evas_GL.h index fa3e6f4fe4..b6b642400f 100644 --- a/src/lib/evas/Evas_GL.h +++ b/src/lib/evas/Evas_GL.h @@ -5529,7 +5529,6 @@ EvasGLImage *img = glapi->evasglCreateImageForContext /*------- EvasGL / EGL-related functions -------*/ /** * @name Evas GL Sync object functions - * @since_tizen 2.3 * @since 1.12 * @{ */ From 09ca4531bb8fe5ba47eac0659bd60d78cbb2d2ee Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:24:23 -0800 Subject: [PATCH 73/86] ecore_con: refactor TCP Dialer to always wait for thread to finish. This is a better way to avoid race execution by the async end callback that could happen at some later random point in time. The thread are cancelled right away, so event if their is a "wait" time set, it should never actually matter and be always instantaneous. Differential Revision: https://phab.enlightenment.org/D7396 --- src/lib/ecore_con/efl_net_dialer_tcp.c | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.c b/src/lib/ecore_con/efl_net_dialer_tcp.c index 6b29831aa2..a35d56501d 100644 --- a/src/lib/ecore_con/efl_net_dialer_tcp.c +++ b/src/lib/ecore_con/efl_net_dialer_tcp.c @@ -42,6 +42,17 @@ typedef struct _Efl_Net_Dialer_Tcp_Data double timeout_dial; } Efl_Net_Dialer_Tcp_Data; +static void +_efl_net_dialer_tcp_async_stop(Efl_Net_Dialer_Tcp_Data *pd) +{ + if (pd->connect.thread) + { + ecore_thread_cancel(pd->connect.thread); + ecore_thread_wait(pd->connect.thread, 1); + pd->connect.thread = NULL; + } +} + EOLIAN static Eo* _efl_net_dialer_tcp_efl_object_constructor(Eo *o, Efl_Net_Dialer_Tcp_Data *pd EINA_UNUSED) { @@ -63,11 +74,8 @@ _efl_net_dialer_tcp_efl_object_invalidate(Eo *o, Efl_Net_Dialer_Tcp_Data *pd) efl_event_thaw(o); } - if (pd->connect.thread) - { - ecore_thread_cancel(pd->connect.thread); - pd->connect.thread = NULL; - } + _efl_net_dialer_tcp_async_stop(pd); + efl_invalidate(efl_super(o, MY_CLASS)); } @@ -87,11 +95,7 @@ _efl_net_dialer_tcp_connect_timeout(Eo *o, const Eina_Value v) Efl_Net_Dialer_Tcp_Data *pd = efl_data_scope_get(o, MY_CLASS); Eina_Error err = ETIMEDOUT; - if (pd->connect.thread) - { - ecore_thread_cancel(pd->connect.thread); - pd->connect.thread = NULL; - } + _efl_net_dialer_tcp_async_stop(pd); efl_ref(o); efl_io_reader_eos_set(o, EINA_TRUE); @@ -155,7 +159,7 @@ _efl_net_dialer_tcp_connected(void *data, const struct sockaddr *addr, socklen_t } EOLIAN static Eina_Error -_efl_net_dialer_tcp_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Tcp_Data *pd EINA_UNUSED, const char *address) +_efl_net_dialer_tcp_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Tcp_Data *pd, const char *address) { const char *proxy_env = NULL, *no_proxy_env = NULL; @@ -164,11 +168,7 @@ _efl_net_dialer_tcp_efl_net_dialer_dial(Eo *o, Efl_Net_Dialer_Tcp_Data *pd EINA_ EINA_SAFETY_ON_TRUE_RETURN_VAL(efl_io_closer_closed_get(o), EBADF); EINA_SAFETY_ON_TRUE_RETURN_VAL(efl_loop_fd_get(o) >= 0, EALREADY); - if (pd->connect.thread) - { - ecore_thread_cancel(pd->connect.thread); - pd->connect.thread = NULL; - } + _efl_net_dialer_tcp_async_stop(pd); if (!pd->proxy) { From d5d6aa701b159225eeeb01594853c05aba1273ea Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:26:12 -0800 Subject: [PATCH 74/86] ecore_con: enforce connection state to not let a hanging connection continue. It is expected that when the connection state is forcefully set, that all hanging connection should be stopped instead of them continuing and later resetting the state to having a connection. Differential Revision: https://phab.enlightenment.org/D7397 --- src/lib/ecore_con/efl_net_dialer_tcp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.c b/src/lib/ecore_con/efl_net_dialer_tcp.c index a35d56501d..57f5cf93cd 100644 --- a/src/lib/ecore_con/efl_net_dialer_tcp.c +++ b/src/lib/ecore_con/efl_net_dialer_tcp.c @@ -241,6 +241,8 @@ EOLIAN static void _efl_net_dialer_tcp_efl_net_dialer_connected_set(Eo *o, Efl_Net_Dialer_Tcp_Data *pd, Eina_Bool connected) { if (pd->connect.timeout) eina_future_cancel(pd->connect.timeout); + // This has to be done before the state check as there could be a connection in progress that need to be canceled + if (!connected) _efl_net_dialer_tcp_async_stop(pd); if (pd->connected == connected) return; pd->connected = connected; if (connected) efl_event_callback_call(o, EFL_NET_DIALER_EVENT_CONNECTED, NULL); From 6e9a045d7dbfaab031111d47ea6da62fb50d75cb Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:43:15 -0800 Subject: [PATCH 75/86] ecore_con: fix multi shutdown excessive warning by initializing ecore independently. Differential Revision: https://phab.enlightenment.org/D7398 --- src/tests/ecore_con/ecore_con_suite.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tests/ecore_con/ecore_con_suite.c b/src/tests/ecore_con/ecore_con_suite.c index 614af39500..b7a5192a38 100644 --- a/src/tests/ecore_con/ecore_con_suite.c +++ b/src/tests/ecore_con/ecore_con_suite.c @@ -28,6 +28,7 @@ _timeout_timer(void *d EINA_UNUSED) SUITE_INIT(ecore_con) { + ck_assert_int_eq(ecore_init(), 1); ck_assert_int_eq(ecore_con_init(), 1); timeout_timer = ecore_timer_add(TIMEOUT, _timeout_timer, NULL); } @@ -37,6 +38,7 @@ SUITE_SHUTDOWN(ecore_con) if (timeout_timer) ecore_timer_del(timeout_timer); timeout_timer = NULL; ck_assert_int_eq(ecore_con_shutdown(), 0); + ck_assert_int_eq(ecore_shutdown(), 0); } int From bcc59fd98f59b075b312a5e4c70079b7609036e5 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:44:43 -0800 Subject: [PATCH 76/86] ecore_con: reinit ecore_con after complete shutdown so that suite ecore_con_shutdown doesn't complain. Differential Revision: https://phab.enlightenment.org/D7399 --- src/tests/ecore_con/ecore_con_test_ecore_con.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tests/ecore_con/ecore_con_test_ecore_con.c b/src/tests/ecore_con/ecore_con_test_ecore_con.c index 81eb079b3b..a0e532be39 100644 --- a/src/tests/ecore_con/ecore_con_test_ecore_con.c +++ b/src/tests/ecore_con/ecore_con_test_ecore_con.c @@ -491,6 +491,8 @@ EFL_START_TEST(ecore_test_ecore_con_shutdown_bef_init) ret = ecore_con_shutdown(); fail_if(ret != 0); + + ecore_con_init(); } EFL_END_TEST From 2d12a6eb4c392f308d24a4cbdc9890635822a2b4 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:45:39 -0800 Subject: [PATCH 77/86] ecore_con: properly track each handler separately and destroy each only once. Differential Revision: https://phab.enlightenment.org/D7400 --- src/tests/ecore_con/ecore_con_test_ecore_con.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tests/ecore_con/ecore_con_test_ecore_con.c b/src/tests/ecore_con/ecore_con_test_ecore_con.c index a0e532be39..ed77811f46 100644 --- a/src/tests/ecore_con/ecore_con_test_ecore_con.c +++ b/src/tests/ecore_con/ecore_con_test_ecore_con.c @@ -464,13 +464,14 @@ EFL_START_TEST(ecore_test_ecore_con_dns) { Ecore_Con_Server *client; Ecore_Event_Handler *e_err; + Ecore_Event_Handler *e_del; Ecore_Event_Handler *e_add; Eina_Bool err_check = EINA_FALSE; e_add = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, _dns_add_del, (void *) &err_check); e_err = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ERROR, _dns_err, (void *) &err_check); /* For timeout */ - e_err = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, _dns_add_del, (void *) &err_check); + e_del = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DEL, _dns_add_del, (void *) &err_check); client = ecore_con_server_connect(ECORE_CON_REMOTE_TCP, "wongsub.wrongdns.lan", 1234, NULL); @@ -480,6 +481,7 @@ EFL_START_TEST(ecore_test_ecore_con_dns) ecore_main_loop_begin(); fail_if (err_check != EINA_FALSE); fail_if (ecore_event_handler_del(e_err) != (void *) &err_check); + fail_if (ecore_event_handler_del(e_del) != (void *) &err_check); fail_if (ecore_event_handler_del(e_add) != (void *) &err_check); } EFL_END_TEST From f1e98e6e9728d4dfa852aabdac79f3506db2f661 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:47:38 -0800 Subject: [PATCH 78/86] ecore_con: wait for thread to finish at the same time as canceled to avoid race condition. Differential Revision: https://phab.enlightenment.org/D7401 --- src/lib/ecore_con/efl_net_ip_address.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/ecore_con/efl_net_ip_address.c b/src/lib/ecore_con/efl_net_ip_address.c index 276f102f9c..b6d9317dee 100644 --- a/src/lib/ecore_con/efl_net_ip_address.c +++ b/src/lib/ecore_con/efl_net_ip_address.c @@ -415,6 +415,7 @@ _efl_net_ip_address_resolve_del(void *data, if (ctx->thread) { ecore_thread_cancel(ctx->thread); + ecore_thread_wait(ctx->thread, 1); ctx->thread = NULL; } From f74de7247a2baed32e036dc6dc433560dcfc0c8e Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 30 Nov 2018 15:48:13 -0800 Subject: [PATCH 79/86] ecore_con: handle timeout of the attempt to connect. This has been the fix that prevent random ecore_con DNS tests to fail for me. This should also in case of failure make the timeout of the ecore_con itself be honored which wasn't anymore. @fix Differential Revision: https://phab.enlightenment.org/D7402 --- src/lib/ecore_con/ecore_con_legacy.c | 7 +++++++ src/lib/ecore_con/efl_net_dialer_simple.c | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_con/ecore_con_legacy.c b/src/lib/ecore_con/ecore_con_legacy.c index 7925ee032f..1ac6c2ac15 100644 --- a/src/lib/ecore_con/ecore_con_legacy.c +++ b/src/lib/ecore_con/ecore_con_legacy.c @@ -1341,13 +1341,19 @@ _ecore_con_server_dialer_error(void *data, const Efl_Event *event) { Ecore_Con_Server *svr = data; Eina_Error *perr = event->info; + static int nested = EINA_FALSE; if (svr->delete_me) return; + if (nested) return; + + nested = EINA_TRUE; WRN("error reaching server %s: %s", efl_net_dialer_address_dial_get(svr->dialer), eina_error_msg_get(*perr)); if (_ecore_con_post_event_server_error(svr, eina_error_msg_get(*perr))) _ecore_con_server_dialer_close(svr); + + nested = EINA_FALSE; } static void @@ -1413,6 +1419,7 @@ EFL_CALLBACKS_ARRAY_DEFINE(_ecore_con_server_dialer_cbs, { EFL_IO_BUFFERED_STREAM_EVENT_SLICE_CHANGED, _ecore_con_server_dialer_slice_changed }, { EFL_IO_BUFFERED_STREAM_EVENT_READ_FINISHED, _ecore_con_server_dialer_read_finished }, { EFL_IO_BUFFERED_STREAM_EVENT_FINISHED, _ecore_con_server_dialer_finished }, + { EFL_IO_BUFFERED_STREAM_EVENT_ERROR, _ecore_con_server_dialer_error }, { EFL_NET_DIALER_EVENT_ERROR, _ecore_con_server_dialer_error }, { EFL_NET_DIALER_EVENT_RESOLVED, _ecore_con_server_dialer_resolved }, { EFL_NET_DIALER_EVENT_CONNECTED, _ecore_con_server_dialer_connected }); diff --git a/src/lib/ecore_con/efl_net_dialer_simple.c b/src/lib/ecore_con/efl_net_dialer_simple.c index 8d25c370e2..71e99e8736 100644 --- a/src/lib/ecore_con/efl_net_dialer_simple.c +++ b/src/lib/ecore_con/efl_net_dialer_simple.c @@ -41,7 +41,6 @@ _efl_net_dialer_simple_inner_io_error(void *data, const Efl_Event *event) { Eo *o = data; efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, event->info); - efl_event_callback_call(o, EFL_IO_BUFFERED_STREAM_EVENT_ERROR, event->info); } static void From b8f96109082e775f48ae44e8c2d514ba6e54c84e Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 6 Dec 2018 11:41:14 +0100 Subject: [PATCH 80/86] canvas: disable an eolian-style api reference This references a file that is not being installed, so the eo file will fail to parse when used as a system-wide .eo file. Introduced in 05682eed7d572874928424af82fba819790c4228. Fixes T7495. --- src/lib/evas/canvas/efl_canvas_object.eo | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/efl_canvas_object.eo b/src/lib/evas/canvas/efl_canvas_object.eo index 6be3fcd678..10a25b5756 100644 --- a/src/lib/evas/canvas/efl_canvas_object.eo +++ b/src/lib/evas/canvas/efl_canvas_object.eo @@ -450,6 +450,7 @@ abstract Efl.Canvas.Object (Efl.Loop_Consumer, Efl.Gfx.Entity, Efl.Gfx.Color, Ef return: bool @warn_unused; [[$true if any object is clipped by $obj, $false otherwise]] } key_grab { + /* FIXME: can't reference Eolian object, .eo file not being installed */ [[Requests $keyname key events be directed to $obj. Key grabs allow one or more objects to receive key events for @@ -464,7 +465,7 @@ abstract Efl.Canvas.Object (Efl.Loop_Consumer, Efl.Gfx.Entity, Efl.Gfx.Color, Ef modifiers that must and mustn't, respectively, be pressed along with $keyname key in order to trigger this new key grab. Modifiers can be things such as Shift and Ctrl as well as - user defined types via @Evas.Canvas.key_modifier_add. + user defined types via \@ref evas_key_modifier_add. $exclusive will make the given object the only one permitted to grab the given key. If given $true, subsequent calls on this function with different $obj arguments will fail, unless the key From b985a3b0f9ab1c5bafd50d51f79fc51acd5838c1 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sat, 17 Nov 2018 14:28:59 +0000 Subject: [PATCH 81/86] efl: fix misspelt focused in API and documents. Fix spelling in elm_code API and other documents too where this occurs. Differential Revision: https://phab.enlightenment.org/D7299 --- src/bin/elementary/test_events.c | 4 ++-- src/lib/elementary/efl_ui_win.c | 2 +- src/lib/elementary/elm_code_widget.c | 8 ++++---- src/lib/elementary/elm_code_widget_private.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bin/elementary/test_events.c b/src/bin/elementary/test_events.c index 661a8107f1..1eba66c2dc 100644 --- a/src/bin/elementary/test_events.c +++ b/src/bin/elementary/test_events.c @@ -48,11 +48,11 @@ _key_down(void *data, const Efl_Event *ev) testdata *td = data; char str[1024]; - // FIXME: By default the elm_win object is the focussed object + // FIXME: By default the elm_win object is the focused object // this means that evas callbacks will transfer the KEY_UP/KEY_DOWN events // to the elm_win. So, we get two key_down & two key_up events: // 1. ecore_evas -> evas -> elm_win forward -> here - // 2. ecore_evas -> evas -> focussed obj (elm_win) -> here + // 2. ecore_evas -> evas -> focused obj (elm_win) -> here sprintf(str, "key=%s keyname=%s string=%s compose=%s", efl_input_key_get(ev->info), diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 1e12b46702..0d33fe31f0 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -1799,7 +1799,7 @@ _evas_event_key_cb(void *data, const Efl_Event *ev) if (!evdata || evdata->win_fed) return; - // evas_callbacks will send the event to the focussed object (ie. this win) + // evas_callbacks will send the event to the focused object (ie. this win) if (evas_focus_get(evas_object_evas_get(win)) == win) return; diff --git a/src/lib/elementary/elm_code_widget.c b/src/lib/elementary/elm_code_widget.c index af10ec0496..68738c10e0 100644 --- a/src/lib/elementary/elm_code_widget.c +++ b/src/lib/elementary/elm_code_widget.c @@ -161,7 +161,7 @@ _elm_code_widget_status_type_get(Elm_Code_Widget *widget, Elm_Code_Line *line, u if (line->status != ELM_CODE_STATUS_TYPE_DEFAULT) return line->status; - if (pd->editable && pd->focussed && pd->cursor_line == line->number) + if (pd->editable && pd->focused && pd->cursor_line == line->number) return ELM_CODE_STATUS_TYPE_CURRENT; if (pd->line_width_marker > 0 && pd->line_width_marker == col-1) @@ -338,7 +338,7 @@ _elm_code_widget_fill_cursor(Elm_Code_Widget *widget, unsigned int number, int g pd = efl_data_scope_get(widget, ELM_CODE_WIDGET_CLASS); - if (pd->visible && pd->editable && pd->focussed && pd->cursor_line == number) + if (pd->visible && pd->editable && pd->focused && pd->cursor_line == number) { if (pd->cursor_col + gutter - 1 >= (unsigned int) w) return; @@ -1850,7 +1850,7 @@ _elm_code_widget_focused_event_cb(void *data, Evas_Object *obj, widget = (Elm_Code_Widget *)data; pd = efl_data_scope_get(widget, ELM_CODE_WIDGET_CLASS); - pd->focussed = EINA_TRUE; + pd->focused = EINA_TRUE; if (pd->cursor_rect) elm_layout_signal_emit(pd->cursor_rect, "elm,action,focus", "elm"); @@ -1867,7 +1867,7 @@ _elm_code_widget_unfocused_event_cb(void *data, Evas_Object *obj, widget = (Elm_Code_Widget *)data; pd = efl_data_scope_get(widget, ELM_CODE_WIDGET_CLASS); - pd->focussed = EINA_FALSE; + pd->focused = EINA_FALSE; if (pd->cursor_rect) elm_layout_signal_emit(pd->cursor_rect, "elm,action,unfocus", "elm"); diff --git a/src/lib/elementary/elm_code_widget_private.h b/src/lib/elementary/elm_code_widget_private.h index ec1e53dc35..3398ad370f 100644 --- a/src/lib/elementary/elm_code_widget_private.h +++ b/src/lib/elementary/elm_code_widget_private.h @@ -32,7 +32,7 @@ typedef struct unsigned int cursor_line, cursor_col; Evas_Object *cursor_rect; - Eina_Bool visible, editable, focussed; + Eina_Bool visible, editable, focused; Eina_Bool show_line_numbers; unsigned int line_width_marker, tabstop; Eina_Bool show_whitespace, tab_inserts_spaces; From f5b45a266eaa83477f9c85aa7786323c6b0357d9 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Tue, 4 Dec 2018 17:43:10 +0100 Subject: [PATCH 82/86] meson: abstract edje_cc exec lines the array is calling the shell etc. this makes cross building easier. Differential Revision: https://phab.enlightenment.org/D7413 --- data/elementary/edje_externals/meson.build | 2 +- data/elementary/objects/meson.build | 2 +- data/elementary/themes/meson.build | 2 +- data/ethumb/frames/meson.build | 2 +- src/bin/edje/meson.build | 4 ++++ src/examples/edje/meson.build | 4 ++-- src/modules/ethumb/emotion/meson.build | 2 +- src/tests/edje/data/meson.build | 2 +- src/tests/edje/tests/meson.build | 4 ++-- src/tests/emotion/data/meson.build | 4 ++-- 10 files changed, 16 insertions(+), 12 deletions(-) diff --git a/data/elementary/edje_externals/meson.build b/data/elementary/edje_externals/meson.build index cc24430052..445a673198 100644 --- a/data/elementary/edje_externals/meson.build +++ b/data/elementary/edje_externals/meson.build @@ -1,7 +1,7 @@ custom_target('edje_cc_edje_externals', input : 'icons.edc', output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', join_paths(meson.current_source_dir()), '-id', elm_themes_image_include, '@INPUT@', '@OUTPUT@'], diff --git a/data/elementary/objects/meson.build b/data/elementary/objects/meson.build index a25a719852..5e262e74d2 100644 --- a/data/elementary/objects/meson.build +++ b/data/elementary/objects/meson.build @@ -19,7 +19,7 @@ foreach edc_file : edc_files elm_themes += custom_target('edje_cc_elm_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-sd', join_paths(meson.current_source_dir()), '-id', elm_themes_image_include, '-id', join_paths(meson.current_source_dir()), diff --git a/data/elementary/themes/meson.build b/data/elementary/themes/meson.build index c8c8816470..b8aa6bb7b3 100644 --- a/data/elementary/themes/meson.build +++ b/data/elementary/themes/meson.build @@ -10,7 +10,7 @@ foreach edc_file : edc_files elm_themes += custom_target('edje_cc_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-sd', join_paths(meson.current_source_dir(), 'snd'), '-id', elm_themes_image_include, '-id', join_paths(meson.current_source_dir(), 'fdo'), diff --git a/data/ethumb/frames/meson.build b/data/ethumb/frames/meson.build index a696af0c41..2031fc4ea9 100644 --- a/data/ethumb/frames/meson.build +++ b/data/ethumb/frames/meson.build @@ -3,7 +3,7 @@ ethumb_frame = files('default.edc') custom_target('edje_cc_ethumb_frame', input : ethumb_frame, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-sd', join_paths(meson.current_source_dir()), '-id', join_paths(meson.current_source_dir()), '-fd', join_paths(meson.current_source_dir()), diff --git a/src/bin/edje/meson.build b/src/bin/edje/meson.build index c7e5f397c2..83e4cbbde3 100644 --- a/src/bin/edje/meson.build +++ b/src/bin/edje/meson.build @@ -30,6 +30,10 @@ edje_cc = executable('edje_cc', link_args : bin_linker_args ) +env = find_program('env') + +edje_cc_exe = [env, 'EFL_RUN_IN_TREE=1', edje_cc.full_path()] + edje_decc_src = [ 'edje_decc.c', 'edje_decc.h', diff --git a/src/examples/edje/meson.build b/src/examples/edje/meson.build index 49e7e53c73..69b19b0c52 100644 --- a/src/examples/edje/meson.build +++ b/src/examples/edje/meson.build @@ -62,7 +62,7 @@ foreach edc_file : edc_files themes += custom_target('edje_cc_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', meson.current_source_dir(), '-fd', meson.current_source_dir(), '-sd', meson.current_source_dir(), @@ -77,7 +77,7 @@ endforeach codegen = custom_target('edje_cc_codegen_edc', input : 'codegen.edc', output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', meson.current_source_dir(), '-fd', meson.current_source_dir(), '-sd', meson.current_source_dir(), diff --git a/src/modules/ethumb/emotion/meson.build b/src/modules/ethumb/emotion/meson.build index 52f4b442a6..2acd578103 100644 --- a/src/modules/ethumb/emotion/meson.build +++ b/src/modules/ethumb/emotion/meson.build @@ -8,7 +8,7 @@ foreach edc_file : edc_files themes += custom_target('edje_cc_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', meson.current_source_dir(), '-fd', meson.current_source_dir(), '-sd', meson.current_source_dir(), diff --git a/src/tests/edje/data/meson.build b/src/tests/edje/data/meson.build index af7e04bf0e..cf10bd9355 100644 --- a/src/tests/edje/data/meson.build +++ b/src/tests/edje/data/meson.build @@ -25,7 +25,7 @@ foreach edc_file : edc_files themes += custom_target('edje_cc_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', join_paths(meson.source_root(), 'src', 'tests', 'emotion', 'data'), '-fd', meson.current_source_dir(), '-sd', meson.current_source_dir(), diff --git a/src/tests/edje/tests/meson.build b/src/tests/edje/tests/meson.build index 4780bcaeba..6b1e43eb58 100644 --- a/src/tests/edje/tests/meson.build +++ b/src/tests/edje/tests/meson.build @@ -6,7 +6,7 @@ foreach edc_file : edc_files themes += custom_target('edje_cc_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', join_paths(meson.source_root(), 'src', 'tests', 'emotion', 'data'), '-fd', meson.current_source_dir(), '-sd', meson.current_source_dir(), @@ -16,4 +16,4 @@ foreach edc_file : edc_files '-td', meson.current_source_dir(), '@INPUT@', '@OUTPUT@'], depends : edje_cc) -endforeach \ No newline at end of file +endforeach diff --git a/src/tests/emotion/data/meson.build b/src/tests/emotion/data/meson.build index 82c3c03ad8..7402b3a19b 100644 --- a/src/tests/emotion/data/meson.build +++ b/src/tests/emotion/data/meson.build @@ -8,7 +8,7 @@ foreach edc_file : edc_files themes += custom_target('edje_cc_' + edc_file, input : edc_file, output : '@BASENAME@.edj', - command : ['/usr/bin/env', 'EFL_RUN_IN_TREE=1', edje_cc.full_path(), '-beta', + command : edje_cc_exe + [ '-beta', '-id', meson.current_source_dir(), '-fd', meson.current_source_dir(), '-sd', meson.current_source_dir(), @@ -18,4 +18,4 @@ foreach edc_file : edc_files '-td', meson.current_source_dir(), '@INPUT@', '@OUTPUT@'], depends : edje_cc) -endforeach \ No newline at end of file +endforeach From 35b839e5e83769b0b203797a01ca13eb4d100d86 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Tue, 4 Dec 2018 21:04:07 +0100 Subject: [PATCH 83/86] meson: remove DATADIR as it is not used and further more, on windows this causes un-understandable compiler errors. Differential Revision: https://phab.enlightenment.org/D7417 --- meson.build | 1 - 1 file changed, 1 deletion(-) diff --git a/meson.build b/meson.build index c40d30c185..82205daae5 100644 --- a/meson.build +++ b/meson.build @@ -93,7 +93,6 @@ config_h.set_quoted('PACKAGE_SRC_DIR', meson.source_root()) config_h.set_quoted('PACKAGE_BUILD_DIR', meson.current_build_dir()) config_h.set_quoted('PACKAGE_SYSCONF_DIR', dir_sysconf) config_h.set_quoted('BINDIR', dir_bin) -config_h.set_quoted('DATADIR', dir_data) config_h.set10('EFL_HAVE_THREADS', true) config_h.set10('SLOPPY_SPEC', true) From 02bae162bb8472ceafebb3f86c2cf6fae98ac184 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sun, 2 Dec 2018 11:15:47 +0100 Subject: [PATCH 84/86] ci: disable testing on ubuntu and debian it appears that there is a bug in meson (which is fixed upstream). For now this disables the tests, it can be reverted later once 0.49 is released. This fixes the cron job for 2 jobs. Differential Revision: https://phab.enlightenment.org/D7410 --- .ci/ci-make-check.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.ci/ci-make-check.sh b/.ci/ci-make-check.sh index 1744b4894c..6dff663e69 100755 --- a/.ci/ci-make-check.sh +++ b/.ci/ci-make-check.sh @@ -19,12 +19,16 @@ NUM_TRIES=5 travis_fold check "make check-TESTS" if [ "$BUILDSYSTEM" = "ninja" ] ; then if [ "$DISTRO" != "" ] ; then - for tries in $(seq 1 ${NUM_TRIES}); do - (docker exec --env EINA_LOG_BACKTRACE="0" --env MAKEFLAGS="-j5 -rR" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) ninja -C build test) && break - docker exec --env MAKEFLAGS="-j5 -rR" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) cat src/test-suite.log - if [ $tries != ${NUM_TRIES} ] ; then echo "tests failed, trying again!" ; fi - false - done + # disable them for this distros, after meson 0.49 is out, this can be removed + # https://github.com/mesonbuild/meson/commit/253c581412d7f2b09af353dd83d943454bd555be + if [ "$DISTRO" != "Ubuntu1804" ] && [ "$DISTRO" != "Debian91" ]; then + for tries in $(seq 1 ${NUM_TRIES}); do + (docker exec --env EINA_LOG_BACKTRACE="0" --env MAKEFLAGS="-j5 -rR" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) ninja -C build test) && break + docker exec --env MAKEFLAGS="-j5 -rR" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) cat src/test-suite.log + if [ $tries != ${NUM_TRIES} ] ; then echo "tests failed, trying again!" ; fi + false + done + fi fi else if [ "$DISTRO" != "" ] ; then From 98b098591fcc7c71bc6520403d73c8324ce2030c Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 6 Dec 2018 15:28:18 +0000 Subject: [PATCH 85/86] update po files --- po/ca.po | 57 ++++++++++++++++++++++++++--------------------------- po/cs.po | 57 ++++++++++++++++++++++++++--------------------------- po/da.po | 57 ++++++++++++++++++++++++++--------------------------- po/de.po | 54 +++++++++++++++++++++++--------------------------- po/el.po | 57 ++++++++++++++++++++++++++--------------------------- po/eo.po | 57 ++++++++++++++++++++++++++--------------------------- po/es.po | 57 ++++++++++++++++++++++++++--------------------------- po/fi.po | 57 ++++++++++++++++++++++++++--------------------------- po/fr.po | 54 +++++++++++++++++++++++--------------------------- po/gl.po | 57 ++++++++++++++++++++++++++--------------------------- po/hu.po | 54 +++++++++++++++++++++++--------------------------- po/it.po | 57 ++++++++++++++++++++++++++--------------------------- po/ja.po | 54 +++++++++++++++++++++++--------------------------- po/ko.po | 54 +++++++++++++++++++++++--------------------------- po/lt.po | 54 +++++++++++++++++++++++--------------------------- po/nl.po | 54 +++++++++++++++++++++++--------------------------- po/pl.po | 54 +++++++++++++++++++++++--------------------------- po/pt.po | 57 ++++++++++++++++++++++++++--------------------------- po/ru.po | 57 ++++++++++++++++++++++++++--------------------------- po/sl.po | 57 ++++++++++++++++++++++++++--------------------------- po/sr.po | 57 ++++++++++++++++++++++++++--------------------------- po/tr.po | 57 ++++++++++++++++++++++++++--------------------------- po/vi.po | 57 ++++++++++++++++++++++++++--------------------------- po/zh_CN.po | 54 +++++++++++++++++++++++--------------------------- 24 files changed, 645 insertions(+), 696 deletions(-) diff --git a/po/ca.po b/po/ca.po index 51e91a484b..ede2ab544a 100644 --- a/po/ca.po +++ b/po/ca.po @@ -4,12 +4,12 @@ # Marc Furtià i Puig , 2013. # Joan Coll , 2013. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2015-02-10 09:34+0000\n" "Last-Translator: JoanColl \n" "Language-Team: Catalan\n" @@ -252,21 +252,21 @@ msgstr "Carpeta personal" msgid "Search" msgstr "Cerca" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Accepta" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Cancel·la" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Estat: desactivat" @@ -301,7 +301,7 @@ msgstr "Títol" msgid "Back" msgstr "Enrere" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Següent" @@ -313,7 +313,7 @@ msgstr "Títol finestra emergent" msgid "Popup Body Text" msgstr "Text de la finestra emergent" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -438,7 +438,7 @@ msgstr "paleta de selecció de color" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -450,30 +450,26 @@ msgstr "selector de dia" msgid "diskselector item" msgstr "selector de disc" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Retalla" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Copia" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Enganxa" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Selecciona" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Entrada" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Quadrícula genèrica" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Índex" @@ -514,16 +510,16 @@ msgstr "barra de progrés" msgid "Radio" msgstr "Opció" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Estat: Seleccionat" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Estat: No seleccionat" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Element de control del segment" @@ -555,22 +551,25 @@ msgstr "botó de decrement del spinner" msgid "spinner text" msgstr "text rotatiu" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Seleccionat" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separador" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Té menú" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "No seleccionat" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Element de barra d'eines" + +#~ msgid "Gengrid Item" +#~ msgstr "Quadrícula genèrica" diff --git a/po/cs.po b/po/cs.po index 8e0a5bd0ac..fac0a1efb4 100644 --- a/po/cs.po +++ b/po/cs.po @@ -5,12 +5,12 @@ # quaker66@gmail.com # Vít Pelčák , 2011. # Tomáš Čech , 2012. -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-05-22 22:44+0200\n" "Last-Translator: Tomáš Čech \n" "Language-Team: Czech \n" @@ -255,21 +255,21 @@ msgstr "Domů" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Zrušit" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Stav: Zakázáno" @@ -304,7 +304,7 @@ msgstr "Název" msgid "Back" msgstr "Zpět" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Další" @@ -316,7 +316,7 @@ msgstr "Titulek vyskakujícího okna" msgid "Popup Body Text" msgstr "Text vyskakovacího okna" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -441,7 +441,7 @@ msgstr "položka výběru barvy z palety" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -453,30 +453,26 @@ msgstr "položka výběru dne" msgid "diskselector item" msgstr "položka výběru disků" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Vyjmout" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopírovat" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Vložit" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Vybrat" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Vstup" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Položka mřížky" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Index" @@ -517,16 +513,16 @@ msgstr "ukazatel průběhu" msgid "Radio" msgstr "Přepínač" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Stav: Vybráno" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Stav: Nevybráno" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "položka ovládání segmentu" @@ -559,22 +555,25 @@ msgstr "odečítací tlačítko spinneru" msgid "spinner text" msgstr "spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Vybrané" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Oddělovač" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Má nabídku" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Nevybrané" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Položka panelu nástrojů" + +#~ msgid "Gengrid Item" +#~ msgstr "Položka mřížky" diff --git a/po/da.po b/po/da.po index a6a4ef2293..8635367bd3 100644 --- a/po/da.po +++ b/po/da.po @@ -2,12 +2,12 @@ # Copyright (C) 2017 Enlightenment development team # This file is distributed under the same license as the efl package. # scootergrisen, 2017-2018. -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: efl 1.21\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2018-08-09 18:38+0200\n" "Last-Translator: scootergrisen\n" "Language-Team: Danish\n" @@ -249,21 +249,21 @@ msgstr "Hjem" msgid "Search" msgstr "Søg" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Annuller" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Tilstand: Deaktiveret" @@ -297,7 +297,7 @@ msgstr "Undertitel" msgid "Back" msgstr "Tilbage" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Næste" @@ -309,7 +309,7 @@ msgstr "Titel til pop op" msgid "Popup Body Text" msgstr "Brødtekst til pop op" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "Besked" @@ -434,7 +434,7 @@ msgstr "palet-element til farvevælger" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -446,30 +446,26 @@ msgstr "dagvælger-element" msgid "diskselector item" msgstr "diskvælger-element" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Klip" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopiér" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Indsæt" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Vælg" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Indtastning" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Gengitter-element" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Indeks" @@ -510,16 +506,16 @@ msgstr "forløbslinje" msgid "Radio" msgstr "Radio" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Tilstand: Valgt" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Tilstand: Fravalgt" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Segmentkontrol-element" @@ -551,22 +547,25 @@ msgstr "formindsk-knap til ruller" msgid "spinner text" msgstr "rullertekst" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Valgt" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separator" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Har menu" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Fravalgt" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Værktøjslinje-element" + +#~ msgid "Gengrid Item" +#~ msgstr "Gengitter-element" diff --git a/po/de.po b/po/de.po index fa2218f821..d195ca8eba 100644 --- a/po/de.po +++ b/po/de.po @@ -4,12 +4,12 @@ # Chris Leick , 2009. # Fabian Nowak , 2010. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary 0.7.0.57309\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2011-02-25 20:22+0100\n" "Last-Translator: Fabian Nowak \n" "Language-Team: German\n" @@ -253,21 +253,21 @@ msgstr "Persönlicher Ordner" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Abbrechen" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "" @@ -301,7 +301,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -313,7 +313,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -438,7 +438,7 @@ msgstr "" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -450,30 +450,26 @@ msgstr "" msgid "diskselector item" msgstr "" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Ausschneiden" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopieren" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Einfügen" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Auswählen" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "" @@ -514,17 +510,17 @@ msgstr "" msgid "Radio" msgstr "" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 #, fuzzy msgid "State: Unselected" msgstr "Auswählen" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -556,24 +552,24 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 #, fuzzy msgid "Selected" msgstr "Auswählen" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 #, fuzzy msgid "Unselected" msgstr "Auswählen" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "" diff --git a/po/el.po b/po/el.po index a6a0937f23..315427a190 100644 --- a/po/el.po +++ b/po/el.po @@ -6,12 +6,12 @@ # Alex-P. Natsios 2012 # Efstathios Iosifidis , 2012. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2012-12-19 15:58+0200\n" "Last-Translator: Efstathios Iosifidis \n" "Language-Team: Ελληνικά, Σύγχρονα \n" @@ -256,21 +256,21 @@ msgstr "Αρχική" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Εντάξει" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Άκυρο" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Κατάσταση: Απενεργοποιημένο" @@ -304,7 +304,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -316,7 +316,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -449,7 +449,7 @@ msgstr "παλέτα επιλογής χρώματος" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -462,30 +462,26 @@ msgstr "επιλογή δίσκου" msgid "diskselector item" msgstr "επιλογή δίσκου" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Αποκοπή" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Αντιγραφή" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Επικόλληση" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Επιλογή" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Καταχώριση" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Αντικείμενο Gengrid" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Κατάλογος" @@ -526,17 +522,17 @@ msgstr "Μπάρα Προόδου" msgid "Radio" msgstr "Επιλογή" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Κατάσταση: Επιλεγμένο" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 #, fuzzy msgid "State: Unselected" msgstr "Κατάσταση: Επιλεγμένο" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -572,26 +568,29 @@ msgstr "κουμπί spinner προηγούμενο" msgid "spinner text" msgstr "spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Επιλεγμένο" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Διαχωριστικό" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Έχει μενού" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Μη Επιλεγμένο" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Αντικείμενο μπάρας εργαλείων" +#~ msgid "Gengrid Item" +#~ msgstr "Αντικείμενο Gengrid" + #~ msgid "" #~ "\n" #~ " " diff --git a/po/eo.po b/po/eo.po index 872eed716a..a04210d81d 100644 --- a/po/eo.po +++ b/po/eo.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the enlightenment package. # FIRST AUTHOR , 2012. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: enlightenment\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2013-11-05 18:59+0000\n" "Last-Translator: Eliovir \n" "Language-Team: Esperanto \n" @@ -251,21 +251,21 @@ msgstr "Hejmo" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Bone" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Nuligi" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Stato: malŝaltita" @@ -300,7 +300,7 @@ msgstr "Titolo" msgid "Back" msgstr "Reen" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Antaŭen" @@ -312,7 +312,7 @@ msgstr "Titolo de spruĉfenestro" msgid "Popup Body Text" msgstr "Enhava teksto de spruĉfenestro" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -437,7 +437,7 @@ msgstr "ero de elektilo de kolorpaletro" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -449,30 +449,26 @@ msgstr "" msgid "diskselector item" msgstr "ero de diskelektilo" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Eltondi" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopii" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Alglui" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Elekti" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Ero" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Ero de komuna krado" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Indekso" @@ -513,16 +509,16 @@ msgstr "progresbreto" msgid "Radio" msgstr "Radiobutono" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Stato: elektita" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Stato: ne elektita" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -555,22 +551,25 @@ msgstr "dekrementa sago-butono" msgid "spinner text" msgstr "sago-butono" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Elektita" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Disigilo" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Ĝi havas menuo" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Malelektita" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Ilobretero" + +#~ msgid "Gengrid Item" +#~ msgstr "Ero de komuna krado" diff --git a/po/es.po b/po/es.po index eeadf90c65..652b0618b2 100644 --- a/po/es.po +++ b/po/es.po @@ -4,12 +4,12 @@ # Aníbal Garrido , 2012. # Adrián Arévalo , 2015. # Roy W. Reese 2015. -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2015-05-03 18:19+0100\n" "Last-Translator: Adrián Arévalo \n" "Language-Team: Enlightenment Team\n" @@ -251,21 +251,21 @@ msgstr "Carpeta personal" msgid "Search" msgstr "Buscar" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Aceptar" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Cancelar" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Estado: Desactivado" @@ -300,7 +300,7 @@ msgstr "Título" msgid "Back" msgstr "Atrás" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Siguiente" @@ -314,7 +314,7 @@ msgstr "Nombre emergente" msgid "Popup Body Text" msgstr "Texto emergente" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -442,7 +442,7 @@ msgstr "Selector de color de paleta" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -454,30 +454,26 @@ msgstr "Selector de día" msgid "diskselector item" msgstr "Selector de disco" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Cortar" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Copiar" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Pegar" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Seleccionar" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Entrada" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Cuadrícula genérica" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Índice" @@ -518,16 +514,16 @@ msgstr "barra de progreso" msgid "Radio" msgstr "Radio" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Estado: Seleccionado" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Estado: No seleccionado" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Elemento del control del segmento" @@ -560,26 +556,29 @@ msgstr "botón de decremento del spinner" msgid "spinner text" msgstr "spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Seleccionado" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separador" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Tiene menú" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Sin seleccionar" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Elemento de la barra de herramientas" +#~ msgid "Gengrid Item" +#~ msgstr "Cuadrícula genérica" + #~ msgid "Genlist Item" #~ msgstr "Lista genérica" diff --git a/po/fi.po b/po/fi.po index e59b918927..e2f87954c8 100644 --- a/po/fi.po +++ b/po/fi.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the enlightenment package. # FIRST AUTHOR , 2014. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: enlightenment\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-08-31 15:13+0000\n" "Last-Translator: Kai Huuhko \n" "Language-Team: Finnish \n" @@ -251,21 +251,21 @@ msgstr "Koti" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Peruuta" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Tila: Pois käytöstä" @@ -300,7 +300,7 @@ msgstr "Otsikko" msgid "Back" msgstr "Takaisin" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Seuraava" @@ -312,7 +312,7 @@ msgstr "Ponnahdusikkunan otsikko" msgid "Popup Body Text" msgstr "Ponnahdusikkunan leipäteksti" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -437,7 +437,7 @@ msgstr "värivalitsimen palettikohta" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -449,30 +449,26 @@ msgstr "päivyrin kohta" msgid "diskselector item" msgstr "kiekkovalitsimen kohta" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Leikkaa" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopioi" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Liitä" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Valitse" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Syöttökenttä" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Gengridin kohta" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Indeksi" @@ -513,16 +509,16 @@ msgstr "Tilanneilmaisin" msgid "Radio" msgstr "Vaihtoehto" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Tila: valittu" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Tila: valitsematon" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -555,22 +551,25 @@ msgstr "Pyörövalitsimen vähennä-nappi" msgid "spinner text" msgstr "pyörövalitsin" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Valittu" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Erotin" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Valikollinen" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Valitsematon" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Työkalupalkin kohta" + +#~ msgid "Gengrid Item" +#~ msgstr "Gengridin kohta" diff --git a/po/fr.po b/po/fr.po index 5f16fd9594..a41c2f990b 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,12 +6,12 @@ # Jerome Pinot , 2012. # Chidambar Zinnoury , 2013. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-05-25 20:18+0000\n" "Last-Translator: Eliovir \n" "Language-Team: French \n" @@ -257,21 +257,21 @@ msgstr "Home" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Annuler" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "État : désactivé" @@ -306,7 +306,7 @@ msgstr "Titre" msgid "Back" msgstr "Retour" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Suivant" @@ -318,7 +318,7 @@ msgstr "Titre du Popup" msgid "Popup Body Text" msgstr "Corps du texte du Popup" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -443,7 +443,7 @@ msgstr "élément de palette de choix de couleur" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -455,30 +455,26 @@ msgstr "élement de choix de date" msgid "diskselector item" msgstr "élément de choix de disque" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Couper" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Copier" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Coller" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Sélectionner" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Entrée" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Index" @@ -519,16 +515,16 @@ msgstr "barre de progression" msgid "Radio" msgstr "Radio" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "État : sélectionné" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "État : désélectionné" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Élément de contrôle de segment" @@ -561,22 +557,22 @@ msgstr "bouton fléché de décrémentation" msgid "spinner text" msgstr "bouton fléché" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Sélectionné" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Séparateur" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Possède un menu" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Désélectionné" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Élément de barre d'outils" diff --git a/po/gl.po b/po/gl.po index d474bfbd32..3ef2282a91 100644 --- a/po/gl.po +++ b/po/gl.po @@ -2,12 +2,12 @@ # This file is put in the public domain. # Aníbal Garrido , 2012. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-05-24 08:39+0000\n" "Last-Translator: Kaptan \n" "Language-Team: Galician \n" @@ -250,21 +250,21 @@ msgstr "Cartafol persoal" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Aceptar" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Cancelar" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Estado: Desactivado" @@ -299,7 +299,7 @@ msgstr "subtítulo" msgid "Back" msgstr "Atrás" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Seguinte" @@ -311,7 +311,7 @@ msgstr "Título da emerxente" msgid "Popup Body Text" msgstr "Corpo de texto emerxente" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -436,7 +436,7 @@ msgstr "Paleta de selección de cor" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -448,30 +448,26 @@ msgstr "selector de día" msgid "diskselector item" msgstr "Selector de disco" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Cortar" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Copiar" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Pegar" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Seleccionar" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Entrada" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Grella xenérica" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Índice" @@ -512,16 +508,16 @@ msgstr "barra de progreso" msgid "Radio" msgstr "Radio" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Estado: Seleccionado" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Estado: Sen seleccionar" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Segmento de control" @@ -554,25 +550,28 @@ msgstr "botón de disminución" msgid "spinner text" msgstr "botón de spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Seleccionado" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separador" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Ten menú" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Non seleccionado" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Elemento da barra de ferramentas" +#~ msgid "Gengrid Item" +#~ msgstr "Grella xenérica" + #~ msgid "popup label" #~ msgstr "etiqueta emerxente" diff --git a/po/hu.po b/po/hu.po index 04b39378e3..bde809fc70 100644 --- a/po/hu.po +++ b/po/hu.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary 1.8.2\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-01-29 15:27+0100\n" "Last-Translator: rezso \n" "Language-Team: General\n" @@ -252,21 +252,21 @@ msgstr "Kezdőlap" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Mégsem" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Állapot: letiltva" @@ -301,7 +301,7 @@ msgstr "Cím" msgid "Back" msgstr "Vissza" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Következő" @@ -313,7 +313,7 @@ msgstr "Popup címsora" msgid "Popup Body Text" msgstr "Popup szövege" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -438,7 +438,7 @@ msgstr "" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -450,30 +450,26 @@ msgstr "" msgid "diskselector item" msgstr "" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Kivágás" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Másolás" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Beillesztés" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Kiválaszt" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Bejegyzés" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "" @@ -514,16 +510,16 @@ msgstr "folyamatjelző" msgid "Radio" msgstr "Rádió" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Állapot: kijelölve" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Állapot: nincs kijelölve" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -555,22 +551,22 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Kiválasztva" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Elválasztó" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Nincs kijelölve" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Eszköztár elem" diff --git a/po/it.po b/po/it.po index e03f5f0b57..207003c220 100644 --- a/po/it.po +++ b/po/it.po @@ -3,12 +3,12 @@ # This file is put in the public domain. # Massimo Maiurana , 2013 # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2018-04-01 19:01+0200\n" "Last-Translator: Massimo Maiurana \n" "Language-Team: General\n" @@ -250,21 +250,21 @@ msgstr "Home" msgid "Search" msgstr "Cerca" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Annulla" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Stato: disabilitato" @@ -298,7 +298,7 @@ msgstr "Sottotitolo" msgid "Back" msgstr "Indietro" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Avanti" @@ -310,7 +310,7 @@ msgstr "Titolo popup" msgid "Popup Body Text" msgstr "Testo corpo popup" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "Allarme" @@ -435,7 +435,7 @@ msgstr "oggetto palette selezione colore" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -447,30 +447,26 @@ msgstr "oggetto selettore giorno" msgid "diskselector item" msgstr "selettore disco" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Taglia" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Copia" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Incolla" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Seleziona" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Voce" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "oggetto griglia generica" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Indice" @@ -511,16 +507,16 @@ msgstr "barra avanzamento" msgid "Radio" msgstr "Opzione" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Stato: selezionato" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Stato: non selezionato" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Oggetto controllo segmento" @@ -552,22 +548,25 @@ msgstr "bottone diminuzione spinner" msgid "spinner text" msgstr "testo spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Selezionato" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separatore" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Include menù" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Non selezionato" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Oggetto della barra strumenti" + +#~ msgid "Gengrid Item" +#~ msgstr "oggetto griglia generica" diff --git a/po/ja.po b/po/ja.po index 0ec8699abd..2bc55ffc0d 100644 --- a/po/ja.po +++ b/po/ja.po @@ -2,12 +2,12 @@ # Copyright (C) 2012 Enlightenment development team # This file is put in the public domain. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Efl\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2012-06-24 17:10+0900\n" "Last-Translator: Daichi Fukui\n" "Language-Team: Enlightenment Team\n" @@ -250,21 +250,21 @@ msgstr "" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "" @@ -298,7 +298,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -310,7 +310,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -435,7 +435,7 @@ msgstr "" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 #, fuzzy msgid "default:LTR" msgstr "default:LTR" @@ -448,30 +448,26 @@ msgstr "" msgid "diskselector item" msgstr "" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "" @@ -512,16 +508,16 @@ msgstr "" msgid "Radio" msgstr "" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -553,22 +549,22 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "" diff --git a/po/ko.po b/po/ko.po index 52430e70de..0146bac6a7 100644 --- a/po/ko.po +++ b/po/ko.po @@ -5,12 +5,12 @@ # Daniel Juyung Seo , 2011-2013 # Seong-ho Cho , 2012-2013 # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Efl\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-11-10 01:01+0900\n" "Last-Translator: Daniel Juyung Seo \n" "Language-Team: Enlightenment Team\n" @@ -254,21 +254,21 @@ msgstr "" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "" @@ -302,7 +302,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -314,7 +314,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -439,7 +439,7 @@ msgstr "" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 #, fuzzy msgid "default:LTR" msgstr "default:LTR" @@ -452,30 +452,26 @@ msgstr "" msgid "diskselector item" msgstr "" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "" @@ -516,16 +512,16 @@ msgstr "" msgid "Radio" msgstr "" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -557,22 +553,22 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "" diff --git a/po/lt.po b/po/lt.po index 908c4d4b61..676baf9d97 100644 --- a/po/lt.po +++ b/po/lt.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the enlightenment package. # FIRST AUTHOR , 2010. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: enlightenment\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-02-21 22:38+0000\n" "Last-Translator: Mantas Kriaučiūnas \n" "Language-Team: Lithuanian \n" @@ -251,21 +251,21 @@ msgstr "" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Gerai" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Atsisakyti" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "" @@ -299,7 +299,7 @@ msgstr "" msgid "Back" msgstr "Atgal" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -311,7 +311,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -436,7 +436,7 @@ msgstr "" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -448,30 +448,26 @@ msgstr "" msgid "diskselector item" msgstr "" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Iškirpti" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopijuoti" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Įdėti" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Pasirinkti" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "" @@ -512,16 +508,16 @@ msgstr "" msgid "Radio" msgstr "" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -553,22 +549,22 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Skirtukas" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Turi meniu" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Nepasirinkta(s)" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "" diff --git a/po/nl.po b/po/nl.po index 221af07a4e..e0b283aaf4 100644 --- a/po/nl.po +++ b/po/nl.po @@ -3,12 +3,12 @@ # This file is put in the public domain. # Fabian Nowak , 2011. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary 0.7.0.57309\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2011-06-19 16:41+0100\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch \n" @@ -254,21 +254,21 @@ msgstr "Persoonlijke map" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Annuleren" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "" @@ -302,7 +302,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -314,7 +314,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -439,7 +439,7 @@ msgstr "" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -451,30 +451,26 @@ msgstr "" msgid "diskselector item" msgstr "" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Knippen" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopiëren" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Plakken" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Selecteren" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "" @@ -515,17 +511,17 @@ msgstr "" msgid "Radio" msgstr "" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 #, fuzzy msgid "State: Unselected" msgstr "Selecteren" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -557,24 +553,24 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 #, fuzzy msgid "Selected" msgstr "Selecteren" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 #, fuzzy msgid "Unselected" msgstr "Selecteren" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "" diff --git a/po/pl.po b/po/pl.po index 1c785c3813..3f8384899a 100644 --- a/po/pl.po +++ b/po/pl.po @@ -3,12 +3,12 @@ # This file is put in the public domain. # Konrad Makowski , 2013 # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2013-11-23 14:48+0100\n" "Last-Translator: Konrad Makowski \n" "Language-Team: General\n" @@ -253,21 +253,21 @@ msgstr "Początek" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "OK" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Anuluj" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Statuj: wyłączony" @@ -302,7 +302,7 @@ msgstr "Tytuł" msgid "Back" msgstr "Cofnij" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Następny" @@ -314,7 +314,7 @@ msgstr "Tytuł okienka" msgid "Popup Body Text" msgstr "Treść główna okienka" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -439,7 +439,7 @@ msgstr "paleta wyboru kolorów" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -451,30 +451,26 @@ msgstr "wybór dni" msgid "diskselector item" msgstr "wybór dysków" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Wytnij" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopiuj" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Wklej" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Wybór" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Pozycja" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Indeks" @@ -515,16 +511,16 @@ msgstr "pasek postępu" msgid "Radio" msgstr "" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Stan: wybrany" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Stan: nie wybrany" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Kontrola Segmentami" @@ -557,22 +553,22 @@ msgstr "przycisk zmniejszający typu spinner" msgid "spinner text" msgstr "spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Wybrany" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separator" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Posiada menu" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Nie wybrany" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Pasek narzędzi" diff --git a/po/pt.po b/po/pt.po index 0c85a4d0ee..3cacb45927 100644 --- a/po/pt.po +++ b/po/pt.po @@ -3,12 +3,12 @@ # This file is public domain. # Sérgio Marques , 2010-2014 # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2013-11-05 14:11-0000\n" "Last-Translator: Sérgio Marques \n" "Language-Team: General\n" @@ -251,21 +251,21 @@ msgstr "Pasta pessoal" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Aceitar" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Cancelar" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Estado: inativo" @@ -300,7 +300,7 @@ msgstr "Título" msgid "Back" msgstr "Recuar" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Avançar" @@ -312,7 +312,7 @@ msgstr "Título do alerta" msgid "Popup Body Text" msgstr "Texto do alerta" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -437,7 +437,7 @@ msgstr "item do seletor de cor" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -449,30 +449,26 @@ msgstr "item do seletor de dia" msgid "diskselector item" msgstr "item do seletor de disco" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Cortar" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Copiar" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Colar" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Selecionar" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Entrada" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Item da grelha genérica" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Índice" @@ -513,16 +509,16 @@ msgstr "barra de progresso" msgid "Radio" msgstr "Opção" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Estado: selecionado" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Estado: não selecionado" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Item do controlo de segmento" @@ -555,26 +551,29 @@ msgstr "botão de diminuição do spinner" msgid "spinner text" msgstr "spinner" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Selecionado" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Separador" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Tem menu" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Não selecionado" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Item da barra de ferramentas" +#~ msgid "Gengrid Item" +#~ msgstr "Item da grelha genérica" + #~ msgid "Genlist Item" #~ msgstr "Item da lista genérica" diff --git a/po/ru.po b/po/ru.po index 1cb1a90849..2ffd124c7f 100644 --- a/po/ru.po +++ b/po/ru.po @@ -4,12 +4,12 @@ # Danny Moshnakov , 2012. # Igor Murzov , 2015. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary 1.11\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2015-02-07 15:16+0300\n" "Last-Translator: Игорь Мурзов \n" "Language-Team: ru \n" @@ -252,21 +252,21 @@ msgstr "Дом" msgid "Search" msgstr "Поиск" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "ОК" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Отмена" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Состояние: Отключено" @@ -301,7 +301,7 @@ msgstr "Заголовок" msgid "Back" msgstr "Назад" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Вперёд" @@ -313,7 +313,7 @@ msgstr "Заголовок всплывающего окна" msgid "Popup Body Text" msgstr "Текст всплывающего окна" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -438,7 +438,7 @@ msgstr "элемент выбора цвета палитры" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -450,30 +450,26 @@ msgstr "элемент выбора дня" msgid "diskselector item" msgstr "элемент диска выбора" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Вырезать" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Копировать" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Вставить" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Выбрать" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Запись" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Элемент сетки" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Алфавитный указатель" @@ -514,16 +510,16 @@ msgstr "индикатор выполнения" msgid "Radio" msgstr "Радио флажок" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Состояние: Выбрано" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Состояние: Невыбрано" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Элемент сегментного элемента управления" @@ -556,22 +552,25 @@ msgstr "кнопка уменьшения счётчика" msgid "spinner text" msgstr "счётчик" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Выбрано" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Разделитель" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "С меню" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Невыбрано" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Элемент панели инструментов" + +#~ msgid "Gengrid Item" +#~ msgstr "Элемент сетки" diff --git a/po/sl.po b/po/sl.po index 905ed663cf..997d0f3ab1 100644 --- a/po/sl.po +++ b/po/sl.po @@ -3,12 +3,12 @@ # This file is put in the public domain. # r1to , 2011. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: Efl\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2016-09-21 17:00+0200\n" "Last-Translator: Renato Rener \n" "Language-Team: Enlightenment Team\n" @@ -250,21 +250,21 @@ msgstr "Dom" msgid "Search" msgstr "Poišči" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "V redu" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Prekliči" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Stanje: onemogočeno" @@ -299,7 +299,7 @@ msgstr "Naslov" msgid "Back" msgstr "Nazaj" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Naslednje" @@ -311,7 +311,7 @@ msgstr "Naslov pojavnika" msgid "Popup Body Text" msgstr "Besedilo telesa pojavnika" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -436,7 +436,7 @@ msgstr "izbirnik s paleto barve" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -448,30 +448,26 @@ msgstr "izbirnik dneva" msgid "diskselector item" msgstr "izbirnik diska" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Izreži" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopiraj" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Prilepi" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Izberi" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Vnos" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Generator mreže" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Kazalo" @@ -512,16 +508,16 @@ msgstr "vrstica poteka" msgid "Radio" msgstr "Radio" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Stanje: Izbrano" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Stanje: Neizbrano" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Nadzornik segmenta" @@ -553,22 +549,25 @@ msgstr "gumb za zniževanje vrtilnika" msgid "spinner text" msgstr "besedilo vrtilnika" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Izbrano" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Ločilnik" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Ima meni" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Neizbrano" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Predmet orodne vrstice" + +#~ msgid "Gengrid Item" +#~ msgstr "Generator mreže" diff --git a/po/sr.po b/po/sr.po index b8a8c275be..079ded283c 100644 --- a/po/sr.po +++ b/po/sr.po @@ -4,12 +4,12 @@ # FIRST AUTHOR , 2013. # Саша Петровић , 2013, 2015. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: а\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2015-01-31 14:06+0100\n" "Last-Translator: Саша Петровић \n" "Language-Team: српски \n" @@ -254,21 +254,21 @@ msgstr "Лична фасцикла" msgid "Search" msgstr "Тражи" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "У реду" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Откажи" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Стање: онемогућено" @@ -303,7 +303,7 @@ msgstr "Наслов" msgid "Back" msgstr "Назад" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Следеће" @@ -315,7 +315,7 @@ msgstr "Искачући наслов" msgid "Popup Body Text" msgstr "Тело искачућег текста" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -440,7 +440,7 @@ msgstr "ставка избирача палете боја" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -452,30 +452,26 @@ msgstr "ставка одабирач дана" msgid "diskselector item" msgstr "ставка одабира диска" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Исеци" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Умножи" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Прилепи" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Изаберите" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Улаз" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Ставка родне мреже" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Садржина" @@ -516,16 +512,16 @@ msgstr "трака напретка" msgid "Radio" msgstr "Искључујуће дугме" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Стање: означено" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Стање: неозначено" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Ставка провере дела" @@ -558,22 +554,25 @@ msgstr "стрелица избирача смањења" msgid "spinner text" msgstr "избирач са стрелицама" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Изабрано" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Одвајач" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Има изборник" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Неозначено" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Ставка траке алата" + +#~ msgid "Gengrid Item" +#~ msgstr "Ставка родне мреже" diff --git a/po/tr.po b/po/tr.po index 401ccde1c8..a0cc346027 100644 --- a/po/tr.po +++ b/po/tr.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the enlightenment package. # FIRST AUTHOR , 2010. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: enlightenment\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2014-04-18 13:35+0000\n" "Last-Translator: Ali E.İMREK \n" "Language-Team: Turkish \n" @@ -251,21 +251,21 @@ msgstr "Ev" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Tamam" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "İptal" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Durum: Kapalı" @@ -300,7 +300,7 @@ msgstr "Başlık" msgid "Back" msgstr "Geri" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Sonraki" @@ -312,7 +312,7 @@ msgstr "Pencere başlığı" msgid "Popup Body Text" msgstr "Pencere gövde metni" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -437,7 +437,7 @@ msgstr "renk seçici paleti öğesi" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -449,30 +449,26 @@ msgstr "gün seçici ögesi" msgid "diskselector item" msgstr "disk seçici öğesi" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Kes" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Kopyala" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Yapıştır" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Seç" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Girdi" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Izgara öğesi" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Dizin" @@ -513,16 +509,16 @@ msgstr "ilerleme çubuğu" msgid "Radio" msgstr "Radyo" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Durum: Seçili" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Bölge: Seçilmedi" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Bölüm Kontrol Öğesi" @@ -555,22 +551,25 @@ msgstr "değiştirici azaltma düğmesi" msgid "spinner text" msgstr "değiştirici" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Seçili" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Ayraç" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "menü" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Seçili değil" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Araç Çubuğu Öğesi" + +#~ msgid "Gengrid Item" +#~ msgstr "Izgara öğesi" diff --git a/po/vi.po b/po/vi.po index 65fba278f2..a741f5d663 100644 --- a/po/vi.po +++ b/po/vi.po @@ -3,12 +3,12 @@ # This file is put in the public domain. # Thiep Ha , 2015. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2015-09-29 18:06+0900\n" "Last-Translator: Thiep Ha \n" "Language-Team: General\n" @@ -252,21 +252,21 @@ msgstr "Trang Chủ" msgid "Search" msgstr "Tìm Kiếm" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "Đồng Ý" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "Hủy" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "Trạng Thái: Không Khả Dụng" @@ -301,7 +301,7 @@ msgstr "Đề Mục" msgid "Back" msgstr "Quay Lại" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "Tiếp" @@ -313,7 +313,7 @@ msgstr "Tiêu Đề Hộp Thoại" msgid "Popup Body Text" msgstr "Văn Bản Thân Hộp Thoại" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -438,7 +438,7 @@ msgstr "Mục Của Bảng Chọn Màu" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -450,30 +450,26 @@ msgstr "Mục Của Bảng Chọn Ngày" msgid "diskselector item" msgstr "Mục Của Bộ Chọn Đĩa" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "Cắt" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "Sao Chép" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "Dán" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "Chọn" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "Bộ Nhập" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "Mục Của Gengrid" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "Chỉ Mục" @@ -514,16 +510,16 @@ msgstr "Thanh Trạng Thái" msgid "Radio" msgstr "Đài" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "Trạng Thái: Đã Chọn" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 msgid "State: Unselected" msgstr "Trạng Thái: Chưa Chọn" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "Mục Điều Khiển Đoạn" @@ -555,22 +551,25 @@ msgstr "Nút Giảm Bộ Xoay" msgid "spinner text" msgstr "Văn Bản Bộ Xoay" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "Đã Chọn" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "Bộ Tách" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "Có Bảng Chọn" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "Không Chọn" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "Mục Của Thanh Công Cụ" + +#~ msgid "Gengrid Item" +#~ msgstr "Mục Của Gengrid" diff --git a/po/zh_CN.po b/po/zh_CN.po index b16fed529a..f18f93f2c0 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -4,12 +4,12 @@ # This file is distributed under the same license as the Efl package. # Aron Xu , 2012. # -#: src/lib/elementary/elm_config.c:4240 +#: src/lib/elementary/elm_config.c:4306 msgid "" msgstr "" "Project-Id-Version: elementary\n" "Report-Msgid-Bugs-To: enlightenment-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2018-09-21 12:35+0100\n" +"POT-Creation-Date: 2018-12-06 14:49+0000\n" "PO-Revision-Date: 2012-12-22 03:55+0800\n" "Last-Translator: Aron Xu \n" "Language-Team: Chinese (simplified)\n" @@ -252,21 +252,21 @@ msgstr "主目录" msgid "Search" msgstr "" -#: src/lib/elementary/elc_fileselector.c:2103 +#: src/lib/elementary/elc_fileselector.c:2104 msgid "OK" msgstr "确定" -#: src/lib/elementary/elc_fileselector.c:2113 -#: src/lib/elementary/elm_entry.c:1734 src/lib/elementary/elm_entry.c:1759 +#: src/lib/elementary/elc_fileselector.c:2114 +#: src/lib/elementary/elm_entry.c:1739 src/lib/elementary/elm_entry.c:1764 msgid "Cancel" msgstr "取消" #: src/lib/elementary/elc_hoversel.c:438 src/lib/elementary/efl_ui_button.c:208 -#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1508 +#: src/lib/elementary/efl_ui_check.c:188 src/lib/elementary/elm_gengrid.c:1523 #: src/lib/elementary/elm_genlist.c:1764 src/lib/elementary/elm_list.c:2185 #: src/lib/elementary/efl_ui_radio.c:201 -#: src/lib/elementary/elm_segment_control.c:529 -#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2281 +#: src/lib/elementary/elm_segment_control.c:528 +#: src/lib/elementary/elm_spinner.c:1041 src/lib/elementary/elm_toolbar.c:2291 msgid "State: Disabled" msgstr "状态:已禁用" @@ -300,7 +300,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/lib/elementary/elc_naviframe.c:1356 +#: src/lib/elementary/elc_naviframe.c:1358 msgid "Next" msgstr "" @@ -312,7 +312,7 @@ msgstr "" msgid "Popup Body Text" msgstr "" -#: src/lib/elementary/elc_popup.c:1841 +#: src/lib/elementary/elc_popup.c:1842 msgid "Alert" msgstr "" @@ -443,7 +443,7 @@ msgstr "色彩选择器项目" #. but if this is a right-to-left language like arabic, Farsi, #. Hebrew, etc. then change this string to be "default:RTL" #. -#: src/lib/elementary/elm_config.c:4263 +#: src/lib/elementary/elm_config.c:4329 msgid "default:LTR" msgstr "default:LTR" @@ -456,30 +456,26 @@ msgstr "磁盘选择器项目" msgid "diskselector item" msgstr "磁盘选择器项目" -#: src/lib/elementary/elm_entry.c:1724 +#: src/lib/elementary/elm_entry.c:1729 msgid "Cut" msgstr "粘贴" -#: src/lib/elementary/elm_entry.c:1727 +#: src/lib/elementary/elm_entry.c:1732 msgid "Copy" msgstr "复制" -#: src/lib/elementary/elm_entry.c:1731 src/lib/elementary/elm_entry.c:1753 +#: src/lib/elementary/elm_entry.c:1736 src/lib/elementary/elm_entry.c:1758 msgid "Paste" msgstr "粘贴" -#: src/lib/elementary/elm_entry.c:1746 +#: src/lib/elementary/elm_entry.c:1751 msgid "Select" msgstr "选择" -#: src/lib/elementary/elm_entry.c:3895 +#: src/lib/elementary/elm_entry.c:3910 msgid "Entry" msgstr "条目" -#: src/lib/elementary/elm_gengrid.c:1538 -msgid "Gengrid Item" -msgstr "" - #: src/lib/elementary/elm_index.c:95 msgid "Index" msgstr "索引" @@ -520,17 +516,17 @@ msgstr "进度条" msgid "Radio" msgstr "无线电" -#: src/lib/elementary/elm_segment_control.c:532 -#: src/lib/elementary/elm_toolbar.c:2283 +#: src/lib/elementary/elm_segment_control.c:531 +#: src/lib/elementary/elm_toolbar.c:2293 msgid "State: Selected" msgstr "状态:已选择" -#: src/lib/elementary/elm_segment_control.c:534 +#: src/lib/elementary/elm_segment_control.c:533 #, fuzzy msgid "State: Unselected" msgstr "状态:已选择" -#: src/lib/elementary/elm_segment_control.c:548 +#: src/lib/elementary/elm_segment_control.c:547 msgid "Segment Control Item" msgstr "" @@ -562,23 +558,23 @@ msgstr "" msgid "spinner text" msgstr "" -#: src/lib/elementary/elm_toolbar.c:1738 src/lib/elementary/elm_toolbar.c:2342 +#: src/lib/elementary/elm_toolbar.c:1750 src/lib/elementary/elm_toolbar.c:2352 msgid "Selected" msgstr "已选择" -#: src/lib/elementary/elm_toolbar.c:2279 +#: src/lib/elementary/elm_toolbar.c:2289 msgid "Separator" msgstr "分隔符" -#: src/lib/elementary/elm_toolbar.c:2285 +#: src/lib/elementary/elm_toolbar.c:2295 msgid "Has menu" msgstr "有菜单" -#: src/lib/elementary/elm_toolbar.c:2337 +#: src/lib/elementary/elm_toolbar.c:2347 msgid "Unselected" msgstr "未选择" -#: src/lib/elementary/elm_toolbar.c:2354 +#: src/lib/elementary/elm_toolbar.c:2364 msgid "Toolbar Item" msgstr "工具栏项目" From 3deb46b503ab6829d06d9bee720614bf578113ca Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 6 Dec 2018 15:28:25 +0000 Subject: [PATCH 86/86] evas - cpu - fix sve check when neon is disabled... --- src/lib/evas/common/evas_cpu.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/lib/evas/common/evas_cpu.c b/src/lib/evas/common/evas_cpu.c index d9215e1140..d9f5c015ee 100644 --- a/src/lib/evas/common/evas_cpu.c +++ b/src/lib/evas/common/evas_cpu.c @@ -90,15 +90,6 @@ evas_common_cpu_neon_test(void) //#endif } -void -evas_common_cpu_sve_test(void) -{ -#if defined(__aarch64__) - volatile int result = 123; - asm("movz %w[res], #10" : [res] "=r" (result)); -#endif -} - void evas_common_cpu_vis_test(void) { @@ -130,6 +121,15 @@ _cpu_check(Eina_Cpu_Features f) } #endif +#if defined(__aarch64__) +void +evas_common_cpu_sve_test(void) +{ + volatile int result = 123; + asm("movz %w[res], #10" : [res] "=r" (result)); +} +#endif + #ifdef NEED_FEATURE_TEST int evas_common_cpu_feature_test(void (*feature)(void)) @@ -274,15 +274,14 @@ evas_common_cpu_init(void) cpu_feature_mask &= ~CPU_FEATURE_SVE; else { -# if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) -#error "xx" +# if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) cpu_feature_mask |= CPU_FEATURE_SVE * !!(eina_cpu_features_get() & EINA_CPU_SVE); -# else +# else cpu_feature_mask |= CPU_FEATURE_SVE * evas_common_cpu_feature_test(evas_common_cpu_sve_test); evas_common_cpu_end_opt(); -# endif +# endif } #endif }