diff options
author | Perberos <[email protected]> | 2011-12-01 22:56:10 -0300 |
---|---|---|
committer | Perberos <[email protected]> | 2011-12-01 22:56:10 -0300 |
commit | c51ef797a707f4e2c6f9688d4378f2b0e9898a66 (patch) | |
tree | 019ae92bb53c19b30077545cb14743cbd1b57aef /applets/clock | |
download | mate-panel-c51ef797a707f4e2c6f9688d4378f2b0e9898a66.tar.bz2 mate-panel-c51ef797a707f4e2c6f9688d4378f2b0e9898a66.tar.xz |
moving from https://github.com/perberos/mate-desktop-environment
Diffstat (limited to 'applets/clock')
48 files changed, 20443 insertions, 0 deletions
diff --git a/applets/clock/Makefile.am b/applets/clock/Makefile.am new file mode 100644 index 00000000..afda6eb2 --- /dev/null +++ b/applets/clock/Makefile.am @@ -0,0 +1,205 @@ +SUBDIRS = pixmaps + +noinst_LTLIBRARIES = libsystem-timezone.la +noinst_PROGRAMS = test-system-timezone + +AM_CPPFLAGS = \ + $(TZ_CFLAGS) \ + $(DISABLE_DEPRECATED_CFLAGS) + +AM_CFLAGS = $(WARN_CFLAGS) + +libsystem_timezone_la_SOURCES = \ + system-timezone.c \ + system-timezone.h +libsystem_timezone_la_LIBADD = $(TZ_LIBS) + +if HAVE_LIBECAL +CALENDAR_SOURCES = \ + calendar-client.c \ + calendar-client.h \ + calendar-sources.c \ + calendar-sources.h \ + calendar-debug.h +endif + +CLOCK_SOURCES = \ + calendar-window.c \ + calendar-window.h \ + clock.c \ + clock.h \ + clock-face.c \ + clock-face.h \ + clock-location.c \ + clock-location.h \ + clock-location-tile.c \ + clock-location-tile.h \ + clock-map.c \ + clock-map.h \ + clock-sunpos.c \ + clock-sunpos.h \ + clock-utils.c \ + clock-utils.h \ + set-timezone.c \ + set-timezone.h \ + $(BUILT_SOURCES) \ + $(CALENDAR_SOURCES) + +CLOCK_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + $(LIBMATE_PANEL_APPLET_CFLAGS) \ + $(CLOCK_CFLAGS) \ + -I$(srcdir)/../../libmate-panel-applet \ + -I$(top_builddir)/libmate-panel-applet \ + -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ + -DBUILDERDIR=\""$(uidir)"\" \ + -DCLOCK_MENU_UI_DIR=\""$(xmluidir)"\" \ + -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \ + -DCLOCK_EDS_ICONDIR="\"$(CLOCK_EDS_ICONDIR)\"" \ + -DMATEWEATHER_I_KNOW_THIS_IS_UNSTABLE + +CLOCK_LDADD = \ + ../../libmate-panel-applet/libmate-panel-applet-3.la \ + $(CLOCK_LIBS) \ + $(LIBMATE_PANEL_APPLET_LIBS) \ + libsystem-timezone.la \ + -lm + +test_system_timezone_SOURCES = \ + test-system-timezone.c +test_system_timezone_LDADD = libsystem-timezone.la + +if CLOCK_INPROCESS +APPLET_IN_PROCESS = true +APPLET_LOCATION = $(pkglibdir)/libclock-applet.so + +clock_appletlibdir = $(pkglibdir) +clock_appletlib_LTLIBRARIES = libclock-applet.la +libclock_applet_la_SOURCES = $(CLOCK_SOURCES) +libclock_applet_la_CPPFLAGS = $(CLOCK_CPPFLAGS) +libclock_applet_la_LIBADD = $(CLOCK_LDADD) +libclock_applet_la_LDFLAGS = -module -avoid-version +libclock_applet_la_CFLAGS = $(AM_CFLAGS) +$(libclock_applet_la_OBJECTS): $(BUILT_SOURCES) +else +APPLET_IN_PROCESS = false +APPLET_LOCATION = $(libexecdir)/clock-applet + +libexec_PROGRAMS = clock-applet +clock_applet_SOURCES = $(CLOCK_SOURCES) +clock_applet_CPPFLAGS = $(CLOCK_CPPFLAGS) +clock_applet_LDADD = $(CLOCK_LDADD) +clock_applet_CFLAGS = $(AM_CFLAGS) +$(clock_applet_OBJECTS): $(BUILT_SOURCES) +endif + +clock-marshallers.c: clock-marshallers.list + $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --body --internal $< > $@ + +clock-marshallers.h: clock-marshallers.list + $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@ + +clock_enum_headers = \ + $(top_srcdir)/applets/clock/clock-utils.h + +clock-typebuiltins.c: @REBUILD@ $(clock_enum_headers) + $(AM_V_GEN)glib-mkenums \ + --fhead "#include <glib-object.h>\n" \ + --fhead "#include \"clock-typebuiltins.h\"\n\n" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --fprod "\n#include \"@filename@\"\n" \ + --vhead "static const GEnumValue _@enum_name@_values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n};\n\n" \ + --vtail "GType\n@enum_name@_get_type (void)\n{\n" \ + --vtail " static GType type = 0;\n\n" \ + --vtail " if (!type)\n" \ + --vtail " type = g_enum_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \ + --vtail " return type;\n}\n\n" \ + $(clock_enum_headers) > $@ + +clock-typebuiltins.h: @REBUILD@ $(clock_enum_headers) + $(AM_V_GEN)glib-mkenums \ + --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \ + --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \ + --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \ + --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \ + --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \ + --fprod "\n/* --- @filename@ --- */" \ + --eprod "#define CLOCK_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \ + --eprod "GType @enum_name@_get_type (void);\n" \ + $(clock_enum_headers) > $@ + +BUILT_SOURCES = \ + clock-marshallers.c \ + clock-marshallers.h \ + clock-typebuiltins.c \ + clock-typebuiltins.h + +appletdir = $(datadir)/mate-panel/applets +applet_in_files = org.mate.panel.ClockApplet.mate-panel-applet.in +applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet) + +$(applet_in_files): $(applet_in_files).in Makefile + $(AM_V_GEN)sed \ + -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \ + -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \ + -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \ + $< > $@ + +@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@ + +if !CLOCK_INPROCESS +servicedir = $(datadir)/dbus-1/services +service_in_files = org.mate.panel.applet.ClockAppletFactory.service.in +service_DATA = $(service_in_files:.service.in=.service) + +org.mate.panel.applet.ClockAppletFactory.service: $(service_in_files) + $(AM_V_GEN)sed \ + -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \ + $< > $@ +endif + +uidir = $(datadir)/mate-panel/ui +ui_DATA = clock.ui + +xmluidir = $(datadir)/mate-panel/ui +xmlui_DATA = clock-menu.xml + +schemasdir = $(MATECONF_SCHEMA_FILE_DIR) +schemas_in_files = clock.schemas.in +schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) + +@INTLTOOL_SCHEMAS_RULE@ + +if MATECONF_SCHEMAS_INSTALL +install-data-local: + if test -z "$(DESTDIR)" ; then \ + for p in $(schemas_DATA) ; do \ + MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/clock/$$p ; \ + done \ + fi +uninstall-local: + for p in $(schema_DATA) ; do \ + MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/clock/$$p ; \ + done +endif + +EXTRA_DIST = \ + org.mate.panel.ClockApplet.mate-panel-applet.in.in \ + $(schemas_in_files) \ + $(xmlui_DATA) \ + $(ui_DATA) \ + clock-marshallers.list \ + $(service_in_files) + +CLEANFILES = \ + $(BUILT_SOURCES) \ + $(applet_DATA) \ + $(applet_DATA).in \ + $(service_DATA) \ + $(schemas_DATA) \ + $(polkit_DATA) \ + $(dbus_services_DATA) + +-include $(top_srcdir)/git.mk diff --git a/applets/clock/Makefile.in b/applets/clock/Makefile.in new file mode 100644 index 00000000..e51ce949 --- /dev/null +++ b/applets/clock/Makefile.in @@ -0,0 +1,1595 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = test-system-timezone$(EXEEXT) +@CLOCK_INPROCESS_FALSE@libexec_PROGRAMS = clock-applet$(EXEEXT) +subdir = applets/clock +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(clock_appletlibdir)" \ + "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" \ + "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" \ + "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)" +LTLIBRARIES = $(clock_appletlib_LTLIBRARIES) $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = \ + ../../libmate-panel-applet/libmate-panel-applet-3.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + libsystem-timezone.la +@CLOCK_INPROCESS_TRUE@libclock_applet_la_DEPENDENCIES = \ +@CLOCK_INPROCESS_TRUE@ $(am__DEPENDENCIES_2) +am__libclock_applet_la_SOURCES_DIST = calendar-window.c \ + calendar-window.h clock.c clock.h clock-face.c clock-face.h \ + clock-location.c clock-location.h clock-location-tile.c \ + clock-location-tile.h clock-map.c clock-map.h clock-sunpos.c \ + clock-sunpos.h clock-utils.c clock-utils.h set-timezone.c \ + set-timezone.h clock-marshallers.c clock-marshallers.h \ + clock-typebuiltins.c clock-typebuiltins.h calendar-client.c \ + calendar-client.h calendar-sources.c calendar-sources.h \ + calendar-debug.h +am__objects_1 = libclock_applet_la-clock-marshallers.lo \ + libclock_applet_la-clock-typebuiltins.lo +@HAVE_LIBECAL_TRUE@am__objects_2 = \ +@HAVE_LIBECAL_TRUE@ libclock_applet_la-calendar-client.lo \ +@HAVE_LIBECAL_TRUE@ libclock_applet_la-calendar-sources.lo +am__objects_3 = libclock_applet_la-calendar-window.lo \ + libclock_applet_la-clock.lo libclock_applet_la-clock-face.lo \ + libclock_applet_la-clock-location.lo \ + libclock_applet_la-clock-location-tile.lo \ + libclock_applet_la-clock-map.lo \ + libclock_applet_la-clock-sunpos.lo \ + libclock_applet_la-clock-utils.lo \ + libclock_applet_la-set-timezone.lo $(am__objects_1) \ + $(am__objects_2) +@CLOCK_INPROCESS_TRUE@am_libclock_applet_la_OBJECTS = \ +@CLOCK_INPROCESS_TRUE@ $(am__objects_3) +libclock_applet_la_OBJECTS = $(am_libclock_applet_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libclock_applet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(libclock_applet_la_CFLAGS) $(CFLAGS) \ + $(libclock_applet_la_LDFLAGS) $(LDFLAGS) -o $@ +@CLOCK_INPROCESS_TRUE@am_libclock_applet_la_rpath = -rpath \ +@CLOCK_INPROCESS_TRUE@ $(clock_appletlibdir) +libsystem_timezone_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_libsystem_timezone_la_OBJECTS = system-timezone.lo +libsystem_timezone_la_OBJECTS = $(am_libsystem_timezone_la_OBJECTS) +PROGRAMS = $(libexec_PROGRAMS) $(noinst_PROGRAMS) +am__clock_applet_SOURCES_DIST = calendar-window.c calendar-window.h \ + clock.c clock.h clock-face.c clock-face.h clock-location.c \ + clock-location.h clock-location-tile.c clock-location-tile.h \ + clock-map.c clock-map.h clock-sunpos.c clock-sunpos.h \ + clock-utils.c clock-utils.h set-timezone.c set-timezone.h \ + clock-marshallers.c clock-marshallers.h clock-typebuiltins.c \ + clock-typebuiltins.h calendar-client.c calendar-client.h \ + calendar-sources.c calendar-sources.h calendar-debug.h +am__objects_4 = clock_applet-clock-marshallers.$(OBJEXT) \ + clock_applet-clock-typebuiltins.$(OBJEXT) +@HAVE_LIBECAL_TRUE@am__objects_5 = \ +@HAVE_LIBECAL_TRUE@ clock_applet-calendar-client.$(OBJEXT) \ +@HAVE_LIBECAL_TRUE@ clock_applet-calendar-sources.$(OBJEXT) +am__objects_6 = clock_applet-calendar-window.$(OBJEXT) \ + clock_applet-clock.$(OBJEXT) clock_applet-clock-face.$(OBJEXT) \ + clock_applet-clock-location.$(OBJEXT) \ + clock_applet-clock-location-tile.$(OBJEXT) \ + clock_applet-clock-map.$(OBJEXT) \ + clock_applet-clock-sunpos.$(OBJEXT) \ + clock_applet-clock-utils.$(OBJEXT) \ + clock_applet-set-timezone.$(OBJEXT) $(am__objects_4) \ + $(am__objects_5) +@CLOCK_INPROCESS_FALSE@am_clock_applet_OBJECTS = $(am__objects_6) +clock_applet_OBJECTS = $(am_clock_applet_OBJECTS) +@CLOCK_INPROCESS_FALSE@clock_applet_DEPENDENCIES = \ +@CLOCK_INPROCESS_FALSE@ $(am__DEPENDENCIES_2) +clock_applet_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(clock_applet_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_test_system_timezone_OBJECTS = test-system-timezone.$(OBJEXT) +test_system_timezone_OBJECTS = $(am_test_system_timezone_OBJECTS) +test_system_timezone_DEPENDENCIES = libsystem-timezone.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libclock_applet_la_SOURCES) \ + $(libsystem_timezone_la_SOURCES) $(clock_applet_SOURCES) \ + $(test_system_timezone_SOURCES) +DIST_SOURCES = $(am__libclock_applet_la_SOURCES_DIST) \ + $(libsystem_timezone_la_SOURCES) \ + $(am__clock_applet_SOURCES_DIST) \ + $(test_system_timezone_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +DATA = $(applet_DATA) $(schemas_DATA) $(service_DATA) $(ui_DATA) \ + $(xmlui_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLOCK_CFLAGS = @CLOCK_CFLAGS@ +CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@ +CLOCK_LIBS = @CLOCK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@ +EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FISH_CFLAGS = @FISH_CFLAGS@ +FISH_LIBS = @FISH_LIBS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GIO_QUERYMODULES = @GIO_QUERYMODULES@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ +INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ +INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ +INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ +INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ +INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@ +LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@ +LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@ +LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@ +LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@ +MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@ +MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@ +MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MATECORBA_IDL = @MATECORBA_IDL@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@ +NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@ +NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PANEL_CFLAGS = @PANEL_CFLAGS@ +PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@ +PANEL_LIBS = @PANEL_LIBS@ +PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@ +PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +REBUILD = @REBUILD@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TZ_CFLAGS = @TZ_CFLAGS@ +TZ_LIBS = @TZ_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WNCKLET_CFLAGS = @WNCKLET_CFLAGS@ +WNCKLET_LIBS = @WNCKLET_LIBS@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +XRANDR_CFLAGS = @XRANDR_CFLAGS@ +XRANDR_LIBS = @XRANDR_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +appletsdir = @appletsdir@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesdir = @modulesdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = pixmaps +noinst_LTLIBRARIES = libsystem-timezone.la +AM_CPPFLAGS = \ + $(TZ_CFLAGS) \ + $(DISABLE_DEPRECATED_CFLAGS) + +AM_CFLAGS = $(WARN_CFLAGS) +libsystem_timezone_la_SOURCES = \ + system-timezone.c \ + system-timezone.h + +libsystem_timezone_la_LIBADD = $(TZ_LIBS) +@HAVE_LIBECAL_TRUE@CALENDAR_SOURCES = \ +@HAVE_LIBECAL_TRUE@ calendar-client.c \ +@HAVE_LIBECAL_TRUE@ calendar-client.h \ +@HAVE_LIBECAL_TRUE@ calendar-sources.c \ +@HAVE_LIBECAL_TRUE@ calendar-sources.h \ +@HAVE_LIBECAL_TRUE@ calendar-debug.h + +CLOCK_SOURCES = \ + calendar-window.c \ + calendar-window.h \ + clock.c \ + clock.h \ + clock-face.c \ + clock-face.h \ + clock-location.c \ + clock-location.h \ + clock-location-tile.c \ + clock-location-tile.h \ + clock-map.c \ + clock-map.h \ + clock-sunpos.c \ + clock-sunpos.h \ + clock-utils.c \ + clock-utils.h \ + set-timezone.c \ + set-timezone.h \ + $(BUILT_SOURCES) \ + $(CALENDAR_SOURCES) + +CLOCK_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + $(LIBMATE_PANEL_APPLET_CFLAGS) \ + $(CLOCK_CFLAGS) \ + -I$(srcdir)/../../libmate-panel-applet \ + -I$(top_builddir)/libmate-panel-applet \ + -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ + -DBUILDERDIR=\""$(uidir)"\" \ + -DCLOCK_MENU_UI_DIR=\""$(xmluidir)"\" \ + -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \ + -DCLOCK_EDS_ICONDIR="\"$(CLOCK_EDS_ICONDIR)\"" \ + -DMATEWEATHER_I_KNOW_THIS_IS_UNSTABLE + +CLOCK_LDADD = \ + ../../libmate-panel-applet/libmate-panel-applet-3.la \ + $(CLOCK_LIBS) \ + $(LIBMATE_PANEL_APPLET_LIBS) \ + libsystem-timezone.la \ + -lm + +test_system_timezone_SOURCES = \ + test-system-timezone.c + +test_system_timezone_LDADD = libsystem-timezone.la +@CLOCK_INPROCESS_FALSE@APPLET_IN_PROCESS = false +@CLOCK_INPROCESS_TRUE@APPLET_IN_PROCESS = true +@CLOCK_INPROCESS_FALSE@APPLET_LOCATION = $(libexecdir)/clock-applet +@CLOCK_INPROCESS_TRUE@APPLET_LOCATION = $(pkglibdir)/libclock-applet.so +@CLOCK_INPROCESS_TRUE@clock_appletlibdir = $(pkglibdir) +@CLOCK_INPROCESS_TRUE@clock_appletlib_LTLIBRARIES = libclock-applet.la +@CLOCK_INPROCESS_TRUE@libclock_applet_la_SOURCES = $(CLOCK_SOURCES) +@CLOCK_INPROCESS_TRUE@libclock_applet_la_CPPFLAGS = $(CLOCK_CPPFLAGS) +@CLOCK_INPROCESS_TRUE@libclock_applet_la_LIBADD = $(CLOCK_LDADD) +@CLOCK_INPROCESS_TRUE@libclock_applet_la_LDFLAGS = -module -avoid-version +@CLOCK_INPROCESS_TRUE@libclock_applet_la_CFLAGS = $(AM_CFLAGS) +@CLOCK_INPROCESS_FALSE@clock_applet_SOURCES = $(CLOCK_SOURCES) +@CLOCK_INPROCESS_FALSE@clock_applet_CPPFLAGS = $(CLOCK_CPPFLAGS) +@CLOCK_INPROCESS_FALSE@clock_applet_LDADD = $(CLOCK_LDADD) +@CLOCK_INPROCESS_FALSE@clock_applet_CFLAGS = $(AM_CFLAGS) +clock_enum_headers = \ + $(top_srcdir)/applets/clock/clock-utils.h + +BUILT_SOURCES = \ + clock-marshallers.c \ + clock-marshallers.h \ + clock-typebuiltins.c \ + clock-typebuiltins.h + +appletdir = $(datadir)/mate-panel/applets +applet_in_files = org.mate.panel.ClockApplet.mate-panel-applet.in +applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet) +@CLOCK_INPROCESS_FALSE@servicedir = $(datadir)/dbus-1/services +@CLOCK_INPROCESS_FALSE@service_in_files = org.mate.panel.applet.ClockAppletFactory.service.in +@CLOCK_INPROCESS_FALSE@service_DATA = $(service_in_files:.service.in=.service) +uidir = $(datadir)/mate-panel/ui +ui_DATA = clock.ui +xmluidir = $(datadir)/mate-panel/ui +xmlui_DATA = clock-menu.xml +schemasdir = $(MATECONF_SCHEMA_FILE_DIR) +schemas_in_files = clock.schemas.in +schemas_DATA = $(schemas_in_files:.schemas.in=.schemas) +EXTRA_DIST = \ + org.mate.panel.ClockApplet.mate-panel-applet.in.in \ + $(schemas_in_files) \ + $(xmlui_DATA) \ + $(ui_DATA) \ + clock-marshallers.list \ + $(service_in_files) + +CLEANFILES = \ + $(BUILT_SOURCES) \ + $(applet_DATA) \ + $(applet_DATA).in \ + $(service_DATA) \ + $(schemas_DATA) \ + $(polkit_DATA) \ + $(dbus_services_DATA) + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/clock/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu applets/clock/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-clock_appletlibLTLIBRARIES: $(clock_appletlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(clock_appletlibdir)" || $(MKDIR_P) "$(DESTDIR)$(clock_appletlibdir)" + @list='$(clock_appletlib_LTLIBRARIES)'; test -n "$(clock_appletlibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(clock_appletlibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(clock_appletlibdir)"; \ + } + +uninstall-clock_appletlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(clock_appletlib_LTLIBRARIES)'; test -n "$(clock_appletlibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(clock_appletlibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(clock_appletlibdir)/$$f"; \ + done + +clean-clock_appletlibLTLIBRARIES: + -test -z "$(clock_appletlib_LTLIBRARIES)" || rm -f $(clock_appletlib_LTLIBRARIES) + @list='$(clock_appletlib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libclock-applet.la: $(libclock_applet_la_OBJECTS) $(libclock_applet_la_DEPENDENCIES) + $(AM_V_CCLD)$(libclock_applet_la_LINK) $(am_libclock_applet_la_rpath) $(libclock_applet_la_OBJECTS) $(libclock_applet_la_LIBADD) $(LIBS) +libsystem-timezone.la: $(libsystem_timezone_la_OBJECTS) $(libsystem_timezone_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libsystem_timezone_la_OBJECTS) $(libsystem_timezone_la_LIBADD) $(LIBS) +install-libexecPROGRAMS: $(libexec_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)" + @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-libexecPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(libexecdir)" && rm -f $$files + +clean-libexecPROGRAMS: + @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +clock-applet$(EXEEXT): $(clock_applet_OBJECTS) $(clock_applet_DEPENDENCIES) + @rm -f clock-applet$(EXEEXT) + $(AM_V_CCLD)$(clock_applet_LINK) $(clock_applet_OBJECTS) $(clock_applet_LDADD) $(LIBS) +test-system-timezone$(EXEEXT): $(test_system_timezone_OBJECTS) $(test_system_timezone_DEPENDENCIES) + @rm -f test-system-timezone$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_system_timezone_OBJECTS) $(test_system_timezone_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-client.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-sources.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-window.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-face.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-location-tile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-location.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-map.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-marshallers.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-sunpos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-typebuiltins.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-set-timezone.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-client.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-sources.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-window.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-face.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-location-tile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-location.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-map.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-marshallers.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-sunpos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-typebuiltins.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-set-timezone.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system-timezone.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-system-timezone.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libclock_applet_la-calendar-window.lo: calendar-window.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-window.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-window.Tpo -c -o libclock_applet_la-calendar-window.lo `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-window.Tpo $(DEPDIR)/libclock_applet_la-calendar-window.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='libclock_applet_la-calendar-window.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-window.lo `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c + +libclock_applet_la-clock.lo: clock.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock.Tpo -c -o libclock_applet_la-clock.lo `test -f 'clock.c' || echo '$(srcdir)/'`clock.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock.Tpo $(DEPDIR)/libclock_applet_la-clock.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='libclock_applet_la-clock.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock.lo `test -f 'clock.c' || echo '$(srcdir)/'`clock.c + +libclock_applet_la-clock-face.lo: clock-face.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-face.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-face.Tpo -c -o libclock_applet_la-clock-face.lo `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-face.Tpo $(DEPDIR)/libclock_applet_la-clock-face.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='libclock_applet_la-clock-face.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-face.lo `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c + +libclock_applet_la-clock-location.lo: clock-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-location.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-location.Tpo -c -o libclock_applet_la-clock-location.lo `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-location.Tpo $(DEPDIR)/libclock_applet_la-clock-location.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='libclock_applet_la-clock-location.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-location.lo `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c + +libclock_applet_la-clock-location-tile.lo: clock-location-tile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-location-tile.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-location-tile.Tpo -c -o libclock_applet_la-clock-location-tile.lo `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-location-tile.Tpo $(DEPDIR)/libclock_applet_la-clock-location-tile.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='libclock_applet_la-clock-location-tile.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-location-tile.lo `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c + +libclock_applet_la-clock-map.lo: clock-map.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-map.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-map.Tpo -c -o libclock_applet_la-clock-map.lo `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-map.Tpo $(DEPDIR)/libclock_applet_la-clock-map.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='libclock_applet_la-clock-map.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-map.lo `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c + +libclock_applet_la-clock-sunpos.lo: clock-sunpos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-sunpos.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-sunpos.Tpo -c -o libclock_applet_la-clock-sunpos.lo `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-sunpos.Tpo $(DEPDIR)/libclock_applet_la-clock-sunpos.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='libclock_applet_la-clock-sunpos.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-sunpos.lo `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c + +libclock_applet_la-clock-utils.lo: clock-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-utils.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-utils.Tpo -c -o libclock_applet_la-clock-utils.lo `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-utils.Tpo $(DEPDIR)/libclock_applet_la-clock-utils.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='libclock_applet_la-clock-utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-utils.lo `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c + +libclock_applet_la-set-timezone.lo: set-timezone.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-set-timezone.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-set-timezone.Tpo -c -o libclock_applet_la-set-timezone.lo `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-set-timezone.Tpo $(DEPDIR)/libclock_applet_la-set-timezone.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='libclock_applet_la-set-timezone.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-set-timezone.lo `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c + +libclock_applet_la-clock-marshallers.lo: clock-marshallers.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-marshallers.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-marshallers.Tpo -c -o libclock_applet_la-clock-marshallers.lo `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-marshallers.Tpo $(DEPDIR)/libclock_applet_la-clock-marshallers.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='libclock_applet_la-clock-marshallers.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-marshallers.lo `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c + +libclock_applet_la-clock-typebuiltins.lo: clock-typebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-typebuiltins.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Tpo -c -o libclock_applet_la-clock-typebuiltins.lo `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Tpo $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='libclock_applet_la-clock-typebuiltins.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-typebuiltins.lo `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c + +libclock_applet_la-calendar-client.lo: calendar-client.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-client.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-client.Tpo -c -o libclock_applet_la-calendar-client.lo `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-client.Tpo $(DEPDIR)/libclock_applet_la-calendar-client.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='libclock_applet_la-calendar-client.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-client.lo `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c + +libclock_applet_la-calendar-sources.lo: calendar-sources.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-sources.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-sources.Tpo -c -o libclock_applet_la-calendar-sources.lo `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-sources.Tpo $(DEPDIR)/libclock_applet_la-calendar-sources.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='libclock_applet_la-calendar-sources.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-sources.lo `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c + +clock_applet-calendar-window.o: calendar-window.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-window.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-window.Tpo -c -o clock_applet-calendar-window.o `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-window.Tpo $(DEPDIR)/clock_applet-calendar-window.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='clock_applet-calendar-window.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-window.o `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c + +clock_applet-calendar-window.obj: calendar-window.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-window.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-window.Tpo -c -o clock_applet-calendar-window.obj `if test -f 'calendar-window.c'; then $(CYGPATH_W) 'calendar-window.c'; else $(CYGPATH_W) '$(srcdir)/calendar-window.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-window.Tpo $(DEPDIR)/clock_applet-calendar-window.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='clock_applet-calendar-window.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-window.obj `if test -f 'calendar-window.c'; then $(CYGPATH_W) 'calendar-window.c'; else $(CYGPATH_W) '$(srcdir)/calendar-window.c'; fi` + +clock_applet-clock.o: clock.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock.o -MD -MP -MF $(DEPDIR)/clock_applet-clock.Tpo -c -o clock_applet-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock.Tpo $(DEPDIR)/clock_applet-clock.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='clock_applet-clock.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c + +clock_applet-clock.obj: clock.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock.Tpo -c -o clock_applet-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock.Tpo $(DEPDIR)/clock_applet-clock.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='clock_applet-clock.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi` + +clock_applet-clock-face.o: clock-face.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-face.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-face.Tpo -c -o clock_applet-clock-face.o `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-face.Tpo $(DEPDIR)/clock_applet-clock-face.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='clock_applet-clock-face.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-face.o `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c + +clock_applet-clock-face.obj: clock-face.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-face.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-face.Tpo -c -o clock_applet-clock-face.obj `if test -f 'clock-face.c'; then $(CYGPATH_W) 'clock-face.c'; else $(CYGPATH_W) '$(srcdir)/clock-face.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-face.Tpo $(DEPDIR)/clock_applet-clock-face.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='clock_applet-clock-face.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-face.obj `if test -f 'clock-face.c'; then $(CYGPATH_W) 'clock-face.c'; else $(CYGPATH_W) '$(srcdir)/clock-face.c'; fi` + +clock_applet-clock-location.o: clock-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-location.Tpo -c -o clock_applet-clock-location.o `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location.Tpo $(DEPDIR)/clock_applet-clock-location.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='clock_applet-clock-location.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location.o `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c + +clock_applet-clock-location.obj: clock-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-location.Tpo -c -o clock_applet-clock-location.obj `if test -f 'clock-location.c'; then $(CYGPATH_W) 'clock-location.c'; else $(CYGPATH_W) '$(srcdir)/clock-location.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location.Tpo $(DEPDIR)/clock_applet-clock-location.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='clock_applet-clock-location.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location.obj `if test -f 'clock-location.c'; then $(CYGPATH_W) 'clock-location.c'; else $(CYGPATH_W) '$(srcdir)/clock-location.c'; fi` + +clock_applet-clock-location-tile.o: clock-location-tile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location-tile.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-location-tile.Tpo -c -o clock_applet-clock-location-tile.o `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location-tile.Tpo $(DEPDIR)/clock_applet-clock-location-tile.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='clock_applet-clock-location-tile.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location-tile.o `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c + +clock_applet-clock-location-tile.obj: clock-location-tile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location-tile.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-location-tile.Tpo -c -o clock_applet-clock-location-tile.obj `if test -f 'clock-location-tile.c'; then $(CYGPATH_W) 'clock-location-tile.c'; else $(CYGPATH_W) '$(srcdir)/clock-location-tile.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location-tile.Tpo $(DEPDIR)/clock_applet-clock-location-tile.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='clock_applet-clock-location-tile.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location-tile.obj `if test -f 'clock-location-tile.c'; then $(CYGPATH_W) 'clock-location-tile.c'; else $(CYGPATH_W) '$(srcdir)/clock-location-tile.c'; fi` + +clock_applet-clock-map.o: clock-map.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-map.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-map.Tpo -c -o clock_applet-clock-map.o `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-map.Tpo $(DEPDIR)/clock_applet-clock-map.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='clock_applet-clock-map.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-map.o `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c + +clock_applet-clock-map.obj: clock-map.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-map.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-map.Tpo -c -o clock_applet-clock-map.obj `if test -f 'clock-map.c'; then $(CYGPATH_W) 'clock-map.c'; else $(CYGPATH_W) '$(srcdir)/clock-map.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-map.Tpo $(DEPDIR)/clock_applet-clock-map.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='clock_applet-clock-map.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-map.obj `if test -f 'clock-map.c'; then $(CYGPATH_W) 'clock-map.c'; else $(CYGPATH_W) '$(srcdir)/clock-map.c'; fi` + +clock_applet-clock-sunpos.o: clock-sunpos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-sunpos.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-sunpos.Tpo -c -o clock_applet-clock-sunpos.o `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-sunpos.Tpo $(DEPDIR)/clock_applet-clock-sunpos.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='clock_applet-clock-sunpos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-sunpos.o `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c + +clock_applet-clock-sunpos.obj: clock-sunpos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-sunpos.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-sunpos.Tpo -c -o clock_applet-clock-sunpos.obj `if test -f 'clock-sunpos.c'; then $(CYGPATH_W) 'clock-sunpos.c'; else $(CYGPATH_W) '$(srcdir)/clock-sunpos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-sunpos.Tpo $(DEPDIR)/clock_applet-clock-sunpos.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='clock_applet-clock-sunpos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-sunpos.obj `if test -f 'clock-sunpos.c'; then $(CYGPATH_W) 'clock-sunpos.c'; else $(CYGPATH_W) '$(srcdir)/clock-sunpos.c'; fi` + +clock_applet-clock-utils.o: clock-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-utils.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-utils.Tpo -c -o clock_applet-clock-utils.o `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-utils.Tpo $(DEPDIR)/clock_applet-clock-utils.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='clock_applet-clock-utils.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-utils.o `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c + +clock_applet-clock-utils.obj: clock-utils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-utils.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-utils.Tpo -c -o clock_applet-clock-utils.obj `if test -f 'clock-utils.c'; then $(CYGPATH_W) 'clock-utils.c'; else $(CYGPATH_W) '$(srcdir)/clock-utils.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-utils.Tpo $(DEPDIR)/clock_applet-clock-utils.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='clock_applet-clock-utils.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-utils.obj `if test -f 'clock-utils.c'; then $(CYGPATH_W) 'clock-utils.c'; else $(CYGPATH_W) '$(srcdir)/clock-utils.c'; fi` + +clock_applet-set-timezone.o: set-timezone.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-set-timezone.o -MD -MP -MF $(DEPDIR)/clock_applet-set-timezone.Tpo -c -o clock_applet-set-timezone.o `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-set-timezone.Tpo $(DEPDIR)/clock_applet-set-timezone.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='clock_applet-set-timezone.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-set-timezone.o `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c + +clock_applet-set-timezone.obj: set-timezone.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-set-timezone.obj -MD -MP -MF $(DEPDIR)/clock_applet-set-timezone.Tpo -c -o clock_applet-set-timezone.obj `if test -f 'set-timezone.c'; then $(CYGPATH_W) 'set-timezone.c'; else $(CYGPATH_W) '$(srcdir)/set-timezone.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-set-timezone.Tpo $(DEPDIR)/clock_applet-set-timezone.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='clock_applet-set-timezone.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-set-timezone.obj `if test -f 'set-timezone.c'; then $(CYGPATH_W) 'set-timezone.c'; else $(CYGPATH_W) '$(srcdir)/set-timezone.c'; fi` + +clock_applet-clock-marshallers.o: clock-marshallers.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-marshallers.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-marshallers.Tpo -c -o clock_applet-clock-marshallers.o `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-marshallers.Tpo $(DEPDIR)/clock_applet-clock-marshallers.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='clock_applet-clock-marshallers.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-marshallers.o `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c + +clock_applet-clock-marshallers.obj: clock-marshallers.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-marshallers.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-marshallers.Tpo -c -o clock_applet-clock-marshallers.obj `if test -f 'clock-marshallers.c'; then $(CYGPATH_W) 'clock-marshallers.c'; else $(CYGPATH_W) '$(srcdir)/clock-marshallers.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-marshallers.Tpo $(DEPDIR)/clock_applet-clock-marshallers.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='clock_applet-clock-marshallers.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-marshallers.obj `if test -f 'clock-marshallers.c'; then $(CYGPATH_W) 'clock-marshallers.c'; else $(CYGPATH_W) '$(srcdir)/clock-marshallers.c'; fi` + +clock_applet-clock-typebuiltins.o: clock-typebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-typebuiltins.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo -c -o clock_applet-clock-typebuiltins.o `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo $(DEPDIR)/clock_applet-clock-typebuiltins.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='clock_applet-clock-typebuiltins.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-typebuiltins.o `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c + +clock_applet-clock-typebuiltins.obj: clock-typebuiltins.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-typebuiltins.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo -c -o clock_applet-clock-typebuiltins.obj `if test -f 'clock-typebuiltins.c'; then $(CYGPATH_W) 'clock-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/clock-typebuiltins.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo $(DEPDIR)/clock_applet-clock-typebuiltins.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='clock_applet-clock-typebuiltins.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-typebuiltins.obj `if test -f 'clock-typebuiltins.c'; then $(CYGPATH_W) 'clock-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/clock-typebuiltins.c'; fi` + +clock_applet-calendar-client.o: calendar-client.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-client.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-client.Tpo -c -o clock_applet-calendar-client.o `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-client.Tpo $(DEPDIR)/clock_applet-calendar-client.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='clock_applet-calendar-client.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-client.o `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c + +clock_applet-calendar-client.obj: calendar-client.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-client.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-client.Tpo -c -o clock_applet-calendar-client.obj `if test -f 'calendar-client.c'; then $(CYGPATH_W) 'calendar-client.c'; else $(CYGPATH_W) '$(srcdir)/calendar-client.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-client.Tpo $(DEPDIR)/clock_applet-calendar-client.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='clock_applet-calendar-client.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-client.obj `if test -f 'calendar-client.c'; then $(CYGPATH_W) 'calendar-client.c'; else $(CYGPATH_W) '$(srcdir)/calendar-client.c'; fi` + +clock_applet-calendar-sources.o: calendar-sources.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-sources.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-sources.Tpo -c -o clock_applet-calendar-sources.o `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-sources.Tpo $(DEPDIR)/clock_applet-calendar-sources.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='clock_applet-calendar-sources.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-sources.o `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c + +clock_applet-calendar-sources.obj: calendar-sources.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-sources.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-sources.Tpo -c -o clock_applet-calendar-sources.obj `if test -f 'calendar-sources.c'; then $(CYGPATH_W) 'calendar-sources.c'; else $(CYGPATH_W) '$(srcdir)/calendar-sources.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-sources.Tpo $(DEPDIR)/clock_applet-calendar-sources.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='clock_applet-calendar-sources.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-sources.obj `if test -f 'calendar-sources.c'; then $(CYGPATH_W) 'calendar-sources.c'; else $(CYGPATH_W) '$(srcdir)/calendar-sources.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-appletDATA: $(applet_DATA) + @$(NORMAL_INSTALL) + test -z "$(appletdir)" || $(MKDIR_P) "$(DESTDIR)$(appletdir)" + @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appletdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(appletdir)" || exit $$?; \ + done + +uninstall-appletDATA: + @$(NORMAL_UNINSTALL) + @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(appletdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(appletdir)" && rm -f $$files +install-schemasDATA: $(schemas_DATA) + @$(NORMAL_INSTALL) + test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)" + @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemasdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \ + done + +uninstall-schemasDATA: + @$(NORMAL_UNINSTALL) + @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(schemasdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(schemasdir)" && rm -f $$files +install-serviceDATA: $(service_DATA) + @$(NORMAL_INSTALL) + test -z "$(servicedir)" || $(MKDIR_P) "$(DESTDIR)$(servicedir)" + @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(servicedir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \ + done + +uninstall-serviceDATA: + @$(NORMAL_UNINSTALL) + @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(servicedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(servicedir)" && rm -f $$files +install-uiDATA: $(ui_DATA) + @$(NORMAL_INSTALL) + test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)" + @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \ + done + +uninstall-uiDATA: + @$(NORMAL_UNINSTALL) + @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(uidir)" && rm -f $$files +install-xmluiDATA: $(xmlui_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmluidir)" || $(MKDIR_P) "$(DESTDIR)$(xmluidir)" + @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(xmluidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(xmluidir)" || exit $$?; \ + done + +uninstall-xmluiDATA: + @$(NORMAL_UNINSTALL) + @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(xmluidir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(xmluidir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(clock_appletlibdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +@MATECONF_SCHEMAS_INSTALL_FALSE@uninstall-local: +@MATECONF_SCHEMAS_INSTALL_FALSE@install-data-local: +clean: clean-recursive + +clean-am: clean-clock_appletlibLTLIBRARIES clean-generic \ + clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-appletDATA install-clock_appletlibLTLIBRARIES \ + install-data-local install-schemasDATA install-serviceDATA \ + install-uiDATA install-xmluiDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libexecPROGRAMS + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-appletDATA \ + uninstall-clock_appletlibLTLIBRARIES uninstall-libexecPROGRAMS \ + uninstall-local uninstall-schemasDATA uninstall-serviceDATA \ + uninstall-uiDATA uninstall-xmluiDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean \ + clean-clock_appletlibLTLIBRARIES clean-generic \ + clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \ + clean-noinstPROGRAMS ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-appletDATA \ + install-clock_appletlibLTLIBRARIES install-data \ + install-data-am install-data-local install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libexecPROGRAMS \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-schemasDATA install-serviceDATA \ + install-strip install-uiDATA install-xmluiDATA installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-appletDATA uninstall-clock_appletlibLTLIBRARIES \ + uninstall-libexecPROGRAMS uninstall-local \ + uninstall-schemasDATA uninstall-serviceDATA uninstall-uiDATA \ + uninstall-xmluiDATA + +@CLOCK_INPROCESS_TRUE@$(libclock_applet_la_OBJECTS): $(BUILT_SOURCES) +@CLOCK_INPROCESS_FALSE@$(clock_applet_OBJECTS): $(BUILT_SOURCES) + +clock-marshallers.c: clock-marshallers.list + $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --body --internal $< > $@ + +clock-marshallers.h: clock-marshallers.list + $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@ + +clock-typebuiltins.c: @REBUILD@ $(clock_enum_headers) + $(AM_V_GEN)glib-mkenums \ + --fhead "#include <glib-object.h>\n" \ + --fhead "#include \"clock-typebuiltins.h\"\n\n" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --fprod "\n#include \"@filename@\"\n" \ + --vhead "static const GEnumValue _@enum_name@_values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n};\n\n" \ + --vtail "GType\n@enum_name@_get_type (void)\n{\n" \ + --vtail " static GType type = 0;\n\n" \ + --vtail " if (!type)\n" \ + --vtail " type = g_enum_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \ + --vtail " return type;\n}\n\n" \ + $(clock_enum_headers) > $@ + +clock-typebuiltins.h: @REBUILD@ $(clock_enum_headers) + $(AM_V_GEN)glib-mkenums \ + --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \ + --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \ + --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \ + --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \ + --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \ + --fprod "\n/* --- @filename@ --- */" \ + --eprod "#define CLOCK_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \ + --eprod "GType @enum_name@_get_type (void);\n" \ + $(clock_enum_headers) > $@ + +$(applet_in_files): $(applet_in_files).in Makefile + $(AM_V_GEN)sed \ + -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \ + -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \ + -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \ + $< > $@ + +@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@ + +@CLOCK_INPROCESS_FALSE@org.mate.panel.applet.ClockAppletFactory.service: $(service_in_files) +@CLOCK_INPROCESS_FALSE@ $(AM_V_GEN)sed \ +@CLOCK_INPROCESS_FALSE@ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \ +@CLOCK_INPROCESS_FALSE@ $< > $@ + +@INTLTOOL_SCHEMAS_RULE@ + +@MATECONF_SCHEMAS_INSTALL_TRUE@install-data-local: +@MATECONF_SCHEMAS_INSTALL_TRUE@ if test -z "$(DESTDIR)" ; then \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schemas_DATA) ; do \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/clock/$$p ; \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ done \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ fi +@MATECONF_SCHEMAS_INSTALL_TRUE@uninstall-local: +@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schema_DATA) ; do \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/clock/$$p ; \ +@MATECONF_SCHEMAS_INSTALL_TRUE@ done + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/applets/clock/calendar-client.c b/applets/clock/calendar-client.c new file mode 100644 index 00000000..77efa137 --- /dev/null +++ b/applets/clock/calendar-client.c @@ -0,0 +1,2169 @@ +/* + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Mark McLoughlin <[email protected]> + * William Jon McCann <[email protected]> + * Martin Grimme <[email protected]> + * Christian Kellner <[email protected]> + */ + +#include <config.h> + +#include "calendar-client.h" + +#include <libintl.h> +#include <string.h> +#define HANDLE_LIBICAL_MEMORY +#include <libecal/e-cal.h> +#include <libecal/e-cal-time-util.h> +#include <libecal/e-cal-recur.h> + +#include "calendar-sources.h" + +#undef CALENDAR_ENABLE_DEBUG +#include "calendar-debug.h" + +#define CALENDAR_CONFIG_PREFIX "/apps/evolution/calendar" +#define CALENDAR_CONFIG_TIMEZONE CALENDAR_CONFIG_PREFIX "/display/timezone" + +#ifndef _ +#define _(x) gettext(x) +#endif + +#ifndef N_ +#define N_(x) x +#endif + +#define CALENDAR_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_CLIENT, CalendarClientPrivate)) + +typedef struct _CalendarClientQuery CalendarClientQuery; +typedef struct _CalendarClientSource CalendarClientSource; + +struct _CalendarClientQuery +{ + ECalView *view; + GHashTable *events; +}; + +struct _CalendarClientSource +{ + CalendarClient *client; + ECal *source; + + CalendarClientQuery completed_query; + CalendarClientQuery in_progress_query; + + guint changed_signal_id; + + guint query_completed : 1; + guint query_in_progress : 1; +}; + +struct _CalendarClientPrivate +{ + CalendarSources *calendar_sources; + + GSList *appointment_sources; + GSList *task_sources; + + icaltimezone *zone; + + guint zone_listener; + MateConfClient *mateconf_client; + + guint day; + guint month; + guint year; +}; + +static void calendar_client_class_init (CalendarClientClass *klass); +static void calendar_client_init (CalendarClient *client); +static void calendar_client_finalize (GObject *object); +static void calendar_client_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void calendar_client_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +static GSList *calendar_client_update_sources_list (CalendarClient *client, + GSList *sources, + GSList *esources, + guint changed_signal_id); +static void calendar_client_appointment_sources_changed (CalendarClient *client); +static void calendar_client_task_sources_changed (CalendarClient *client); + +static void calendar_client_stop_query (CalendarClient *client, + CalendarClientSource *source, + CalendarClientQuery *query); +static void calendar_client_start_query (CalendarClient *client, + CalendarClientSource *source, + const char *query); + +static void calendar_client_source_finalize (CalendarClientSource *source); +static void calendar_client_query_finalize (CalendarClientQuery *query); + +static void +calendar_client_update_appointments (CalendarClient *client); +static void +calendar_client_update_tasks (CalendarClient *client); + +enum +{ + PROP_O, + PROP_DAY, + PROP_MONTH, + PROP_YEAR +}; + +enum +{ + APPOINTMENTS_CHANGED, + TASKS_CHANGED, + LAST_SIGNAL +}; + +static GObjectClass *parent_class = NULL; +static guint signals [LAST_SIGNAL] = { 0, }; + +GType +calendar_client_get_type (void) +{ + static GType client_type = 0; + + if (!client_type) + { + static const GTypeInfo client_info = + { + sizeof (CalendarClientClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) calendar_client_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (CalendarClient), + 0, /* n_preallocs */ + (GInstanceInitFunc) calendar_client_init, + }; + + client_type = g_type_register_static (G_TYPE_OBJECT, + "CalendarClient", + &client_info, 0); + } + + return client_type; +} + +static void +calendar_client_class_init (CalendarClientClass *klass) +{ + GObjectClass *gobject_class = (GObjectClass *) klass; + + parent_class = g_type_class_peek_parent (klass); + + gobject_class->finalize = calendar_client_finalize; + gobject_class->set_property = calendar_client_set_property; + gobject_class->get_property = calendar_client_get_property; + + g_type_class_add_private (klass, sizeof (CalendarClientPrivate)); + + g_object_class_install_property (gobject_class, + PROP_DAY, + g_param_spec_uint ("day", + "Day", + "The currently monitored day between 1 and 31 (0 denotes unset)", + 0, G_MAXUINT, 0, + G_PARAM_READWRITE)); + + g_object_class_install_property (gobject_class, + PROP_MONTH, + g_param_spec_uint ("month", + "Month", + "The currently monitored month between 0 and 11", + 0, G_MAXUINT, 0, + G_PARAM_READWRITE)); + + g_object_class_install_property (gobject_class, + PROP_YEAR, + g_param_spec_uint ("year", + "Year", + "The currently monitored year", + 0, G_MAXUINT, 0, + G_PARAM_READWRITE)); + + signals [APPOINTMENTS_CHANGED] = + g_signal_new ("appointments-changed", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CalendarClientClass, tasks_changed), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + signals [TASKS_CHANGED] = + g_signal_new ("tasks-changed", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CalendarClientClass, tasks_changed), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); +} + +/* Timezone code adapted from evolution/calendar/gui/calendar-config.c */ +/* The current timezone, e.g. "Europe/London". It may be NULL, in which case + you should assume UTC. */ +static gchar * +calendar_client_config_get_timezone (MateConfClient *mateconf_client) +{ + char *location; + + location = mateconf_client_get_string (mateconf_client, + CALENDAR_CONFIG_TIMEZONE, + NULL); + + return location; +} + +static icaltimezone * +calendar_client_config_get_icaltimezone (MateConfClient *mateconf_client) +{ + char *location; + icaltimezone *zone = NULL; + + location = calendar_client_config_get_timezone (mateconf_client); + if (!location) + return icaltimezone_get_utc_timezone (); + + zone = icaltimezone_get_builtin_timezone (location); + g_free (location); + + return zone; +} + +static void +calendar_client_set_timezone (CalendarClient *client) +{ + GSList *l; + GSList *esources; + + client->priv->zone = calendar_client_config_get_icaltimezone (client->priv->mateconf_client); + + esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources); + for (l = esources; l; l = l->next) { + ECal *source = l->data; + + e_cal_set_default_timezone (source, client->priv->zone, NULL); + } +} + +static void +calendar_client_timezone_changed_cb (MateConfClient *mateconf_client, + guint id, + MateConfEntry *entry, + CalendarClient *client) +{ + calendar_client_set_timezone (client); +} + +static void +cal_opened_cb (ECal *ecal, + ECalendarStatus status, + CalendarClientSource *cl_source) +{ + ECalSourceType s_type; + CalendarClient *client = cl_source->client; + + s_type = e_cal_get_source_type (ecal); + + if (status == E_CALENDAR_STATUS_BUSY && + e_cal_get_load_state (ecal) == E_CAL_LOAD_NOT_LOADED) + { + e_cal_open_async (ecal, FALSE); + return; + } + + g_signal_handlers_disconnect_by_func (ecal, cal_opened_cb, cl_source); + + if (status != E_CALENDAR_STATUS_OK) + { + if (s_type == E_CAL_SOURCE_TYPE_EVENT) + client->priv->appointment_sources = g_slist_remove (client->priv->appointment_sources, + cl_source); + else + client->priv->task_sources = g_slist_remove (client->priv->task_sources, + cl_source); + + calendar_client_source_finalize (cl_source); + g_free (cl_source); + + return; + } + + if (s_type == E_CAL_SOURCE_TYPE_EVENT) + calendar_client_update_appointments (client); + else + calendar_client_update_tasks (client); +} + +static void +load_calendars (CalendarClient *client, + CalendarEventType type) +{ + GSList *l, *clients; + + switch (type) + { + case CALENDAR_EVENT_APPOINTMENT: + clients = client->priv->appointment_sources; + break; + case CALENDAR_EVENT_TASK: + clients = client->priv->task_sources; + break; + default: + g_assert_not_reached (); + } + + for (l = clients; l != NULL; l = l->next) + { + ECal *ecal; + CalendarClientSource *cl_source = l->data; + + ecal = cl_source->source; + + if (e_cal_get_load_state (ecal) == E_CAL_LOAD_LOADED) + continue; + + g_signal_connect (G_OBJECT (ecal), "cal_opened", + G_CALLBACK (cal_opened_cb), cl_source); + e_cal_open_async (ecal, TRUE); + } +} + +static void +calendar_client_init (CalendarClient *client) +{ + GSList *esources; + + client->priv = CALENDAR_CLIENT_GET_PRIVATE (client); + + client->priv->calendar_sources = calendar_sources_get (); + client->priv->mateconf_client = mateconf_client_get_default (); + + esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources); + client->priv->appointment_sources = + calendar_client_update_sources_list (client, NULL, esources, signals [APPOINTMENTS_CHANGED]); + + esources = calendar_sources_get_task_sources (client->priv->calendar_sources); + client->priv->task_sources = + calendar_client_update_sources_list (client, NULL, esources, signals [TASKS_CHANGED]); + + /* set the timezone before loading the clients */ + calendar_client_set_timezone (client); + load_calendars (client, CALENDAR_EVENT_APPOINTMENT); + load_calendars (client, CALENDAR_EVENT_TASK); + + g_signal_connect_swapped (client->priv->calendar_sources, + "appointment-sources-changed", + G_CALLBACK (calendar_client_appointment_sources_changed), + client); + g_signal_connect_swapped (client->priv->calendar_sources, + "task-sources-changed", + G_CALLBACK (calendar_client_task_sources_changed), + client); + + mateconf_client_add_dir (client->priv->mateconf_client, + CALENDAR_CONFIG_PREFIX, + MATECONF_CLIENT_PRELOAD_NONE, + NULL); + + client->priv->zone_listener = mateconf_client_notify_add (client->priv->mateconf_client, + CALENDAR_CONFIG_TIMEZONE, + (MateConfClientNotifyFunc) calendar_client_timezone_changed_cb, + client, NULL, NULL); + + client->priv->day = -1; + client->priv->month = -1; + client->priv->year = -1; +} + +static void +calendar_client_finalize (GObject *object) +{ + CalendarClient *client = CALENDAR_CLIENT (object); + GSList *l; + + if (client->priv->zone_listener) + { + mateconf_client_notify_remove (client->priv->mateconf_client, + client->priv->zone_listener); + client->priv->zone_listener = 0; + } + + mateconf_client_remove_dir (client->priv->mateconf_client, + CALENDAR_CONFIG_PREFIX, + NULL); + + if (client->priv->mateconf_client) + g_object_unref (client->priv->mateconf_client); + client->priv->mateconf_client = NULL; + + for (l = client->priv->appointment_sources; l; l = l->next) + { + calendar_client_source_finalize (l->data); + g_free (l->data); + } + g_slist_free (client->priv->appointment_sources); + client->priv->appointment_sources = NULL; + + for (l = client->priv->task_sources; l; l = l->next) + { + calendar_client_source_finalize (l->data); + g_free (l->data); + } + g_slist_free (client->priv->task_sources); + client->priv->task_sources = NULL; + + if (client->priv->calendar_sources) + g_object_unref (client->priv->calendar_sources); + client->priv->calendar_sources = NULL; + + if (G_OBJECT_CLASS (parent_class)->finalize) + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +calendar_client_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + CalendarClient *client = CALENDAR_CLIENT (object); + + switch (prop_id) + { + case PROP_DAY: + calendar_client_select_day (client, g_value_get_uint (value)); + break; + case PROP_MONTH: + calendar_client_select_month (client, + g_value_get_uint (value), + client->priv->year); + break; + case PROP_YEAR: + calendar_client_select_month (client, + client->priv->month, + g_value_get_uint (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +calendar_client_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + CalendarClient *client = CALENDAR_CLIENT (object); + + switch (prop_id) + { + case PROP_DAY: + g_value_set_uint (value, client->priv->day); + break; + case PROP_MONTH: + g_value_set_uint (value, client->priv->month); + break; + case PROP_YEAR: + g_value_set_uint (value, client->priv->year); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +CalendarClient * +calendar_client_new (void) +{ + return g_object_new (CALENDAR_TYPE_CLIENT, NULL); +} + +/* @day and @month can happily be out of range as + * mktime() will normalize them correctly. From mktime(3): + * + * "If structure members are outside their legal interval, + * they will be normalized (so that, e.g., 40 October is + * changed into 9 November)." + * + * "What?", you say, "Something useful in libc?" + */ +static inline time_t +make_time_for_day_begin (int day, + int month, + int year) +{ + struct tm localtime_tm = { 0, }; + + localtime_tm.tm_mday = day; + localtime_tm.tm_mon = month; + localtime_tm.tm_year = year - 1900; + localtime_tm.tm_isdst = -1; + + return mktime (&localtime_tm); +} + +static inline char * +make_isodate_for_day_begin (int day, + int month, + int year) +{ + time_t utctime; + + utctime = make_time_for_day_begin (day, month, year); + + return utctime != -1 ? isodate_from_time_t (utctime) : NULL; +} + +static time_t +get_time_from_property (icalcomponent *ical, + icalproperty_kind prop_kind, + struct icaltimetype (* get_prop_func) (const icalproperty *prop), + icaltimezone *default_zone) +{ + icalproperty *prop; + struct icaltimetype ical_time; + icalparameter *param; + icaltimezone *timezone = NULL; + + prop = icalcomponent_get_first_property (ical, prop_kind); + if (!prop) + return 0; + + ical_time = get_prop_func (prop); + + param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER); + if (param) + timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param)); + else if (icaltime_is_utc (ical_time)) + timezone = icaltimezone_get_utc_timezone (); + else + timezone = default_zone; + + return icaltime_as_timet_with_zone (ical_time, timezone); +} + +static char * +get_ical_uid (icalcomponent *ical) +{ + return g_strdup (icalcomponent_get_uid (ical)); +} + +static char * +get_ical_rid (icalcomponent *ical) +{ + icalproperty *prop; + struct icaltimetype ical_time; + + prop = icalcomponent_get_first_property (ical, ICAL_RECURRENCEID_PROPERTY); + if (!prop) + return NULL; + + ical_time = icalproperty_get_recurrenceid (prop); + + return icaltime_is_valid_time (ical_time) && !icaltime_is_null_time (ical_time) ? + g_strdup (icaltime_as_ical_string (ical_time)) : NULL; +} + +static char * +get_ical_summary (icalcomponent *ical) +{ + icalproperty *prop; + + prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY); + if (!prop) + return NULL; + + return g_strdup (icalproperty_get_summary (prop)); +} + +static char * +get_ical_description (icalcomponent *ical) +{ + icalproperty *prop; + + prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY); + if (!prop) + return NULL; + + return g_strdup (icalproperty_get_description (prop)); +} + +static inline time_t +get_ical_start_time (icalcomponent *ical, + icaltimezone *default_zone) +{ + return get_time_from_property (ical, + ICAL_DTSTART_PROPERTY, + icalproperty_get_dtstart, + default_zone); +} + +static inline time_t +get_ical_end_time (icalcomponent *ical, + icaltimezone *default_zone) +{ + return get_time_from_property (ical, + ICAL_DTEND_PROPERTY, + icalproperty_get_dtend, + default_zone); +} + +static gboolean +get_ical_is_all_day (icalcomponent *ical, + time_t start_time, + icaltimezone *default_zone) +{ + icalproperty *prop; + struct tm *start_tm; + time_t end_time; + struct icaldurationtype duration; + struct icaltimetype start_icaltime; + + start_icaltime = icalcomponent_get_dtstart (ical); + if (start_icaltime.is_date) + return TRUE; + + start_tm = gmtime (&start_time); + if (start_tm->tm_sec != 0 || + start_tm->tm_min != 0 || + start_tm->tm_hour != 0) + return FALSE; + + if ((end_time = get_ical_end_time (ical, default_zone))) + return (end_time - start_time) % 86400 == 0; + + prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY); + if (!prop) + return FALSE; + + duration = icalproperty_get_duration (prop); + + return icaldurationtype_as_int (duration) % 86400 == 0; +} + +static inline time_t +get_ical_due_time (icalcomponent *ical, + icaltimezone *default_zone) +{ + return get_time_from_property (ical, + ICAL_DUE_PROPERTY, + icalproperty_get_due, + default_zone); +} + +static guint +get_ical_percent_complete (icalcomponent *ical) +{ + icalproperty *prop; + icalproperty_status status; + int percent_complete; + + status = icalcomponent_get_status (ical); + if (status == ICAL_STATUS_COMPLETED) + return 100; + + prop = icalcomponent_get_first_property (ical, ICAL_COMPLETED_PROPERTY); + if (prop) + return 100; + + prop = icalcomponent_get_first_property (ical, ICAL_PERCENTCOMPLETE_PROPERTY); + if (!prop) + return 0; + + percent_complete = icalproperty_get_percentcomplete (prop); + + return CLAMP (percent_complete, 0, 100); +} + +static inline time_t +get_ical_completed_time (icalcomponent *ical, + icaltimezone *default_zone) +{ + return get_time_from_property (ical, + ICAL_COMPLETED_PROPERTY, + icalproperty_get_completed, + default_zone); +} + +static int +get_ical_priority (icalcomponent *ical) +{ + icalproperty *prop; + + prop = icalcomponent_get_first_property (ical, ICAL_PRIORITY_PROPERTY); + if (!prop) + return -1; + + return icalproperty_get_priority (prop); +} + +static char * +get_source_color (ECal *esource) +{ + ESource *source; + + g_return_val_if_fail (E_IS_CAL (esource), NULL); + + source = e_cal_get_source (esource); + + return g_strdup (e_source_peek_color_spec (source)); +} + +static gchar * +get_source_uri (ECal *esource) +{ + ESource *source; + gchar *string; + gchar **list; + + g_return_val_if_fail (E_IS_CAL (esource), NULL); + + source = e_cal_get_source (esource); + string = g_strdup (e_source_get_uri (source)); + if (string) { + list = g_strsplit (string, ":", 2); + g_free (string); + + if (list[0]) { + string = g_strdup (list[0]); + g_strfreev (list); + return string; + } + g_strfreev (list); + } + return NULL; +} + +static inline int +null_safe_strcmp (const char *a, + const char *b) +{ + return (!a && !b) ? 0 : (a && !b) || (!a && b) ? 1 : strcmp (a, b); +} + +static inline gboolean +calendar_appointment_equal (CalendarAppointment *a, + CalendarAppointment *b) +{ + GSList *la, *lb; + + if (g_slist_length (a->occurrences) != g_slist_length (b->occurrences)) + return FALSE; + + for (la = a->occurrences, lb = b->occurrences; la && lb; la = la->next, lb = lb->next) + { + CalendarOccurrence *oa = la->data; + CalendarOccurrence *ob = lb->data; + + if (oa->start_time != ob->start_time || + oa->end_time != ob->end_time) + return FALSE; + } + + return + null_safe_strcmp (a->uid, b->uid) == 0 && + null_safe_strcmp (a->uri, b->uri) == 0 && + null_safe_strcmp (a->summary, b->summary) == 0 && + null_safe_strcmp (a->description, b->description) == 0 && + null_safe_strcmp (a->color_string, b->color_string) == 0 && + a->start_time == b->start_time && + a->end_time == b->end_time && + a->is_all_day == b->is_all_day; +} + +static void +calendar_appointment_copy (CalendarAppointment *appointment, + CalendarAppointment *appointment_copy) +{ + GSList *l; + + g_assert (appointment != NULL); + g_assert (appointment_copy != NULL); + + appointment_copy->occurrences = g_slist_copy (appointment->occurrences); + for (l = appointment_copy->occurrences; l; l = l->next) + { + CalendarOccurrence *occurrence = l->data; + CalendarOccurrence *occurrence_copy; + + occurrence_copy = g_new0 (CalendarOccurrence, 1); + occurrence_copy->start_time = occurrence->start_time; + occurrence_copy->end_time = occurrence->end_time; + + l->data = occurrence_copy; + } + + appointment_copy->uid = g_strdup (appointment->uid); + appointment_copy->uri = g_strdup (appointment->uri); + appointment_copy->summary = g_strdup (appointment->summary); + appointment_copy->description = g_strdup (appointment->description); + appointment_copy->color_string = g_strdup (appointment->color_string); + appointment_copy->start_time = appointment->start_time; + appointment_copy->end_time = appointment->end_time; + appointment_copy->is_all_day = appointment->is_all_day; +} + +static void +calendar_appointment_finalize (CalendarAppointment *appointment) +{ + GSList *l; + + for (l = appointment->occurrences; l; l = l->next) + g_free (l->data); + g_slist_free (appointment->occurrences); + appointment->occurrences = NULL; + + g_free (appointment->uid); + appointment->uid = NULL; + + g_free (appointment->rid); + appointment->rid = NULL; + + g_free (appointment->uri); + appointment->uri = NULL; + + g_free (appointment->summary); + appointment->summary = NULL; + + g_free (appointment->description); + appointment->description = NULL; + + g_free (appointment->color_string); + appointment->color_string = NULL; + + appointment->start_time = 0; + appointment->is_all_day = FALSE; +} + +static void +calendar_appointment_init (CalendarAppointment *appointment, + icalcomponent *ical, + CalendarClientSource *source, + icaltimezone *default_zone) +{ + appointment->uid = get_ical_uid (ical); + appointment->rid = get_ical_rid (ical); + appointment->uri = get_source_uri (source->source); + appointment->summary = get_ical_summary (ical); + appointment->description = get_ical_description (ical); + appointment->color_string = get_source_color (source->source); + appointment->start_time = get_ical_start_time (ical, default_zone); + appointment->end_time = get_ical_end_time (ical, default_zone); + appointment->is_all_day = get_ical_is_all_day (ical, + appointment->start_time, + default_zone); +} + +static icaltimezone * +resolve_timezone_id (const char *tzid, + ECal *source) +{ + icaltimezone *retval; + + retval = icaltimezone_get_builtin_timezone_from_tzid (tzid); + if (!retval) + { + e_cal_get_timezone (source, tzid, &retval, NULL); + } + + return retval; +} + +static gboolean +calendar_appointment_collect_occurrence (ECalComponent *component, + time_t occurrence_start, + time_t occurrence_end, + gpointer data) +{ + CalendarOccurrence *occurrence; + GSList **collect_loc = data; + + occurrence = g_new0 (CalendarOccurrence, 1); + occurrence->start_time = occurrence_start; + occurrence->end_time = occurrence_end; + + *collect_loc = g_slist_prepend (*collect_loc, occurrence); + + return TRUE; +} + +static void +calendar_appointment_generate_ocurrences (CalendarAppointment *appointment, + icalcomponent *ical, + ECal *source, + time_t start, + time_t end, + icaltimezone *default_zone) +{ + ECalComponent *ecal; + + g_assert (appointment->occurrences == NULL); + + ecal = e_cal_component_new (); + e_cal_component_set_icalcomponent (ecal, + icalcomponent_new_clone (ical)); + + e_cal_recur_generate_instances (ecal, + start, + end, + calendar_appointment_collect_occurrence, + &appointment->occurrences, + (ECalRecurResolveTimezoneFn) resolve_timezone_id, + source, + default_zone); + + g_object_unref (ecal); + + appointment->occurrences = g_slist_reverse (appointment->occurrences); +} + +static inline gboolean +calendar_task_equal (CalendarTask *a, + CalendarTask *b) +{ + return + null_safe_strcmp (a->uid, b->uid) == 0 && + null_safe_strcmp (a->summary, b->summary) == 0 && + null_safe_strcmp (a->description, b->description) == 0 && + null_safe_strcmp (a->color_string, b->color_string) == 0 && + a->start_time == b->start_time && + a->due_time == b->due_time && + a->percent_complete == b->percent_complete && + a->completed_time == b->completed_time && + a->priority == b->priority; +} + +static void +calendar_task_copy (CalendarTask *task, + CalendarTask *task_copy) +{ + g_assert (task != NULL); + g_assert (task_copy != NULL); + + task_copy->uid = g_strdup (task->uid); + task_copy->summary = g_strdup (task->summary); + task_copy->description = g_strdup (task->description); + task_copy->color_string = g_strdup (task->color_string); + task_copy->start_time = task->start_time; + task_copy->due_time = task->due_time; + task_copy->percent_complete = task->percent_complete; + task_copy->completed_time = task->completed_time; + task_copy->priority = task->priority; +} + +static void +calendar_task_finalize (CalendarTask *task) +{ + g_free (task->uid); + task->uid = NULL; + + g_free (task->summary); + task->summary = NULL; + + g_free (task->description); + task->description = NULL; + + g_free (task->color_string); + task->color_string = NULL; + + task->percent_complete = 0; +} + +static void +calendar_task_init (CalendarTask *task, + icalcomponent *ical, + CalendarClientSource *source, + icaltimezone *default_zone) +{ + task->uid = get_ical_uid (ical); + task->summary = get_ical_summary (ical); + task->description = get_ical_description (ical); + task->color_string = get_source_color (source->source); + task->start_time = get_ical_start_time (ical, default_zone); + task->due_time = get_ical_due_time (ical, default_zone); + task->percent_complete = get_ical_percent_complete (ical); + task->completed_time = get_ical_completed_time (ical, default_zone); + task->priority = get_ical_priority (ical); +} + +void +calendar_event_free (CalendarEvent *event) +{ + switch (event->type) + { + case CALENDAR_EVENT_APPOINTMENT: + calendar_appointment_finalize (CALENDAR_APPOINTMENT (event)); + break; + case CALENDAR_EVENT_TASK: + calendar_task_finalize (CALENDAR_TASK (event)); + break; + default: + g_assert_not_reached (); + break; + } + + g_free (event); +} + +static CalendarEvent * +calendar_event_new (icalcomponent *ical, + CalendarClientSource *source, + icaltimezone *default_zone) +{ + CalendarEvent *event; + + event = g_new0 (CalendarEvent, 1); + + switch (icalcomponent_isa (ical)) + { + case ICAL_VEVENT_COMPONENT: + event->type = CALENDAR_EVENT_APPOINTMENT; + calendar_appointment_init (CALENDAR_APPOINTMENT (event), + ical, + source, + default_zone); + break; + case ICAL_VTODO_COMPONENT: + event->type = CALENDAR_EVENT_TASK; + calendar_task_init (CALENDAR_TASK (event), + ical, + source, + default_zone); + break; + default: + g_warning ("Unknown calendar component type: %d\n", + icalcomponent_isa (ical)); + g_free (event); + return NULL; + } + + return event; +} + +static CalendarEvent * +calendar_event_copy (CalendarEvent *event) +{ + CalendarEvent *retval; + + if (!event) + return NULL; + + retval = g_new0 (CalendarEvent, 1); + + retval->type = event->type; + + switch (event->type) + { + case CALENDAR_EVENT_APPOINTMENT: + calendar_appointment_copy (CALENDAR_APPOINTMENT (event), + CALENDAR_APPOINTMENT (retval)); + break; + case CALENDAR_EVENT_TASK: + calendar_task_copy (CALENDAR_TASK (event), + CALENDAR_TASK (retval)); + break; + default: + g_assert_not_reached (); + break; + } + + return retval; +} + +static char * +calendar_event_get_uid (CalendarEvent *event) +{ + switch (event->type) + { + case CALENDAR_EVENT_APPOINTMENT: + return g_strdup_printf ("%s%s", CALENDAR_APPOINTMENT (event)->uid, CALENDAR_APPOINTMENT (event)->rid ? CALENDAR_APPOINTMENT (event)->rid : ""); + break; + case CALENDAR_EVENT_TASK: + return g_strdup (CALENDAR_TASK (event)->uid); + break; + default: + g_assert_not_reached (); + break; + } + + return NULL; +} + +static gboolean +calendar_event_equal (CalendarEvent *a, + CalendarEvent *b) +{ + if (!a && !b) + return TRUE; + + if ((a && !b) || (!a && b)) + return FALSE; + + if (a->type != b->type) + return FALSE; + + switch (a->type) + { + case CALENDAR_EVENT_APPOINTMENT: + return calendar_appointment_equal (CALENDAR_APPOINTMENT (a), + CALENDAR_APPOINTMENT (b)); + case CALENDAR_EVENT_TASK: + return calendar_task_equal (CALENDAR_TASK (a), + CALENDAR_TASK (b)); + default: + break; + } + + g_assert_not_reached (); + + return FALSE; +} + +static void +calendar_event_generate_ocurrences (CalendarEvent *event, + icalcomponent *ical, + ECal *source, + time_t start, + time_t end, + icaltimezone *default_zone) +{ + if (event->type != CALENDAR_EVENT_APPOINTMENT) + return; + + calendar_appointment_generate_ocurrences (CALENDAR_APPOINTMENT (event), + ical, + source, + start, + end, + default_zone); +} + +static inline void +calendar_event_debug_dump (CalendarEvent *event) +{ +#ifdef CALENDAR_ENABLE_DEBUG + switch (event->type) + { + case CALENDAR_EVENT_APPOINTMENT: + { + char *start_str; + char *end_str; + GSList *l; + + start_str = CALENDAR_APPOINTMENT (event)->start_time ? + isodate_from_time_t (CALENDAR_APPOINTMENT (event)->start_time) : + g_strdup ("(undefined)"); + end_str = CALENDAR_APPOINTMENT (event)->end_time ? + isodate_from_time_t (CALENDAR_APPOINTMENT (event)->end_time) : + g_strdup ("(undefined)"); + + dprintf ("Appointment: uid '%s', summary '%s', description '%s', " + "start_time '%s', end_time '%s', is_all_day %s\n", + CALENDAR_APPOINTMENT (event)->uid, + CALENDAR_APPOINTMENT (event)->summary, + CALENDAR_APPOINTMENT (event)->description, + start_str, + end_str, + CALENDAR_APPOINTMENT (event)->is_all_day ? "(true)" : "(false)"); + + g_free (start_str); + g_free (end_str); + + dprintf (" Occurrences:\n"); + for (l = CALENDAR_APPOINTMENT (event)->occurrences; l; l = l->next) + { + CalendarOccurrence *occurrence = l->data; + + start_str = occurrence->start_time ? + isodate_from_time_t (occurrence->start_time) : + g_strdup ("(undefined)"); + + end_str = occurrence->end_time ? + isodate_from_time_t (occurrence->end_time) : + g_strdup ("(undefined)"); + + dprintf (" start_time '%s', end_time '%s'\n", + start_str, end_str); + + g_free (start_str); + g_free (end_str); + } + } + break; + case CALENDAR_EVENT_TASK: + { + char *start_str; + char *due_str; + char *completed_str; + + start_str = CALENDAR_TASK (event)->start_time ? + isodate_from_time_t (CALENDAR_TASK (event)->start_time) : + g_strdup ("(undefined)"); + due_str = CALENDAR_TASK (event)->due_time ? + isodate_from_time_t (CALENDAR_TASK (event)->due_time) : + g_strdup ("(undefined)"); + completed_str = CALENDAR_TASK (event)->completed_time ? + isodate_from_time_t (CALENDAR_TASK (event)->completed_time) : + g_strdup ("(undefined)"); + + dprintf ("Task: uid '%s', summary '%s', description '%s', " + "start_time '%s', due_time '%s', percent_complete %d, completed_time '%s'\n", + CALENDAR_TASK (event)->uid, + CALENDAR_TASK (event)->summary, + CALENDAR_TASK (event)->description, + start_str, + due_str, + CALENDAR_TASK (event)->percent_complete, + completed_str); + + g_free (completed_str); + } + break; + default: + g_assert_not_reached (); + break; + } +#endif +} + +static inline CalendarClientQuery * +goddamn_this_is_crack (CalendarClientSource *source, + ECalView *view, + gboolean *emit_signal) +{ + g_assert (view != NULL); + + if (source->completed_query.view == view) + { + if (emit_signal) + *emit_signal = TRUE; + return &source->completed_query; + } + else if (source->in_progress_query.view == view) + { + if (emit_signal) + *emit_signal = FALSE; + return &source->in_progress_query; + } + + g_assert_not_reached (); + + return NULL; +} + +static void +calendar_client_handle_query_completed (CalendarClientSource *source, + ECalendarStatus status, + ECalView *view) +{ + CalendarClientQuery *query; + + query = goddamn_this_is_crack (source, view, NULL); + + dprintf ("Query %p completed: %s\n", query, e_cal_get_error_message (status)); + + if (status != E_CALENDAR_STATUS_OK) + { + g_warning ("Calendar query failed: %s\n", + e_cal_get_error_message (status)); + calendar_client_stop_query (source->client, source, query); + return; + } + + g_assert (source->query_in_progress != FALSE); + g_assert (query == &source->in_progress_query); + + calendar_client_query_finalize (&source->completed_query); + + source->completed_query = source->in_progress_query; + source->query_completed = TRUE; + + source->query_in_progress = FALSE; + source->in_progress_query.view = NULL; + source->in_progress_query.events = NULL; + + g_signal_emit (source->client, source->changed_signal_id, 0); +} + +static void +calendar_client_handle_query_result (CalendarClientSource *source, + GList *objects, + ECalView *view) +{ + CalendarClientQuery *query; + CalendarClient *client; + gboolean emit_signal; + gboolean events_changed; + GList *l; + time_t month_begin; + time_t month_end; + + client = source->client; + + query = goddamn_this_is_crack (source, view, &emit_signal); + + dprintf ("Query %p result: %d objects:\n", + query, g_list_length (objects)); + + month_begin = make_time_for_day_begin (1, + client->priv->month, + client->priv->year); + + month_end = make_time_for_day_begin (1, + client->priv->month + 1, + client->priv->year); + + events_changed = FALSE; + for (l = objects; l; l = l->next) + { + CalendarEvent *event; + CalendarEvent *old_event; + icalcomponent *ical = l->data; + char *uid; + + event = calendar_event_new (ical, source, client->priv->zone); + if (!event) + continue; + + calendar_event_generate_ocurrences (event, + ical, + source->source, + month_begin, + month_end, + client->priv->zone); + + uid = calendar_event_get_uid (event); + + old_event = g_hash_table_lookup (query->events, uid); + + if (!calendar_event_equal (event, old_event)) + { + dprintf ("Event %s: ", old_event ? "modified" : "added"); + + calendar_event_debug_dump (event); + + g_hash_table_replace (query->events, uid, event); + + events_changed = TRUE; + } + else + { + g_free (uid); + } + } + + if (emit_signal && events_changed) + { + g_signal_emit (source->client, source->changed_signal_id, 0); + } +} + +static gboolean +check_object_remove (gpointer key, + gpointer value, + gpointer data) +{ + char *uid = data; + ssize_t len; + + len = strlen (uid); + + if (len <= strlen (key) && strncmp (uid, key, len) == 0) + { + dprintf ("Event removed: "); + + calendar_event_debug_dump (value); + + return TRUE; + } + + return FALSE; +} + +static void +calendar_client_handle_objects_removed (CalendarClientSource *source, + GList *ids, + ECalView *view) +{ + CalendarClientQuery *query; + gboolean emit_signal; + gboolean events_changed; + GList *l; + + query = goddamn_this_is_crack (source, view, &emit_signal); + + events_changed = FALSE; + for (l = ids; l; l = l->next) + { + CalendarEvent *event; + ECalComponentId *id = l->data; + char *uid = g_strdup_printf ("%s%s", id->uid, id->rid ? id->rid : ""); + + if (!id->rid || !(*id->rid)) + { + int size = g_hash_table_size (query->events); + + g_hash_table_foreach_remove (query->events, check_object_remove, id->uid); + + if (size != g_hash_table_size (query->events)) + events_changed = TRUE; + } + else if ((event = g_hash_table_lookup (query->events, uid))) + { + dprintf ("Event removed: "); + + calendar_event_debug_dump (event); + + g_assert (g_hash_table_remove (query->events, uid)); + + events_changed = TRUE; + } + g_free (uid); + } + + if (emit_signal && events_changed) + { + g_signal_emit (source->client, source->changed_signal_id, 0); + } +} + +static void +calendar_client_query_finalize (CalendarClientQuery *query) +{ + if (query->view) + g_object_unref (query->view); + query->view = NULL; + + if (query->events) + g_hash_table_destroy (query->events); + query->events = NULL; +} + +static void +calendar_client_stop_query (CalendarClient *client, + CalendarClientSource *source, + CalendarClientQuery *query) +{ + if (query == &source->in_progress_query) + { + dprintf ("Stopping in progress query %p\n", query); + + g_assert (source->query_in_progress != FALSE); + + source->query_in_progress = FALSE; + } + else if (query == &source->completed_query) + { + dprintf ("Stopping completed query %p\n", query); + + g_assert (source->query_completed != FALSE); + + source->query_completed = FALSE; + } + else + g_assert_not_reached (); + + calendar_client_query_finalize (query); +} + +static void +calendar_client_start_query (CalendarClient *client, + CalendarClientSource *source, + const char *query) +{ + ECalView *view = NULL; + GError *error = NULL; + + if (!e_cal_get_query (source->source, query, &view, &error)) + { + g_warning ("Error preparing the query: '%s': %s\n", + query, error->message); + g_error_free (error); + return; + } + + g_assert (view != NULL); + + if (source->query_in_progress) + calendar_client_stop_query (client, source, &source->in_progress_query); + + dprintf ("Starting query %p: '%s'\n", &source->in_progress_query, query); + + source->query_in_progress = TRUE; + source->in_progress_query.view = view; + source->in_progress_query.events = + g_hash_table_new_full (g_str_hash, + g_str_equal, + g_free, + (GDestroyNotify) calendar_event_free); + + g_signal_connect_swapped (view, "objects-added", + G_CALLBACK (calendar_client_handle_query_result), + source); + g_signal_connect_swapped (view, "objects-modified", + G_CALLBACK (calendar_client_handle_query_result), + source); + g_signal_connect_swapped (view, "objects-removed", + G_CALLBACK (calendar_client_handle_objects_removed), + source); + g_signal_connect_swapped (view, "view-done", + G_CALLBACK (calendar_client_handle_query_completed), + source); + + e_cal_view_start (view); +} + +static void +calendar_client_update_appointments (CalendarClient *client) +{ + GSList *l; + char *query; + char *month_begin; + char *month_end; + + if (client->priv->month == -1 || + client->priv->year == -1) + return; + + month_begin = make_isodate_for_day_begin (1, + client->priv->month, + client->priv->year); + + month_end = make_isodate_for_day_begin (1, + client->priv->month + 1, + client->priv->year); + + query = g_strdup_printf ("occur-in-time-range? (make-time \"%s\") " + "(make-time \"%s\")", + month_begin, month_end); + + for (l = client->priv->appointment_sources; l; l = l->next) + { + CalendarClientSource *cs = l->data; + + if (e_cal_get_load_state (cs->source) != E_CAL_LOAD_LOADED) + continue; + + calendar_client_start_query (client, cs, query); + } + + g_free (month_begin); + g_free (month_end); + g_free (query); +} + +/* FIXME: + * perhaps we should use evo's "hide_completed_tasks" pref? + */ +static void +calendar_client_update_tasks (CalendarClient *client) +{ + GSList *l; + char *query; + +#ifdef FIX_BROKEN_TASKS_QUERY + /* FIXME: this doesn't work for tasks without a start or + * due date + * Look at filter_task() to see the behaviour we + * want. + */ + + char *day_begin; + char *day_end; + + if (client->priv->day == -1 || + client->priv->month == -1 || + client->priv->year == -1) + return; + + day_begin = make_isodate_for_day_begin (client->priv->day, + client->priv->month, + client->priv->year); + + day_end = make_isodate_for_day_begin (client->priv->day + 1, + client->priv->month, + client->priv->year); + if (!day_begin || !day_end) + { + g_warning ("Cannot run query with invalid date: %dd %dy %dm\n", + client->priv->day, + client->priv->month, + client->priv->year); + g_free (day_begin); + g_free (day_end); + return; + } + + query = g_strdup_printf ("(and (occur-in-time-range? (make-time \"%s\") " + "(make-time \"%s\")) " + "(or (not is-completed?) " + "(and (is-completed?) " + "(not (completed-before? (make-time \"%s\"))))))", + day_begin, day_end, day_begin); +#else + query = g_strdup ("#t"); +#endif /* FIX_BROKEN_TASKS_QUERY */ + + for (l = client->priv->task_sources; l; l = l->next) + { + CalendarClientSource *cs = l->data; + + if (e_cal_get_load_state (cs->source) != E_CAL_LOAD_LOADED) + continue; + + calendar_client_start_query (client, cs, query); + } + +#ifdef FIX_BROKEN_TASKS_QUERY + g_free (day_begin); + g_free (day_end); +#endif + g_free (query); +} + +static void +calendar_client_source_finalize (CalendarClientSource *source) +{ + source->client = NULL; + + if (source->source) { + g_signal_handlers_disconnect_by_func (source->source, + cal_opened_cb, source); + g_object_unref (source->source); + } + source->source = NULL; + + calendar_client_query_finalize (&source->completed_query); + calendar_client_query_finalize (&source->in_progress_query); + + source->query_completed = FALSE; + source->query_in_progress = FALSE; +} + +static int +compare_calendar_sources (CalendarClientSource *s1, + CalendarClientSource *s2) +{ + return (s1->source == s2->source) ? 0 : 1; +} + +static GSList * +calendar_client_update_sources_list (CalendarClient *client, + GSList *sources, + GSList *esources, + guint changed_signal_id) +{ + GSList *retval, *l; + + retval = NULL; + + for (l = esources; l; l = l->next) + { + CalendarClientSource dummy_source; + CalendarClientSource *new_source; + GSList *s; + ECal *esource = l->data; + + dummy_source.source = esource; + + dprintf ("update_sources_list: adding client %s: ", + e_source_peek_uid (e_cal_get_source (esource))); + + if ((s = g_slist_find_custom (sources, + &dummy_source, + (GCompareFunc) compare_calendar_sources))) + { + dprintf ("already on list\n"); + new_source = s->data; + sources = g_slist_delete_link (sources, s); + } + else + { + dprintf ("added\n"); + new_source = g_new0 (CalendarClientSource, 1); + new_source->client = client; + new_source->source = g_object_ref (esource); + new_source->changed_signal_id = changed_signal_id; + } + + retval = g_slist_prepend (retval, new_source); + } + + for (l = sources; l; l = l->next) + { + CalendarClientSource *source = l->data; + + dprintf ("Removing client %s from list\n", + e_source_peek_uid (e_cal_get_source (source->source))); + + calendar_client_source_finalize (source); + g_free (source); + } + g_slist_free (sources); + + return retval; +} + +static void +calendar_client_appointment_sources_changed (CalendarClient *client) +{ + GSList *esources; + + dprintf ("appointment_sources_changed: updating ...\n"); + + esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources); + + client->priv->appointment_sources = + calendar_client_update_sources_list (client, + client->priv->appointment_sources, + esources, + signals [APPOINTMENTS_CHANGED]); + + load_calendars (client, CALENDAR_EVENT_APPOINTMENT); + calendar_client_update_appointments (client); +} + +static void +calendar_client_task_sources_changed (CalendarClient *client) +{ + GSList *esources; + + dprintf ("task_sources_changed: updating ...\n"); + + esources = calendar_sources_get_task_sources (client->priv->calendar_sources); + + client->priv->task_sources = + calendar_client_update_sources_list (client, + client->priv->task_sources, + esources, + signals [TASKS_CHANGED]); + + load_calendars (client, CALENDAR_EVENT_TASK); + calendar_client_update_tasks (client); +} + +void +calendar_client_get_date (CalendarClient *client, + guint *year, + guint *month, + guint *day) +{ + g_return_if_fail (CALENDAR_IS_CLIENT (client)); + + if (year) + *year = client->priv->year; + + if (month) + *month = client->priv->month; + + if (day) + *day = client->priv->day; +} + +void +calendar_client_select_month (CalendarClient *client, + guint month, + guint year) +{ + g_return_if_fail (CALENDAR_IS_CLIENT (client)); + g_return_if_fail (month <= 11); + + if (client->priv->year != year || client->priv->month != month) + { + client->priv->month = month; + client->priv->year = year; + + calendar_client_update_appointments (client); + calendar_client_update_tasks (client); + + g_object_freeze_notify (G_OBJECT (client)); + g_object_notify (G_OBJECT (client), "month"); + g_object_notify (G_OBJECT (client), "year"); + g_object_thaw_notify (G_OBJECT (client)); + } +} + +void +calendar_client_select_day (CalendarClient *client, + guint day) +{ + g_return_if_fail (CALENDAR_IS_CLIENT (client)); + g_return_if_fail (day <= 31); + + if (client->priv->day != day) + { + client->priv->day = day; + + /* don't need to update appointments unless + * the selected month changes + */ +#ifdef FIX_BROKEN_TASKS_QUERY + calendar_client_update_tasks (client); +#endif + + g_object_notify (G_OBJECT (client), "day"); + } +} + +typedef struct +{ + CalendarClient *client; + GSList *events; + time_t start_time; + time_t end_time; +} FilterData; + +typedef void (* CalendarEventFilterFunc) (const char *uid, + CalendarEvent *event, + FilterData *filter_data); + +static void +filter_appointment (const char *uid, + CalendarEvent *event, + FilterData *filter_data) +{ + GSList *occurrences, *l; + + if (event->type != CALENDAR_EVENT_APPOINTMENT) + return; + + occurrences = CALENDAR_APPOINTMENT (event)->occurrences; + CALENDAR_APPOINTMENT (event)->occurrences = NULL; + + for (l = occurrences; l; l = l->next) + { + CalendarOccurrence *occurrence = l->data; + time_t start_time = occurrence->start_time; + time_t end_time = occurrence->end_time; + + if ((start_time >= filter_data->start_time && + start_time < filter_data->end_time) || + (start_time <= filter_data->start_time && + (end_time - 1) > filter_data->start_time)) + { + CalendarEvent *new_event; + + new_event = calendar_event_copy (event); + + CALENDAR_APPOINTMENT (new_event)->start_time = occurrence->start_time; + CALENDAR_APPOINTMENT (new_event)->end_time = occurrence->end_time; + + filter_data->events = g_slist_prepend (filter_data->events, new_event); + } + } + + CALENDAR_APPOINTMENT (event)->occurrences = occurrences; +} + +static void +filter_task (const char *uid, + CalendarEvent *event, + FilterData *filter_data) +{ +#ifdef FIX_BROKEN_TASKS_QUERY + CalendarTask *task; +#endif + + if (event->type != CALENDAR_EVENT_TASK) + return; + +#ifdef FIX_BROKEN_TASKS_QUERY + task = CALENDAR_TASK (event); + + if (task->start_time && task->start_time > filter_data->start_time) + return; + + if (task->completed_time && + (task->completed_time < filter_data->start_time || + task->completed_time > filter_data->end_time)) + return; +#endif /* FIX_BROKEN_TASKS_QUERY */ + + filter_data->events = g_slist_prepend (filter_data->events, + calendar_event_copy (event)); +} + +static GSList * +calendar_client_filter_events (CalendarClient *client, + GSList *sources, + CalendarEventFilterFunc filter_func, + time_t start_time, + time_t end_time) +{ + FilterData filter_data; + GSList *l; + GSList *retval; + + if (!sources) + return NULL; + + filter_data.client = client; + filter_data.events = NULL; + filter_data.start_time = start_time; + filter_data.end_time = end_time; + + retval = NULL; + for (l = sources; l; l = l->next) + { + CalendarClientSource *source = l->data; + + if (source->query_completed) + { + filter_data.events = NULL; + g_hash_table_foreach (source->completed_query.events, + (GHFunc) filter_func, + &filter_data); + + filter_data.events = g_slist_reverse (filter_data.events); + + retval = g_slist_concat (retval, filter_data.events); + } + } + + return retval; +} + +GSList * +calendar_client_get_events (CalendarClient *client, + CalendarEventType event_mask) +{ + GSList *appointments; + GSList *tasks; + time_t day_begin; + time_t day_end; + + g_return_val_if_fail (CALENDAR_IS_CLIENT (client), NULL); + g_return_val_if_fail (client->priv->day != -1 && + client->priv->month != -1 && + client->priv->year != -1, NULL); + + day_begin = make_time_for_day_begin (client->priv->day, + client->priv->month, + client->priv->year); + day_end = make_time_for_day_begin (client->priv->day + 1, + client->priv->month, + client->priv->year); + + appointments = NULL; + if (event_mask & CALENDAR_EVENT_APPOINTMENT) + { + appointments = calendar_client_filter_events (client, + client->priv->appointment_sources, + filter_appointment, + day_begin, + day_end); + } + + tasks = NULL; + if (event_mask & CALENDAR_EVENT_TASK) + { + tasks = calendar_client_filter_events (client, + client->priv->task_sources, + filter_task, + day_begin, + day_end); + } + + return g_slist_concat (appointments, tasks); +} + +static inline int +day_from_time_t (time_t t) +{ + struct tm *tm = localtime (&t); + + g_assert (tm == NULL || (tm->tm_mday >=1 && tm->tm_mday <= 31)); + + return tm ? tm->tm_mday : 0; +} + +void +calendar_client_foreach_appointment_day (CalendarClient *client, + CalendarDayIter iter_func, + gpointer user_data) +{ + GSList *appointments, *l; + gboolean marked_days [32] = { FALSE, }; + time_t month_begin; + time_t month_end; + int i; + + g_return_if_fail (CALENDAR_IS_CLIENT (client)); + g_return_if_fail (iter_func != NULL); + g_return_if_fail (client->priv->month != -1 && + client->priv->year != -1); + + month_begin = make_time_for_day_begin (1, + client->priv->month, + client->priv->year); + month_end = make_time_for_day_begin (1, + client->priv->month + 1, + client->priv->year); + + appointments = calendar_client_filter_events (client, + client->priv->appointment_sources, + filter_appointment, + month_begin, + month_end); + for (l = appointments; l; l = l->next) + { + CalendarAppointment *appointment = l->data; + + if (appointment->start_time) + { + time_t day_time = appointment->start_time; + + if (day_time >= month_begin) + marked_days [day_from_time_t (day_time)] = TRUE; + + if (appointment->end_time) + { + int day_offset; + int duration = appointment->end_time - appointment->start_time; + /* mark the days for the appointment, no need to add an extra one when duration is a multiple of 86400 */ + for (day_offset = 1; day_offset <= duration / 86400 && duration != day_offset * 86400; day_offset++) + { + time_t day_tm = appointment->start_time + day_offset * 86400; + + if (day_tm > month_end) + break; + if (day_tm >= month_begin) + marked_days [day_from_time_t (day_tm)] = TRUE; + } + } + } + calendar_event_free (CALENDAR_EVENT (appointment)); + } + + g_slist_free (appointments); + + for (i = 1; i < 32; i++) + { + if (marked_days [i]) + iter_func (client, i, user_data); + } +} + +void +calendar_client_set_task_completed (CalendarClient *client, + char *task_uid, + gboolean task_completed, + guint percent_complete) +{ + GSList *l; + ECal *esource; + icalcomponent *ical; + icalproperty *prop; + icalproperty_status status; + + g_return_if_fail (CALENDAR_IS_CLIENT (client)); + g_return_if_fail (task_uid != NULL); + g_return_if_fail (task_completed == FALSE || percent_complete == 100); + + ical = NULL; + esource = NULL; + for (l = client->priv->task_sources; l; l = l->next) + { + CalendarClientSource *source = l->data; + + esource = source->source; + e_cal_get_object (esource, task_uid, NULL, &ical, NULL); + if (ical) + break; + } + + if (!ical) + { + g_warning ("Cannot locate task with uid = '%s'\n", task_uid); + return; + } + + g_assert (esource != NULL); + + /* Completed time */ + prop = icalcomponent_get_first_property (ical, + ICAL_COMPLETED_PROPERTY); + if (task_completed) + { + struct icaltimetype completed_time; + + completed_time = icaltime_current_time_with_zone (client->priv->zone); + if (!prop) + { + icalcomponent_add_property (ical, + icalproperty_new_completed (completed_time)); + } + else + { + icalproperty_set_completed (prop, completed_time); + } + } + else if (prop) + { + icalcomponent_remove_property (ical, prop); + } + + /* Percent complete */ + prop = icalcomponent_get_first_property (ical, + ICAL_PERCENTCOMPLETE_PROPERTY); + if (!prop) + { + icalcomponent_add_property (ical, + icalproperty_new_percentcomplete (percent_complete)); + } + else + { + icalproperty_set_percentcomplete (prop, percent_complete); + } + + /* Status */ + status = task_completed ? ICAL_STATUS_COMPLETED : ICAL_STATUS_NEEDSACTION; + prop = icalcomponent_get_first_property (ical, ICAL_STATUS_PROPERTY); + if (prop) + { + icalproperty_set_status (prop, status); + } + else + { + icalcomponent_add_property (ical, + icalproperty_new_status (status)); + } + + e_cal_modify_object (esource, ical, CALOBJ_MOD_ALL, NULL); +} diff --git a/applets/clock/calendar-client.h b/applets/clock/calendar-client.h new file mode 100644 index 00000000..9d502ba0 --- /dev/null +++ b/applets/clock/calendar-client.h @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Mark McLoughlin <[email protected]> + * William Jon McCann <[email protected]> + * Martin Grimme <[email protected]> + * Christian Kellner <[email protected]> + */ + +#ifndef __CALENDAR_CLIENT_H__ +#define __CALENDAR_CLIENT_H__ + +#include <glib-object.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + CALENDAR_EVENT_APPOINTMENT = 1 << 0, + CALENDAR_EVENT_TASK = 1 << 1, + CALENDAR_EVENT_ALL = (1 << 2) - 1 +} CalendarEventType; + +#define CALENDAR_TYPE_CLIENT (calendar_client_get_type ()) +#define CALENDAR_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_CLIENT, CalendarClient)) +#define CALENDAR_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_CLIENT, CalendarClientClass)) +#define CALENDAR_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_CLIENT)) +#define CALENDAR_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_CLIENT)) +#define CALENDAR_CLIENT_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_CLIENT, CalendarClientClass)) + +typedef struct _CalendarClient CalendarClient; +typedef struct _CalendarClientClass CalendarClientClass; +typedef struct _CalendarClientPrivate CalendarClientPrivate; + +struct _CalendarClient +{ + GObject parent; + CalendarClientPrivate *priv; +}; + +struct _CalendarClientClass +{ + GObjectClass parent_class; + + void (* appointments_changed) (CalendarClient *client); + void (* tasks_changed) (CalendarClient *client); +}; + + +typedef struct +{ + time_t start_time; + time_t end_time; +} CalendarOccurrence; + +typedef struct +{ + char *uid; + char *rid; + char *uri; + char *summary; + char *description; + char *color_string; + time_t start_time; + time_t end_time; + guint is_all_day : 1; + + /* Only used internally */ + GSList *occurrences; +} CalendarAppointment; + +typedef struct +{ + char *uid; + char *summary; + char *description; + char *color_string; + char *url; + time_t start_time; + time_t due_time; + guint percent_complete; + time_t completed_time; + int priority; +} CalendarTask; + +typedef struct +{ + union + { + CalendarAppointment appointment; + CalendarTask task; + } event; + CalendarEventType type; +} CalendarEvent; + +#define CALENDAR_EVENT(e) ((CalendarEvent *)(e)) +#define CALENDAR_APPOINTMENT(e) ((CalendarAppointment *)(e)) +#define CALENDAR_TASK(e) ((CalendarTask *)(e)) + +typedef void (* CalendarDayIter) (CalendarClient *client, + guint day, + gpointer user_data); + + +GType calendar_client_get_type (void) G_GNUC_CONST; +CalendarClient *calendar_client_new (void); + +void calendar_client_get_date (CalendarClient *client, + guint *year, + guint *month, + guint *day); +void calendar_client_select_month (CalendarClient *client, + guint month, + guint year); +void calendar_client_select_day (CalendarClient *client, + guint day); + +GSList *calendar_client_get_events (CalendarClient *client, + CalendarEventType event_mask); +void calendar_client_foreach_appointment_day (CalendarClient *client, + CalendarDayIter iter_func, + gpointer user_data); + +void calendar_client_set_task_completed (CalendarClient *client, + char *task_uid, + gboolean task_completed, + guint percent_complete); + +void calendar_event_free (CalendarEvent *event); + +#ifdef __cplusplus +} +#endif + +#endif /* __CALENDAR_CLIENT_H__ */ diff --git a/applets/clock/calendar-debug.h b/applets/clock/calendar-debug.h new file mode 100644 index 00000000..a7ea2a79 --- /dev/null +++ b/applets/clock/calendar-debug.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Mark McLoughlin <[email protected]> + */ + +#ifndef __CALENDAR_DEBUG_H__ +#define __CALENDAR_DEBUG_H__ + +#include <glib.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CALENDAR_ENABLE_DEBUG + +#include <stdio.h> + +#ifdef G_HAVE_ISO_VARARGS +# define dprintf(...) fprintf (stderr, __VA_ARGS__); +#elif defined(G_HAVE_GNUC_VARARGS) +# define dprintf(args...) fprintf (stderr, args); +#endif + +#else /* if !defined (CALENDAR_DEBUG) */ + +#ifdef G_HAVE_ISO_VARARGS +# define dprintf(...) +#elif defined(G_HAVE_GNUC_VARARGS) +# define dprintf(args...) +#endif + +#endif /* CALENDAR_ENABLE_DEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CALENDAR_DEBUG_H__ */ diff --git a/applets/clock/calendar-sources.c b/applets/clock/calendar-sources.c new file mode 100644 index 00000000..721ff062 --- /dev/null +++ b/applets/clock/calendar-sources.c @@ -0,0 +1,658 @@ +/* + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Mark McLoughlin <[email protected]> + * William Jon McCann <[email protected]> + * Martin Grimme <[email protected]> + * Christian Kellner <[email protected]> + */ + +#include <config.h> + +#include "calendar-sources.h" + +#include <libintl.h> +#include <string.h> +#include <mateconf/mateconf-client.h> +#define HANDLE_LIBICAL_MEMORY +#include <libecal/e-cal.h> +#include <libedataserver/e-source-list.h> +#include <libedataserverui/e-passwords.h> + +#undef CALENDAR_ENABLE_DEBUG +#include "calendar-debug.h" + +#ifndef _ +#define _(x) gettext(x) +#endif + +#ifndef N_ +#define N_(x) x +#endif + +#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate)) + +#define CALENDAR_SOURCES_EVO_DIR "/apps/evolution" +#define CALENDAR_SOURCES_APPOINTMENT_SOURCES_KEY CALENDAR_SOURCES_EVO_DIR "/calendar/sources" +#define CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR CALENDAR_SOURCES_EVO_DIR "/calendar/display" +#define CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_KEY CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR "/selected_calendars" +#define CALENDAR_SOURCES_TASK_SOURCES_KEY CALENDAR_SOURCES_EVO_DIR "/tasks/sources" +#define CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR CALENDAR_SOURCES_EVO_DIR "/calendar/tasks" +#define CALENDAR_SOURCES_SELECTED_TASK_SOURCES_KEY CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR "/selected_tasks" + +typedef struct _CalendarSourceData CalendarSourceData; + +struct _CalendarSourceData +{ + ECalSourceType source_type; + CalendarSources *sources; + guint changed_signal; + + GSList *clients; + GSList *selected_sources; + ESourceList *esource_list; + + guint selected_sources_listener; + char *selected_sources_dir; + + guint timeout_id; + + guint loaded : 1; +}; + +struct _CalendarSourcesPrivate +{ + CalendarSourceData appointment_sources; + CalendarSourceData task_sources; + + MateConfClient *mateconf_client; +}; + +static void calendar_sources_class_init (CalendarSourcesClass *klass); +static void calendar_sources_init (CalendarSources *sources); +static void calendar_sources_finalize (GObject *object); + +static void backend_died_cb (ECal *client, CalendarSourceData *source_data); +static void calendar_sources_esource_list_changed (ESourceList *source_list, + CalendarSourceData *source_data); + +enum +{ + APPOINTMENT_SOURCES_CHANGED, + TASK_SOURCES_CHANGED, + LAST_SIGNAL +}; +static guint signals [LAST_SIGNAL] = { 0, }; + +static GObjectClass *parent_class = NULL; +static CalendarSources *calendar_sources_singleton = NULL; + +GType +calendar_sources_get_type (void) +{ + static GType sources_type = 0; + + if (!sources_type) + { + static const GTypeInfo sources_info = + { + sizeof (CalendarSourcesClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) calendar_sources_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (CalendarSources), + 0, /* n_preallocs */ + (GInstanceInitFunc) calendar_sources_init, + }; + + sources_type = g_type_register_static (G_TYPE_OBJECT, + "CalendarSources", + &sources_info, 0); + } + + return sources_type; +} + +static void +calendar_sources_class_init (CalendarSourcesClass *klass) +{ + GObjectClass *gobject_class = (GObjectClass *) klass; + + parent_class = g_type_class_peek_parent (klass); + + gobject_class->finalize = calendar_sources_finalize; + + g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate)); + + signals [APPOINTMENT_SOURCES_CHANGED] = + g_signal_new ("appointment-sources-changed", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CalendarSourcesClass, + appointment_sources_changed), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + signals [TASK_SOURCES_CHANGED] = + g_signal_new ("task-sources-changed", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CalendarSourcesClass, + task_sources_changed), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); +} + +static void +calendar_sources_init (CalendarSources *sources) +{ + sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources); + + sources->priv->appointment_sources.source_type = E_CAL_SOURCE_TYPE_EVENT; + sources->priv->appointment_sources.sources = sources; + sources->priv->appointment_sources.changed_signal = signals [APPOINTMENT_SOURCES_CHANGED]; + sources->priv->appointment_sources.timeout_id = 0; + + sources->priv->task_sources.source_type = E_CAL_SOURCE_TYPE_TODO; + sources->priv->task_sources.sources = sources; + sources->priv->task_sources.changed_signal = signals [TASK_SOURCES_CHANGED]; + sources->priv->task_sources.timeout_id = 0; + + sources->priv->mateconf_client = mateconf_client_get_default (); +} + +static void +calendar_sources_finalize_source_data (CalendarSources *sources, + CalendarSourceData *source_data) +{ + if (source_data->loaded) + { + GSList *l; + + if (source_data->selected_sources_dir) + { + mateconf_client_remove_dir (sources->priv->mateconf_client, + source_data->selected_sources_dir, + NULL); + + g_free (source_data->selected_sources_dir); + source_data->selected_sources_dir = NULL; + } + + if (source_data->selected_sources_listener) + { + mateconf_client_notify_remove (sources->priv->mateconf_client, + source_data->selected_sources_listener); + source_data->selected_sources_listener = 0; + } + + for (l = source_data->clients; l; l = l->next) + { + g_signal_handlers_disconnect_by_func (G_OBJECT (l->data), + G_CALLBACK (backend_died_cb), + source_data); + g_object_unref (l->data); + } + g_slist_free (source_data->clients); + source_data->clients = NULL; + + if (source_data->esource_list) + { + g_signal_handlers_disconnect_by_func (source_data->esource_list, + G_CALLBACK (calendar_sources_esource_list_changed), + source_data); + g_object_unref (source_data->esource_list); + } + source_data->esource_list = NULL; + + for (l = source_data->selected_sources; l; l = l->next) + g_free (l->data); + g_slist_free (source_data->selected_sources); + source_data->selected_sources = NULL; + + if (source_data->timeout_id != 0) + { + g_source_remove (source_data->timeout_id); + source_data->timeout_id = 0; + } + + source_data->loaded = FALSE; + } +} + +static void +calendar_sources_finalize (GObject *object) +{ + CalendarSources *sources = CALENDAR_SOURCES (object); + + calendar_sources_finalize_source_data (sources, &sources->priv->appointment_sources); + calendar_sources_finalize_source_data (sources, &sources->priv->task_sources); + + if (sources->priv->mateconf_client) + g_object_unref (sources->priv->mateconf_client); + sources->priv->mateconf_client = NULL; + + if (G_OBJECT_CLASS (parent_class)->finalize) + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +CalendarSources * +calendar_sources_get (void) +{ + gpointer singleton_location = &calendar_sources_singleton; + + if (calendar_sources_singleton) + return g_object_ref (calendar_sources_singleton); + + calendar_sources_singleton = g_object_new (CALENDAR_TYPE_SOURCES, NULL); + g_object_add_weak_pointer (G_OBJECT (calendar_sources_singleton), + singleton_location); + + return calendar_sources_singleton; +} + +static gboolean +is_source_selected (ESource *esource, + GSList *selected_sources) +{ + const char *uid; + GSList *l; + + uid = e_source_peek_uid (esource); + + for (l = selected_sources; l; l = l->next) + { + const char *source = l->data; + + if (!strcmp (source, uid)) + return TRUE; + } + + return FALSE; +} + +static char * +auth_func_cb (ECal *ecal, + const char *prompt, + const char *key, + gpointer user_data) +{ + ESource *source; + const gchar *auth_domain; + const gchar *component_name; + + source = e_cal_get_source (ecal); + auth_domain = e_source_get_property (source, "auth-domain"); + component_name = auth_domain ? auth_domain : "Calendar"; + + return e_passwords_get_password (component_name, key); +} + +/* The clients are just created here but not loaded */ +static ECal * +get_ecal_from_source (ESource *esource, + ECalSourceType source_type, + GSList *existing_clients) +{ + ECal *retval; + + if (existing_clients) + { + GSList *l; + + for (l = existing_clients; l; l = l->next) + { + ECal *client = E_CAL (l->data); + + if (e_source_equal (esource, e_cal_get_source (client))) + { + dprintf (" load_esource: found existing source ... returning that\n"); + + return g_object_ref (client); + } + } + } + + retval = e_cal_new (esource, source_type); + if (!retval) + { + g_warning ("Could not load source '%s' from '%s'\n", + e_source_peek_name (esource), + e_source_peek_relative_uri (esource)); + return NULL; + } + + e_cal_set_auth_func (retval, auth_func_cb, NULL); + + return retval; +} + +/* - Order doesn't matter + * - Can just compare object pointers since we + * re-use client connections + */ +static gboolean +compare_ecal_lists (GSList *a, + GSList *b) +{ + GSList *l; + + if (g_slist_length (a) != g_slist_length (b)) + return FALSE; + + for (l = a; l; l = l->next) + { + if (!g_slist_find (b, l->data)) + return FALSE; + } + + return TRUE; +} + +static inline void +debug_dump_selected_sources (GSList *selected_sources) +{ +#ifdef CALENDAR_ENABLE_DEBUG + GSList *l; + + dprintf ("Selected sources:\n"); + for (l = selected_sources; l; l = l->next) + { + char *source = l->data; + + dprintf (" %s\n", source); + } + dprintf ("\n"); +#endif +} + +static inline void +debug_dump_ecal_list (GSList *ecal_list) +{ +#ifdef CALENDAR_ENABLE_DEBUG + GSList *l; + + dprintf ("Loaded clients:\n"); + for (l = ecal_list; l; l = l->next) + { + ECal *client = l->data; + ESource *source = e_cal_get_source (client); + + dprintf (" %s %s %s\n", + e_source_peek_uid (source), + e_source_peek_name (source), + e_cal_get_uri (client)); + } +#endif +} + +static void +calendar_sources_load_esource_list (CalendarSourceData *source_data); + +static gboolean +backend_restart (gpointer data) +{ + CalendarSourceData *source_data = data; + + calendar_sources_load_esource_list (source_data); + + source_data->timeout_id = 0; + + return FALSE; +} + +static void +backend_died_cb (ECal *client, CalendarSourceData *source_data) +{ + const char *uristr; + + source_data->clients = g_slist_remove (source_data->clients, client); + if (g_slist_length (source_data->clients) < 1) + { + g_slist_free (source_data->clients); + source_data->clients = NULL; + } + uristr = e_cal_get_uri (client); + g_warning ("The calendar backend for %s has crashed.", uristr); + + if (source_data->timeout_id != 0) + { + g_source_remove (source_data->timeout_id); + source_data->timeout_id = 0; + } + + source_data->timeout_id = g_timeout_add_seconds (2, backend_restart, + source_data); +} + +static void +calendar_sources_load_esource_list (CalendarSourceData *source_data) +{ + GSList *clients = NULL; + GSList *groups, *l; + gboolean emit_signal = FALSE; + + g_return_if_fail (source_data->esource_list != NULL); + + debug_dump_selected_sources (source_data->selected_sources); + + dprintf ("Source groups:\n"); + groups = e_source_list_peek_groups (source_data->esource_list); + for (l = groups; l; l = l->next) + { + GSList *esources, *s; + + dprintf (" %s\n", e_source_group_peek_uid (l->data)); + dprintf (" sources:\n"); + + esources = e_source_group_peek_sources (l->data); + for (s = esources; s; s = s->next) + { + ESource *esource = E_SOURCE (s->data); + ECal *client; + + dprintf (" type = '%s' uid = '%s', name = '%s', relative uri = '%s': \n", + source_data->source_type == E_CAL_SOURCE_TYPE_EVENT ? "appointment" : "task", + e_source_peek_uid (esource), + e_source_peek_name (esource), + e_source_peek_relative_uri (esource)); + + if (is_source_selected (esource, source_data->selected_sources) && + (client = get_ecal_from_source (esource, source_data->source_type, source_data->clients))) + { + clients = g_slist_prepend (clients, client); + } + } + } + dprintf ("\n"); + + if (source_data->loaded && + !compare_ecal_lists (source_data->clients, clients)) + emit_signal = TRUE; + + for (l = source_data->clients; l; l = l->next) + { + g_signal_handlers_disconnect_by_func (G_OBJECT (l->data), + G_CALLBACK (backend_died_cb), + source_data); + + g_object_unref (l->data); + } + g_slist_free (source_data->clients); + source_data->clients = g_slist_reverse (clients); + + /* connect to backend_died after we disconnected the previous signal + * handlers. If we do it before, we'll lose some handlers (for clients that + * were already there before) */ + for (l = source_data->clients; l; l = l->next) + { + g_signal_connect (G_OBJECT (l->data), "backend_died", + G_CALLBACK (backend_died_cb), source_data); + } + + if (emit_signal) + { + dprintf ("Emitting %s-sources-changed signal\n", + source_data->source_type == E_CAL_SOURCE_TYPE_EVENT ? "appointment" : "task"); + g_signal_emit (source_data->sources, source_data->changed_signal, 0); + } + + debug_dump_ecal_list (source_data->clients); +} + +static void +calendar_sources_esource_list_changed (ESourceList *source_list, + CalendarSourceData *source_data) + +{ + dprintf ("ESourceList changed, reloading\n"); + + calendar_sources_load_esource_list (source_data); +} + +static void +calendar_sources_selected_sources_notify (MateConfClient *client, + guint cnx_id, + MateConfEntry *entry, + CalendarSourceData *source_data) +{ + GSList *l; + + if (!entry->value || + entry->value->type != MATECONF_VALUE_LIST || + mateconf_value_get_list_type (entry->value) != MATECONF_VALUE_STRING) + return; + + dprintf ("Selected sources key (%s) changed, reloading\n", entry->key); + + for (l = source_data->selected_sources; l; l = l->next) + g_free (l->data); + source_data->selected_sources = NULL; + + for (l = mateconf_value_get_list (entry->value); l; l = l->next) + { + const char *source = mateconf_value_get_string (l->data); + + source_data->selected_sources = + g_slist_prepend (source_data->selected_sources, + g_strdup (source)); + } + source_data->selected_sources = + g_slist_reverse (source_data->selected_sources); + + calendar_sources_load_esource_list (source_data); +} + +static void +calendar_sources_load_sources (CalendarSources *sources, + CalendarSourceData *source_data, + const char *sources_key, + const char *selected_sources_key, + const char *selected_sources_dir) +{ + MateConfClient *mateconf_client; + GError *error; + + dprintf ("---------------------------\n"); + dprintf ("Loading sources:\n"); + dprintf (" sources_key: %s\n", sources_key); + dprintf (" selected_sources_key: %s\n", selected_sources_key); + dprintf (" selected_sources_dir: %s\n", selected_sources_dir); + + mateconf_client = sources->priv->mateconf_client; + + error = NULL; + source_data->selected_sources = mateconf_client_get_list (mateconf_client, + selected_sources_key, + MATECONF_VALUE_STRING, + &error); + if (error) + { + g_warning ("Failed to get selected sources from '%s': %s\n", + selected_sources_key, + error->message); + g_error_free (error); + return; + } + + mateconf_client_add_dir (mateconf_client, + selected_sources_dir, + MATECONF_CLIENT_PRELOAD_NONE, + NULL); + source_data->selected_sources_dir = g_strdup (selected_sources_dir); + + source_data->selected_sources_listener = + mateconf_client_notify_add (mateconf_client, + selected_sources_dir, + (MateConfClientNotifyFunc) calendar_sources_selected_sources_notify, + source_data, NULL, NULL); + + source_data->esource_list = e_source_list_new_for_mateconf (mateconf_client, sources_key); + g_signal_connect (source_data->esource_list, "changed", + G_CALLBACK (calendar_sources_esource_list_changed), + source_data); + + calendar_sources_load_esource_list (source_data); + + source_data->loaded = TRUE; + + dprintf ("---------------------------\n"); +} + +GSList * +calendar_sources_get_appointment_sources (CalendarSources *sources) +{ + g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL); + + if (!sources->priv->appointment_sources.loaded) + { + calendar_sources_load_sources (sources, + &sources->priv->appointment_sources, + CALENDAR_SOURCES_APPOINTMENT_SOURCES_KEY, + CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_KEY, + CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR); + } + + return sources->priv->appointment_sources.clients; +} + +GSList * +calendar_sources_get_task_sources (CalendarSources *sources) +{ + g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL); + + if (!sources->priv->task_sources.loaded) + { + calendar_sources_load_sources (sources, + &sources->priv->task_sources, + CALENDAR_SOURCES_TASK_SOURCES_KEY, + CALENDAR_SOURCES_SELECTED_TASK_SOURCES_KEY, + CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR); + } + + return sources->priv->task_sources.clients; +} diff --git a/applets/clock/calendar-sources.h b/applets/clock/calendar-sources.h new file mode 100644 index 00000000..3f080c55 --- /dev/null +++ b/applets/clock/calendar-sources.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Mark McLoughlin <[email protected]> + * William Jon McCann <[email protected]> + * Martin Grimme <[email protected]> + * Christian Kellner <[email protected]> + */ + +#ifndef __CALENDAR_SOURCES_H__ +#define __CALENDAR_SOURCES_H__ + +#include <glib-object.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ()) +#define CALENDAR_SOURCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources)) +#define CALENDAR_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass)) +#define CALENDAR_IS_SOURCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES)) +#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES)) +#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass)) + +typedef struct _CalendarSources CalendarSources; +typedef struct _CalendarSourcesClass CalendarSourcesClass; +typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate; + +struct _CalendarSources +{ + GObject parent; + CalendarSourcesPrivate *priv; +}; + +struct _CalendarSourcesClass +{ + GObjectClass parent_class; + + void (* appointment_sources_changed) (CalendarSources *sources); + void (* task_sources_changed) (CalendarSources *sources); +}; + + +GType calendar_sources_get_type (void) G_GNUC_CONST; +CalendarSources *calendar_sources_get (void); +GSList *calendar_sources_get_appointment_sources (CalendarSources *sources); +GSList *calendar_sources_get_task_sources (CalendarSources *sources); + +#ifdef __cplusplus +} +#endif + +#endif /* __CALENDAR_SOURCES_H__ */ diff --git a/applets/clock/calendar-window.c b/applets/clock/calendar-window.c new file mode 100644 index 00000000..d675f492 --- /dev/null +++ b/applets/clock/calendar-window.c @@ -0,0 +1,2125 @@ +/* + * calendar-window.c: toplevel window containing a calendar and + * tasks/appointments + * + * Copyright (C) 2007 Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Vincent Untz <[email protected]> + * + * Most of the original code comes from clock.c + */ + + /* + * Evolution calendar integration TODO: + * + Fix treeview scrolling and sizing + * + Tooltips for tasks/appointments + * + Do everything backwards if the clock is on the bottom + * + Double clicking appointments/tasks should open them in evo + * + Consider using different colours for different sources + * + Consider doing a GtkMenu tearoff type thing + */ + +#include <config.h> + +#include <string.h> + +#include <glib/gi18n.h> +#include <mateconf/mateconf-client.h> + +#define MATE_DESKTOP_USE_UNSTABLE_API +#include <libmate/mate-desktop-utils.h> + +#include "calendar-window.h" + +#include "clock.h" +#include "clock-utils.h" +#include "clock-typebuiltins.h" +#ifdef HAVE_LIBECAL +#include "calendar-client.h" +#endif + +#define CALENDAR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_WINDOW, CalendarWindowPrivate)) + +#define KEY_LOCATIONS_EXPANDED "expand_locations" +#ifdef HAVE_LIBECAL +/* For the following value, take into account the KEY_* that are not inside this #ifdef! */ +# define N_CALENDAR_WINDOW_MATECONF_PREFS 5 +# define KEY_APPOINTMENTS_EXPANDED "expand_appointments" +# define KEY_BIRTHDAYS_EXPANDED "expand_birthdays" +# define KEY_TASKS_EXPANDED "expand_tasks" +# define KEY_WEATHER_EXPANDED "expand_weather" + +# define KEY_CALENDAR_APP "/desktop/mate/applications/calendar" +# define KEY_TASKS_APP "/desktop/mate/applications/tasks" +#else +# define N_CALENDAR_WINDOW_MATECONF_PREFS 1 +#endif + +enum { + EDIT_LOCATIONS, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; + +struct _CalendarWindowPrivate { + GtkWidget *calendar; + + char *prefs_dir; + + gboolean invert_order; + gboolean show_weeks; + time_t *current_time; + + GtkWidget *locations_list; + +#ifdef HAVE_LIBECAL + ClockFormat time_format; + + CalendarClient *client; + + GtkWidget *appointment_list; + GtkWidget *birthday_list; + GtkWidget *weather_list; + GtkWidget *task_list; + + GtkListStore *appointments_model; + GtkListStore *tasks_model; + + GtkTreeSelection *previous_selection; + + GtkTreeModelFilter *appointments_filter; + GtkTreeModelFilter *birthdays_filter; + GtkTreeModelFilter *tasks_filter; + GtkTreeModelFilter *weather_filter; + + MateConfClient *mateconfclient; +#endif /* HAVE_LIBECAL */ +}; + +G_DEFINE_TYPE (CalendarWindow, calendar_window, GTK_TYPE_WINDOW) + +enum { + PROP_0, + PROP_INVERTORDER, + PROP_SHOWWEEKS, +#ifdef HAVE_LIBECAL + PROP_TIMEFORMAT, +#endif + PROP_CURRENTTIMEP, + PROP_PREFSDIR +}; + +static time_t *calendar_window_get_current_time_p (CalendarWindow *calwin); +static void calendar_window_set_current_time_p (CalendarWindow *calwin, + time_t *current_time); +static const char *calendar_window_get_prefs_dir (CalendarWindow *calwin); +static void calendar_window_set_prefs_dir (CalendarWindow *calwin, + const char *prefs_dir); +static GtkWidget * create_hig_frame (CalendarWindow *calwin, + const char *title, + const char *button_label, + const char *key, + GCallback callback); + +#ifdef HAVE_LIBECAL + +static void +clock_launch_calendar_tasks_app (CalendarWindow *calwin, + const char *key_program, + const char *argument) +{ + char **argv; + int argc; + char *key; + char *program; + gboolean terminal; + char *command_line; + GdkScreen *screen; + GError *error; + gboolean result; + + key = g_strdup_printf ("%s%s", key_program, "/exec"); + program = mateconf_client_get_string (calwin->priv->mateconfclient, + key, NULL); + g_free (key); + + key = g_strdup_printf ("%s%s", key_program, "/needs_term"); + terminal = mateconf_client_get_bool (calwin->priv->mateconfclient, + key, NULL); + g_free (key); + + if (program == NULL) { + g_printerr ("Cannot launch calendar/tasks application: key not set\n"); + return; + } + + command_line = g_find_program_in_path (program); + if (command_line == NULL) { + g_printerr ("Cannot launch calendar/tasks application: %s in path\n", program); + g_free (program); + return; + } + g_free (command_line); + + if (argument) { + argc = 2; + argv = g_new0 (char *, 3); + argv[1] = g_strdup (argument); + } else { + argc = 1; + argv = g_new0 (char *, 2); + } + argv[0] = program; /* no strdup, and it will get freed for free */ + + screen = gtk_widget_get_screen (calwin->priv->calendar); + error = NULL; + + if (terminal) + mate_desktop_prepend_terminal_to_vector (&argc, &argv); + + result = gdk_spawn_on_screen (screen, + NULL, /* working directory */ + argv, + NULL, /* envp */ + G_SPAWN_SEARCH_PATH, + NULL, /* child setup func */ + NULL, /* user data */ + NULL, /* child pid */ + &error); + + if (!result) { + g_printerr ("Cannot launch calendar/tasks application: %s\n", + error->message); + g_error_free (error); + } + + g_strfreev (argv); +} + +static void +clock_launch_calendar_app (CalendarWindow *calwin, + const char *argument) +{ + clock_launch_calendar_tasks_app (calwin, KEY_CALENDAR_APP, argument); +} + +static void +clock_launch_tasks_app (CalendarWindow *calwin, + const char *argument) +{ + clock_launch_calendar_tasks_app (calwin, KEY_TASKS_APP, argument); +} + +static void +update_frame_visibility (GtkWidget *frame, + GtkTreeModel *model) +{ + GtkTreeIter iter; + gboolean model_empty; + + if (!frame) + return; + + model_empty = !gtk_tree_model_get_iter_first (model, &iter); + + if (model_empty) + gtk_widget_hide (frame); + else + gtk_widget_show (frame); +} + +enum { + APPOINTMENT_COLUMN_UID, + APPOINTMENT_COLUMN_URI, + APPOINTMENT_COLUMN_SUMMARY, + APPOINTMENT_COLUMN_DESCRIPTION, + APPOINTMENT_COLUMN_START_TIME, + APPOINTMENT_COLUMN_START_TEXT, + APPOINTMENT_COLUMN_END_TIME, + APPOINTMENT_COLUMN_ALL_DAY, + APPOINTMENT_COLUMN_PIXBUF, + N_APPOINTMENT_COLUMNS +}; + +enum { + TASK_COLUMN_UID, + TASK_COLUMN_SUMMARY, + TASK_COLUMN_DESCRIPTION, + TASK_COLUMN_START_TIME, + TASK_COLUMN_DUE_TIME, + TASK_COLUMN_PERCENT_COMPLETE, + TASK_COLUMN_PERCENT_COMPLETE_TEXT, + TASK_COLUMN_COMPLETED, + TASK_COLUMN_COMPLETED_TIME, + TASK_COLUMN_OVERDUE_ATTR, + TASK_COLUMN_COLOR, + TASK_COLUMN_PRIORITY, + N_TASK_COLUMNS +}; + +static char * +format_time (ClockFormat format, + time_t t, + guint year, + guint month, + guint day) +{ + struct tm *tm; + char *time_format; + char result [256] = { 0, }; + + if (!t) + return NULL; + + tm = localtime (&t); + if (!tm) + return NULL; + + if (year == (tm->tm_year + 1900) && + month == tm->tm_mon && + day == tm->tm_mday) { + if (format == CLOCK_FORMAT_12) + /* Translators: This is a strftime format string. + * It is used to display the time in 12-hours format + * (eg, like in the US: 8:10 am). The %p expands to + * am/pm. */ + time_format = g_locale_from_utf8 (_("%l:%M %p"), -1, NULL, NULL, NULL); + else + /* Translators: This is a strftime format string. + * It is used to display the time in 24-hours format + * (eg, like in France: 20:10). */ + time_format = g_locale_from_utf8 (_("%H:%M"), -1, NULL, NULL, NULL); + } + else { + /* Translators: This is a strftime format string. + * It is used to display the start date of an appointment, in + * the most abbreviated way possible. */ + time_format = g_locale_from_utf8 (_("%b %d"), -1, NULL, NULL, NULL); + } + + strftime (result, sizeof (result), time_format, tm); + g_free (time_format); + + return g_locale_to_utf8 (result, -1, NULL, NULL, NULL); +} + +static void +handle_tasks_changed (CalendarWindow *calwin) +{ + GSList *events, *l; + + gtk_list_store_clear (calwin->priv->tasks_model); + + events = calendar_client_get_events (calwin->priv->client, + CALENDAR_EVENT_TASK); + for (l = events; l; l = l->next) { + CalendarTask *task = l->data; + GtkTreeIter iter; + char *percent_complete_text; + + g_assert (CALENDAR_EVENT (task)->type == CALENDAR_EVENT_TASK); + + /* FIXME: should this format be locale specific ? */ + percent_complete_text = g_strdup_printf ("%d%%", task->percent_complete); + + gtk_list_store_append (calwin->priv->tasks_model, &iter); + gtk_list_store_set (calwin->priv->tasks_model, &iter, + TASK_COLUMN_UID, task->uid, + TASK_COLUMN_SUMMARY, task->summary, + TASK_COLUMN_DESCRIPTION, task->description, + TASK_COLUMN_START_TIME, (gint64)task->start_time, + TASK_COLUMN_DUE_TIME, (gint64)task->due_time, + TASK_COLUMN_PERCENT_COMPLETE, task->percent_complete, + TASK_COLUMN_PERCENT_COMPLETE_TEXT, percent_complete_text, + TASK_COLUMN_COMPLETED, task->percent_complete == 100, + TASK_COLUMN_COMPLETED_TIME, (gint64)task->completed_time, + TASK_COLUMN_COLOR, task->color_string, + TASK_COLUMN_PRIORITY, task->priority, + -1); + + g_free (percent_complete_text); + calendar_event_free (CALENDAR_EVENT (task)); + } + g_slist_free (events); + + update_frame_visibility (calwin->priv->task_list, + GTK_TREE_MODEL (calwin->priv->tasks_filter)); +} + +static void +handle_task_completed_toggled (CalendarWindow *calwin, + const char *path_str, + GtkCellRendererToggle *cell) +{ + GtkTreePath *child_path, *path; + GtkTreeIter iter; + char *uid; + gboolean task_completed; + guint percent_complete; + + path = gtk_tree_path_new_from_string (path_str); + child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, path); + gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model), + &iter, child_path); + gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model), + &iter, + TASK_COLUMN_UID, &uid, + TASK_COLUMN_COMPLETED, &task_completed, + TASK_COLUMN_PERCENT_COMPLETE, &percent_complete, + -1); + + task_completed = !task_completed; + percent_complete = task_completed ? 100 : 0; + + calendar_client_set_task_completed (calwin->priv->client, + uid, + task_completed, + percent_complete); + + g_free (uid); + gtk_tree_path_free (path); + gtk_tree_path_free (child_path); +} + +static void +handle_task_percent_complete_edited (CalendarWindow *calwin, + const char *path_str, + const char *text, + GtkCellRendererText *cell) +{ + GtkTreePath *child_path, *path; + GtkTreeIter iter; + char *uid; + int percent_complete; + char *error = NULL, *text_copy; + + path = gtk_tree_path_new_from_string (path_str); + child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, path); + gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model), + &iter, child_path); + gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model), + &iter, TASK_COLUMN_UID, &uid, + -1); + + text_copy = g_strdup (text); + text_copy = g_strdelimit (text_copy, "%", ' '); + text_copy = g_strstrip (text_copy); + percent_complete = (int) g_strtod (text_copy, &error); + if (!error || !error [0]) { + gboolean task_completed; + + percent_complete = CLAMP (percent_complete, 0, 100); + task_completed = (percent_complete == 100); + + calendar_client_set_task_completed (calwin->priv->client, + uid, + task_completed, + percent_complete); + } + + g_free (uid); + g_free (text_copy); + gtk_tree_path_free (path); + gtk_tree_path_free (child_path); +} + +static gboolean +is_appointment (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gchar *uri; + + gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1); + if (uri) + return (g_ascii_strcasecmp (uri, "file") == 0 || + g_ascii_strcasecmp (uri, "webcal") == 0 || + g_ascii_strcasecmp (uri, "caldav") == 0 || + g_ascii_strcasecmp (uri, "exchange") == 0 || + g_ascii_strcasecmp (uri, "groupwise") == 0 || + g_ascii_strcasecmp (uri, "google") == 0); + return FALSE; +} + +static gboolean +is_birthday (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gchar *uri; + + gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1); + if (uri) + return (g_ascii_strcasecmp (uri, "contacts") == 0); + return FALSE; +} + +static gboolean +is_weather (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gchar *uri; + + gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1); + if (uri) + return (g_ascii_strcasecmp (uri, "weather") == 0); + return FALSE; +} + +static gboolean +filter_out_tasks (GtkTreeModel *model, + GtkTreeIter *iter, + CalendarWindow *calwin) +{ + gint64 start_time64; + gint64 completed_time64; + time_t start_time; + time_t completed_time; + time_t one_day_ago; + gboolean visible; + + gtk_tree_model_get (model, iter, + TASK_COLUMN_START_TIME, &start_time64, + TASK_COLUMN_COMPLETED_TIME, &completed_time64, + -1); + start_time = start_time64; + completed_time = completed_time64; + + one_day_ago = *(calwin->priv->current_time) - (24 * 60 * 60); + + visible = !start_time || start_time <= *(calwin->priv->current_time); + if (visible) + visible = !completed_time || completed_time >= one_day_ago; + + return visible; +} + +static void +modify_task_text_attributes (GtkTreeModel *model, + GtkTreeIter *iter, + GValue *value, + gint column, + CalendarWindow *calwin) +{ + gint64 due_time64; + time_t due_time; + PangoAttrList *attr_list; + PangoAttribute *attr; + GtkTreeIter child_iter; + + gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), + &child_iter, + iter); + + if (column != TASK_COLUMN_OVERDUE_ATTR) { + memset (value, 0, sizeof (GValue)); + gtk_tree_model_get_value (GTK_TREE_MODEL (calwin->priv->tasks_model), + &child_iter, column, value); + + return; + } + + gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model), + &child_iter, TASK_COLUMN_DUE_TIME, &due_time64, + -1); + due_time = due_time64; + + if (due_time && due_time > *(calwin->priv->current_time)) + return; + + attr_list = pango_attr_list_new (); + + attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD); + attr->start_index = 0; + attr->end_index = G_MAXINT; + pango_attr_list_insert (attr_list, attr); + + g_value_take_boxed (value, attr_list); +} + +static gboolean +task_activated_cb (GtkTreeView *view, + GtkTreePath *path, + GtkTreeViewColumn *column, + CalendarWindow *calwin) +{ + GtkTreeIter iter; + GtkTreePath *child_path; + char *uid; + char *argument; + + child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, + path); + + gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model), + &iter, child_path); + gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model), + &iter, TASK_COLUMN_UID, &uid, -1); + + argument = g_strdup_printf ("task:%s", uid); + + clock_launch_tasks_app (calwin, argument); + + g_free (argument); + g_free (uid); + gtk_tree_path_free (child_path); + + return TRUE; +} + +static void +set_renderer_pixbuf_color_by_column (GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gint column_number) +{ + char *color_string; + GdkPixbuf *pixbuf = NULL; + GdkColor color; + + gtk_tree_model_get (model, iter, column_number, &color_string, -1); + + if (color_string && gdk_color_parse (color_string, &color)) { + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 16, 16); + /* GdkColor has 16 bits per color, gdk_pixbuf only uses 8 bits + * per color. So just drop the least significant parts */ + gdk_pixbuf_fill (pixbuf, + (color.red & 0xff00) << 16 | + (color.green & 0xff00) << 8 | + (color.blue & 0xff00)); + + g_object_set (renderer, "visible", pixbuf != NULL, "pixbuf", pixbuf, NULL); + + if (pixbuf) + g_object_unref (pixbuf); + + g_free (color_string); + } +} + +static void +set_renderer_pixbuf_pixmap (GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + const char *iconpath) +{ + GdkPixbuf *pixbuf = NULL; + GError *error = NULL; + + if (!g_file_test (iconpath, G_FILE_TEST_IS_REGULAR)) { + g_printerr ("File '%s' does not exist.\n", iconpath); + return; + } + + pixbuf = gdk_pixbuf_new_from_file (iconpath, &error); + if (error) { + g_printerr ("Cannot load '%s': %s\n", + iconpath, error->message); + g_error_free (error); + return; + } + + g_object_set (renderer, + "visible", pixbuf != NULL, + "pixbuf", pixbuf, + NULL); + + if (pixbuf) + g_object_unref (pixbuf); +} + +static void +set_renderer_pixbuf_pixmap_for_bday (GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gint data_column) +{ + const gchar *path = NULL; + gchar *type = NULL; + + gtk_tree_model_get (model, iter, data_column, &type, -1); + if (!type) + return; + + /* type should be in format like this: + * pas-id-4121A93E00000001-anniversary + * pas-id-41112AF900000003-birthday + * ... + */ + if (g_strrstr (type, "birthday") != NULL) + path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_birthday_16.png"; + else if (g_strrstr (type, "anniversary") != NULL) + path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_gifts_16.png"; + else + path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_miscellaneous_16.png"; + + g_free (type); + + set_renderer_pixbuf_pixmap (renderer, model, iter, path); +} + +static void +set_renderer_pixbuf_pixmap_for_weather (GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter) +{ + set_renderer_pixbuf_pixmap (renderer, model, iter, + CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_holiday_16.png"); +} + +static void +task_pixbuf_cell_data_func (GtkTreeViewColumn *column, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + set_renderer_pixbuf_color_by_column (renderer, + model, + iter, + TASK_COLUMN_COLOR); +} + +static void +appointment_pixbuf_cell_data_func (GtkTreeViewColumn *column, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + set_renderer_pixbuf_color_by_column (renderer, + model, + iter, + APPOINTMENT_COLUMN_PIXBUF); +} +static void +birthday_pixbuf_cell_data_func (GtkTreeViewColumn *column, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + + /* APPOINTMENT_COLUMN_UID contains data to select between + * anniversary or birthday + */ + set_renderer_pixbuf_pixmap_for_bday (renderer, + model, + iter, + APPOINTMENT_COLUMN_UID); +} +static void +weather_pixbuf_cell_data_func (GtkTreeViewColumn *column, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + + set_renderer_pixbuf_pixmap_for_weather (renderer, + model, + iter); +} + +static int +compare_tasks (GtkTreeModel *model, + GtkTreeIter *a, + GtkTreeIter *b, + gpointer user_data) +{ + gboolean done_a, done_b; + int priority_a, priority_b; + + gtk_tree_model_get (model, a, + TASK_COLUMN_COMPLETED, &done_a, + TASK_COLUMN_PRIORITY, &priority_a, + -1); + gtk_tree_model_get (model, b, + TASK_COLUMN_COMPLETED, &done_b, + TASK_COLUMN_PRIORITY, &priority_b, + -1); + + /* Always sort completed tasks last */ + if (done_a != done_b) + return done_a ? -1 : 1; + + /* We change undefined priorities so they appear as "Normal" */ + if (priority_a <= 0) + priority_a = 5; + if (priority_b <= 0) + priority_b = 5; + + /* We'll just use the ordering of the priority values. */ + if (priority_a < priority_b) + return -1; + else if (priority_a > priority_b) + return 1; + else { + gint64 due_time_a64, due_time_b64; + time_t due_time_a, due_time_b; + + gtk_tree_model_get (model, a, + TASK_COLUMN_DUE_TIME, &due_time_a64, -1); + gtk_tree_model_get (model, b, + TASK_COLUMN_DUE_TIME, &due_time_b64, -1); + due_time_a = due_time_a64; + due_time_b = due_time_b64; + + if (due_time_a < due_time_b) + return -1; + else if (due_time_a > due_time_b) + return 1; + else { + char *summary_a, *summary_b; + int res; + + gtk_tree_model_get (model, a, TASK_COLUMN_SUMMARY, &summary_a, -1); + gtk_tree_model_get (model, b, TASK_COLUMN_SUMMARY, &summary_b, -1); + + res = g_utf8_collate (summary_a ? summary_a: "", + summary_b ? summary_b: ""); + + g_free (summary_a); + g_free (summary_b); + + return res; + } + } +} + +static void +calendar_window_tree_selection_changed (GtkTreeSelection *selection, + CalendarWindow *calwin) +{ + if (selection == calwin->priv->previous_selection) + return; + + if (calwin->priv->previous_selection) { + g_signal_handlers_block_by_func (calwin->priv->previous_selection, + calendar_window_tree_selection_changed, + calwin); + gtk_tree_selection_unselect_all (calwin->priv->previous_selection); + g_signal_handlers_unblock_by_func (calwin->priv->previous_selection, + calendar_window_tree_selection_changed, + calwin); + } + + calwin->priv->previous_selection = selection; +} + +static void +edit_tasks (CalendarWindow *calwin) +{ + clock_launch_tasks_app (calwin, NULL); +} + +static GtkWidget * +create_task_list (CalendarWindow *calwin, + GtkWidget **tree_view, + GtkWidget **scrolled_window) +{ + GtkWidget *list; + GtkWidget *view; + GtkWidget *scrolled; + GtkCellRenderer *cell; + GtkTreeViewColumn *column; + GtkTreeSelection *selection; + + list = create_hig_frame (calwin, + _("Tasks"), _("Edit"), + KEY_TASKS_EXPANDED, + G_CALLBACK (edit_tasks)); + + *scrolled_window = scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), + GTK_SHADOW_IN); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + /* we show the widget before adding to the container, since adding to + * the container changes the visibility depending on the state of the + * expander */ + gtk_widget_show (scrolled); + gtk_container_add (GTK_CONTAINER (list), scrolled); + + g_assert (calwin->priv->tasks_model != NULL); + + *tree_view = view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (calwin->priv->tasks_filter)); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE); + + g_signal_connect (view, "row-activated", + G_CALLBACK (task_activated_cb), calwin); + + /* Source color */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_pixbuf_new (); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_set_cell_data_func (column, cell, + (GtkTreeCellDataFunc) task_pixbuf_cell_data_func, + NULL, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + + /* Completed toggle */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_toggle_new (); + g_object_set (cell, + "activatable", TRUE, + NULL); + g_signal_connect_swapped (cell, "toggled", + G_CALLBACK (handle_task_completed_toggled), + calwin); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, + "active", TASK_COLUMN_COMPLETED); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + + /* Percent complete */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, + "editable", TRUE, + NULL); + g_signal_connect_swapped (cell, "edited", + G_CALLBACK (handle_task_percent_complete_edited), + calwin); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, + "text", TASK_COLUMN_PERCENT_COMPLETE_TEXT); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + + /* Summary */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_set_attributes (column, cell, + "text", TASK_COLUMN_SUMMARY, + "strikethrough", TASK_COLUMN_COMPLETED, + "attributes", TASK_COLUMN_OVERDUE_ATTR, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); + g_signal_connect (selection, "changed", + G_CALLBACK (calendar_window_tree_selection_changed), + calwin); + + gtk_container_add (GTK_CONTAINER (scrolled), view); + + gtk_widget_show (view); + + return list; +} + +static void +mark_day_on_calendar (CalendarClient *client, + guint day, + CalendarWindow *calwin) +{ + gtk_calendar_mark_day (GTK_CALENDAR (calwin->priv->calendar), day); +} + +static void +handle_appointments_changed (CalendarWindow *calwin) +{ + GSList *events, *l; + guint year, month, day; + + if (calwin->priv->calendar) { + gtk_calendar_clear_marks (GTK_CALENDAR (calwin->priv->calendar)); + + calendar_client_foreach_appointment_day (calwin->priv->client, + (CalendarDayIter) mark_day_on_calendar, + calwin); + } + + gtk_list_store_clear (calwin->priv->appointments_model); + + calendar_client_get_date (calwin->priv->client, &year, &month, &day); + + events = calendar_client_get_events (calwin->priv->client, + CALENDAR_EVENT_APPOINTMENT); + for (l = events; l; l = l->next) { + CalendarAppointment *appointment = l->data; + GtkTreeIter iter; + char *start_text; + + g_assert (CALENDAR_EVENT (appointment)->type == CALENDAR_EVENT_APPOINTMENT); + + if (appointment->is_all_day) + start_text = g_strdup (_("All Day")); + else + start_text = format_time (calwin->priv->time_format, + appointment->start_time, + year, month, day); + + + gtk_list_store_append (calwin->priv->appointments_model, + &iter); + gtk_list_store_set (calwin->priv->appointments_model, &iter, + APPOINTMENT_COLUMN_UID, appointment->uid, + APPOINTMENT_COLUMN_URI, appointment->uri, + APPOINTMENT_COLUMN_SUMMARY, appointment->summary, + APPOINTMENT_COLUMN_DESCRIPTION, appointment->description, + APPOINTMENT_COLUMN_START_TIME, (gint64)appointment->start_time, + APPOINTMENT_COLUMN_START_TEXT, start_text, + APPOINTMENT_COLUMN_END_TIME, (gint64)appointment->end_time, + APPOINTMENT_COLUMN_ALL_DAY, appointment->is_all_day, + APPOINTMENT_COLUMN_PIXBUF, appointment->color_string, + -1); + + g_free (start_text); + calendar_event_free (CALENDAR_EVENT (appointment)); + } + g_slist_free (events); + + update_frame_visibility (calwin->priv->appointment_list, + GTK_TREE_MODEL (calwin->priv->appointments_filter)); + update_frame_visibility (calwin->priv->birthday_list, + GTK_TREE_MODEL (calwin->priv->birthdays_filter)); + update_frame_visibility (calwin->priv->weather_list, + GTK_TREE_MODEL (calwin->priv->weather_filter)); +} + +static GtkWidget * +create_list_for_appointment_model (CalendarWindow *calwin, + const char *label, + GtkTreeModelFilter **filter, + GtkTreeModelFilterVisibleFunc is_for_filter, + GtkTreeCellDataFunc set_pixbuf_cell, + gboolean show_start, + GtkWidget **tree_view, + GtkWidget **scrolled_window, + const char *key, + GCallback callback) +{ + GtkWidget *list; + GtkWidget *view; + GtkWidget *scrolled; + GtkCellRenderer *cell; + GtkTreeViewColumn *column; + GtkTreeSelection *selection; + + + list = create_hig_frame (calwin, label, _("Edit"), key, callback); + + *scrolled_window = scrolled = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), + GTK_SHADOW_IN); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + /* we show the widget before adding to the container, since adding to + * the container changes the visibility depending on the state of the + * expander */ + gtk_widget_show (scrolled); + gtk_container_add (GTK_CONTAINER (list), scrolled); + + g_assert (calwin->priv->appointments_model != NULL); + + if (!*filter) { + *filter = + GTK_TREE_MODEL_FILTER ( + gtk_tree_model_filter_new (GTK_TREE_MODEL (calwin->priv->appointments_model), + NULL)); + gtk_tree_model_filter_set_visible_func ( + *filter, + (GtkTreeModelFilterVisibleFunc) is_for_filter, + calwin, + NULL); + } + + *tree_view = view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (*filter)); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE); + + /* Icon */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_pixbuf_new (); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_set_cell_data_func (column, cell, + (GtkTreeCellDataFunc) set_pixbuf_cell, + NULL, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + + if (show_start) { + /* Start time */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_text_new (); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, + "text", APPOINTMENT_COLUMN_START_TEXT); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + } + + /* Summary */ + column = gtk_tree_view_column_new (); + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + gtk_tree_view_column_pack_start (column, cell, TRUE); + gtk_tree_view_column_add_attribute (column, cell, + "text", APPOINTMENT_COLUMN_SUMMARY); + gtk_tree_view_append_column (GTK_TREE_VIEW (view), column); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); + g_signal_connect (selection, "changed", + G_CALLBACK (calendar_window_tree_selection_changed), + calwin); + + gtk_container_add (GTK_CONTAINER (scrolled), view); + + gtk_widget_show (view); + + return list; +} + +static void +edit_appointments (CalendarWindow *calwin) +{ + clock_launch_calendar_app (calwin, NULL); +} + +static GtkWidget * +create_appointment_list (CalendarWindow *calwin, + GtkWidget **tree_view, + GtkWidget **scrolled_window) +{ + return create_list_for_appointment_model ( + calwin, + _("Appointments"), + &calwin->priv->appointments_filter, + is_appointment, + appointment_pixbuf_cell_data_func, + TRUE, + tree_view, + scrolled_window, + KEY_APPOINTMENTS_EXPANDED, + G_CALLBACK (edit_appointments)); +} + +static void +edit_birthdays (CalendarWindow *calwin) +{ + clock_launch_calendar_app (calwin, NULL); +} + +static GtkWidget * +create_birthday_list (CalendarWindow *calwin, + GtkWidget **tree_view, + GtkWidget **scrolled_window) +{ + /* FIXME: Figure out how to get rid of useless localized message in front of the summary */ + return create_list_for_appointment_model ( + calwin, + _("Birthdays and Anniversaries"), + &calwin->priv->birthdays_filter, + is_birthday, + birthday_pixbuf_cell_data_func, + FALSE, + tree_view, + scrolled_window, + KEY_BIRTHDAYS_EXPANDED, + G_CALLBACK (edit_birthdays)); +} + +static void +edit_weather (CalendarWindow *calwin) +{ + clock_launch_calendar_app (calwin, NULL); +} + + +static GtkWidget * +create_weather_list (CalendarWindow *calwin, + GtkWidget **tree_view, + GtkWidget **scrolled_window) +{ + return create_list_for_appointment_model ( + calwin, + _("Weather Information"), + &calwin->priv->weather_filter, + is_weather, + weather_pixbuf_cell_data_func, + FALSE, + tree_view, + scrolled_window, + KEY_WEATHER_EXPANDED, + G_CALLBACK (edit_weather)); +} + +static void +calendar_window_create_tasks_model (CalendarWindow *calwin) +{ + GType column_types [N_TASK_COLUMNS] = { + G_TYPE_STRING, /* uid */ + G_TYPE_STRING, /* summary */ + G_TYPE_STRING, /* description */ + G_TYPE_INT64, /* start time */ + G_TYPE_INT64, /* due time */ + G_TYPE_UINT, /* percent complete */ + G_TYPE_STRING, /* percent complete text */ + G_TYPE_BOOLEAN, /* completed */ + G_TYPE_INT64, /* completed time */ + PANGO_TYPE_ATTR_LIST, /* summary text attributes */ + G_TYPE_STRING, /* color */ + G_TYPE_INT /* priority */ + }; + + calwin->priv->tasks_model = gtk_list_store_newv (N_TASK_COLUMNS, + column_types); + + gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (calwin->priv->tasks_model), + TASK_COLUMN_PRIORITY, + compare_tasks, + NULL, NULL); + + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (calwin->priv->tasks_model), + TASK_COLUMN_PRIORITY, + GTK_SORT_ASCENDING); + + calwin->priv->tasks_filter = GTK_TREE_MODEL_FILTER ( + gtk_tree_model_filter_new (GTK_TREE_MODEL (calwin->priv->tasks_model), + NULL)); + gtk_tree_model_filter_set_visible_func ( + calwin->priv->tasks_filter, + (GtkTreeModelFilterVisibleFunc) filter_out_tasks, + calwin, + NULL); + gtk_tree_model_filter_set_modify_func ( + calwin->priv->tasks_filter, + N_TASK_COLUMNS, + column_types, + (GtkTreeModelFilterModifyFunc) modify_task_text_attributes, + calwin, + NULL); +} + +static void +calendar_window_create_appointments_model (CalendarWindow *calwin) +{ + calwin->priv->appointments_model = + gtk_list_store_new (N_APPOINTMENT_COLUMNS, + G_TYPE_STRING, /* uid */ + G_TYPE_STRING, /* uri */ + G_TYPE_STRING, /* summary */ + G_TYPE_STRING, /* description */ + G_TYPE_INT64, /* start time */ + G_TYPE_STRING, /* start time text */ + G_TYPE_INT64, /* end time */ + G_TYPE_BOOLEAN, /* all day */ + G_TYPE_STRING); /* color */ + + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (calwin->priv->appointments_model), + APPOINTMENT_COLUMN_START_TIME, + GTK_SORT_ASCENDING); +} + +static void +calendar_day_activated (GtkCalendar *calendar, + CalendarWindow *calwin) +{ + unsigned int day; + unsigned int month; + unsigned int year; + time_t date; + struct tm utc_date_tm; + struct tm local_date_tm = { 0, }; + char *argument; + + gtk_calendar_get_date (calendar, &year, &month, &day); + + local_date_tm.tm_mday = (int) day; + local_date_tm.tm_mon = (int) month; + local_date_tm.tm_year = (int) year - 1900; + local_date_tm.tm_isdst = -1; + + /* convert the local date picked in the calendar to broken-down UTC */ + date = mktime (&local_date_tm); + gmtime_r (&date, &utc_date_tm); + + /* FIXME: once bug 409200 is fixed, we'll have to make this hh:mm:ss + * instead of hhmmss */ + argument = g_strdup_printf ("calendar:///?startdate=" + "%.4d%.2d%.2dT%.2d%.2d%.2dZ", + utc_date_tm.tm_year + 1900, + utc_date_tm.tm_mon + 1, + utc_date_tm.tm_mday, + utc_date_tm.tm_hour, + utc_date_tm.tm_min, + 0); + + clock_launch_calendar_app (calwin, argument); + + g_free (argument); +} + +static void +calendar_day_selected (GtkCalendar *calendar, + CalendarWindow *calwin) +{ + guint day; + + gtk_calendar_get_date (calendar, NULL, NULL, &day); + + calendar_client_select_day (calwin->priv->client, day); + + handle_appointments_changed (calwin); + handle_tasks_changed (calwin); +} + +static void +calendar_month_selected (GtkCalendar *calendar, + CalendarWindow *calwin) +{ + guint year, month; + + gtk_calendar_get_date (calendar, &year, &month, NULL); + + calendar_client_select_month (calwin->priv->client, month, year); + + handle_appointments_changed (calwin); + handle_tasks_changed (calwin); +} + +typedef struct +{ + GtkWidget *calendar; + GtkWidget *tree; +} ConstraintData; + +static void +constrain_list_size (GtkWidget *widget, + GtkRequisition *requisition, + ConstraintData *constraint) +{ + GtkRequisition req; + int screen_h; + int max_height; + + /* constrain width to the calendar width */ + gtk_widget_size_request (constraint->calendar, &req); + requisition->width = MIN (requisition->width, req.width); + + screen_h = gdk_screen_get_height (gtk_widget_get_screen (widget)); + /* constrain height to be the tree height up to a max */ + max_height = (screen_h - req.height) / 3; + gtk_widget_size_request (constraint->tree, &req); + + requisition->height = MIN (req.height, max_height); + requisition->height += 2 * gtk_widget_get_style (widget)->ythickness; +} + +static void +setup_list_size_constraint (GtkWidget *widget, + GtkWidget *calendar, + GtkWidget *tree) +{ + ConstraintData *constraint; + + constraint = g_new0 (ConstraintData, 1); + constraint->calendar = calendar; + constraint->tree = tree; + + g_signal_connect_data (widget, "size-request", + G_CALLBACK (constrain_list_size), constraint, + (GClosureNotify) g_free, 0); +} + +static void +expander_activated (GtkExpander *expander, + CalendarWindow *calwin) +{ + const char *key; + + key = (const gchar*)g_object_get_data (G_OBJECT (expander), "mateconf-key"); + + if (mateconf_client_key_is_writable (calwin->priv->mateconfclient, + key, NULL)) { + mateconf_client_set_bool (calwin->priv->mateconfclient, key, + gtk_expander_get_expanded (expander), + NULL); + } +} + +static void +expanded_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + GtkExpander *expander) +{ + gboolean value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) + return; + + value = mateconf_value_get_bool (entry->value); + + gtk_expander_set_expanded (expander, value); +} + +static void +remove_listener (gpointer data) +{ + MateConfClient *client; + + client = mateconf_client_get_default (); + mateconf_client_notify_remove (client, GPOINTER_TO_UINT (data)); + g_object_unref (client); +} + +static void +connect_expander_with_mateconf (CalendarWindow *calwin, + GtkWidget *expander, + const char *relative_key) +{ + char *key; + gboolean expanded; + guint listener; + + key = g_strdup_printf ("%s/%s", + calwin->priv->prefs_dir, relative_key); + + g_object_set_data_full (G_OBJECT (expander), "mateconf-key", (gpointer)key, g_free); + + expanded = mateconf_client_get_bool (calwin->priv->mateconfclient, key, + NULL); + gtk_expander_set_expanded (GTK_EXPANDER (expander), expanded); + + g_signal_connect_after (expander, "activate", + G_CALLBACK (expander_activated), + calwin); + + listener = mateconf_client_notify_add ( + calwin->priv->mateconfclient, key, + (MateConfClientNotifyFunc) expanded_changed, + expander, NULL, NULL); + + g_object_set_data_full (G_OBJECT (expander), "listener-id", + GUINT_TO_POINTER (listener), remove_listener); +} +#endif /* HAVE_LIBECAL */ + +static void +calendar_window_pack_pim (CalendarWindow *calwin, + GtkWidget *vbox) +{ +#ifdef HAVE_LIBECAL + GtkWidget *list; + GtkWidget *tree_view; + GtkWidget *scrolled_window; + guint year, month, day; + + calendar_window_create_tasks_model (calwin); + calendar_window_create_appointments_model (calwin); + + list = create_task_list (calwin, &tree_view, &scrolled_window); + setup_list_size_constraint (scrolled_window, + calwin->priv->calendar, tree_view); + update_frame_visibility (list, + GTK_TREE_MODEL (calwin->priv->tasks_model)); + calwin->priv->task_list = list; + + list = create_birthday_list (calwin, &tree_view, &scrolled_window); + setup_list_size_constraint (scrolled_window, + calwin->priv->calendar, tree_view); + update_frame_visibility (list, + GTK_TREE_MODEL (calwin->priv->birthdays_filter)); + calwin->priv->birthday_list = list; + + list = create_weather_list (calwin, &tree_view, &scrolled_window); + setup_list_size_constraint (scrolled_window, + calwin->priv->calendar, tree_view); + update_frame_visibility (list, + GTK_TREE_MODEL (calwin->priv->weather_filter)); + calwin->priv->weather_list = list; + + list = create_appointment_list (calwin, &tree_view, &scrolled_window); + setup_list_size_constraint (scrolled_window, + calwin->priv->calendar, tree_view); + update_frame_visibility (list, + GTK_TREE_MODEL (calwin->priv->appointments_filter)); + calwin->priv->appointment_list = list; + + if (!calwin->priv->invert_order) { + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->task_list, + TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->appointment_list, + TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->birthday_list, + TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->weather_list, + TRUE, TRUE, 0); + } else { + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->weather_list, + TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->birthday_list, + TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->appointment_list, + TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->task_list, + TRUE, TRUE, 0); + } + + if (!calwin->priv->client) { + calwin->priv->client = calendar_client_new (); + + g_signal_connect_swapped (calwin->priv->client, + "tasks-changed", + G_CALLBACK (handle_tasks_changed), + calwin); + g_signal_connect_swapped (calwin->priv->client, + "appointments-changed", + G_CALLBACK (handle_appointments_changed), + calwin); + } + + gtk_calendar_get_date (GTK_CALENDAR (calwin->priv->calendar), + &year, &month, &day); + + calendar_client_select_day (calwin->priv->client, day); + calendar_client_select_month (calwin->priv->client, month, year); + + handle_tasks_changed (calwin); + handle_appointments_changed (calwin); + + g_signal_connect (calwin->priv->calendar, + "day-selected-double-click", + G_CALLBACK (calendar_day_activated), + calwin); + g_signal_connect (calwin->priv->calendar, + "day-selected", + G_CALLBACK (calendar_day_selected), + calwin); + g_signal_connect (calwin->priv->calendar, + "month-changed", + G_CALLBACK (calendar_month_selected), + calwin); +#endif /* HAVE_LIBECAL */ +} + +static GtkWidget * +calendar_window_create_calendar (CalendarWindow *calwin) +{ + GtkWidget *calendar; + GtkCalendarDisplayOptions options; + struct tm *tm; + + calendar = gtk_calendar_new (); + options = gtk_calendar_get_display_options (GTK_CALENDAR (calendar)); + if (calwin->priv->show_weeks) + options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS; + else + options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS); + gtk_calendar_set_display_options (GTK_CALENDAR (calendar), options); + + tm = localtime (calwin->priv->current_time); + + gtk_calendar_select_month (GTK_CALENDAR (calendar), + tm->tm_mon, + tm->tm_year + 1900); + gtk_calendar_select_day (GTK_CALENDAR (calendar), tm->tm_mday); + + return calendar; +} + +static void +expand_collapse_child (GtkWidget *child, + gpointer data) +{ + gboolean expanded; + + if (data == child || gtk_widget_is_ancestor (data, child)) + return; + + expanded = gtk_expander_get_expanded (GTK_EXPANDER (data)); + g_object_set (child, "visible", expanded, NULL); +} + +static void +expand_collapse (GtkWidget *expander, + GParamSpec *pspec, + gpointer data) +{ + GtkWidget *box = data; + + gtk_container_foreach (GTK_CONTAINER (box), + (GtkCallback)expand_collapse_child, + expander); +} + +static void add_child (GtkContainer *container, + GtkWidget *child, + GtkExpander *expander) +{ + expand_collapse_child (child, expander); +} + +static GtkWidget * +create_hig_frame (CalendarWindow *calwin, + const char *title, + const char *button_label, + const char *key, + GCallback callback) +{ + GtkWidget *vbox; + GtkWidget *alignment; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *button; + char *bold_title; + char *text; + GtkWidget *expander; + + vbox = gtk_vbox_new (FALSE, 6); + + bold_title = g_strdup_printf ("<b>%s</b>", title); + expander = gtk_expander_new (bold_title); + g_free (bold_title); + gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), expander, FALSE, FALSE, 0); + gtk_widget_show_all (vbox); + + g_signal_connect (expander, "notify::expanded", + G_CALLBACK (expand_collapse), hbox); + g_signal_connect (expander, "notify::expanded", + G_CALLBACK (expand_collapse), vbox); + + /* FIXME: this doesn't really work, since "add" does not + * get emitted for e.g. gtk_box_pack_start + */ + g_signal_connect (vbox, "add", G_CALLBACK (add_child), expander); + g_signal_connect (hbox, "add", G_CALLBACK (add_child), expander); + + if (button_label) { + button = gtk_button_new (); + text = g_markup_printf_escaped ("<small>%s</small>", button_label); + label = gtk_label_new (text); + g_free (text); + gtk_label_set_use_markup (GTK_LABEL (label), TRUE); + gtk_container_add (GTK_CONTAINER (button), label); + + alignment = gtk_alignment_new (1, 0, 0, 0); + gtk_container_add (GTK_CONTAINER (alignment), button); + gtk_widget_show_all (alignment); + + gtk_container_add (GTK_CONTAINER (hbox), alignment); + + g_signal_connect_swapped (button, "clicked", callback, calwin); + } + +#ifdef HAVE_LIBECAL + connect_expander_with_mateconf (calwin, expander, key); +#endif + + return vbox; +} + +static void +edit_locations (CalendarWindow *calwin) +{ + g_signal_emit (calwin, signals[EDIT_LOCATIONS], 0); +} + +static void +calendar_window_pack_locations (CalendarWindow *calwin, GtkWidget *vbox) +{ + calwin->priv->locations_list = create_hig_frame (calwin, + _("Locations"), _("Edit"), + KEY_LOCATIONS_EXPANDED, + G_CALLBACK (edit_locations)); + + /* we show the widget before adding to the container, since adding to + * the container changes the visibility depending on the state of the + * expander */ + gtk_widget_show (calwin->priv->locations_list); + gtk_container_add (GTK_CONTAINER (vbox), calwin->priv->locations_list); + + //gtk_box_pack_start (GTK_BOX (vbox), calwin->priv->locations_list, TRUE, FALSE, 0); +} + +static void +calendar_window_fill (CalendarWindow *calwin) +{ + GtkWidget *frame; + GtkWidget *vbox; + + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); + gtk_container_add (GTK_CONTAINER (calwin), frame); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + calwin->priv->calendar = calendar_window_create_calendar (calwin); + gtk_widget_show (calwin->priv->calendar); + + if (!calwin->priv->invert_order) { + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->calendar, TRUE, FALSE, 0); + calendar_window_pack_pim (calwin, vbox); + calendar_window_pack_locations (calwin, vbox); + } else { + calendar_window_pack_locations (calwin, vbox); + calendar_window_pack_pim (calwin, vbox); + gtk_box_pack_start (GTK_BOX (vbox), + calwin->priv->calendar, TRUE, FALSE, 0); + } +} + +GtkWidget * +calendar_window_get_locations_box (CalendarWindow *calwin) +{ + return calwin->priv->locations_list; +} + +static GObject * +calendar_window_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + GObject *obj; + CalendarWindow *calwin; + + obj = G_OBJECT_CLASS (calendar_window_parent_class)->constructor (type, + n_construct_properties, + construct_properties); + + calwin = CALENDAR_WINDOW (obj); + + g_assert (calwin->priv->current_time != NULL); + g_assert (calwin->priv->prefs_dir != NULL); + + calendar_window_fill (calwin); + + return obj; +} + +static void +calendar_window_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + CalendarWindow *calwin; + + g_return_if_fail (CALENDAR_IS_WINDOW (object)); + + calwin = CALENDAR_WINDOW (object); + + switch (prop_id) { + case PROP_INVERTORDER: + g_value_set_boolean (value, + calendar_window_get_invert_order (calwin)); + break; + case PROP_SHOWWEEKS: + g_value_set_boolean (value, + calendar_window_get_show_weeks (calwin)); + break; +#ifdef HAVE_LIBECAL + case PROP_TIMEFORMAT: + g_value_set_enum (value, + calendar_window_get_time_format (calwin)); + break; +#endif + case PROP_CURRENTTIMEP: + g_value_set_pointer (value, + calendar_window_get_current_time_p (calwin)); + break; + case PROP_PREFSDIR: + g_value_set_string (value, + calendar_window_get_prefs_dir (calwin)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +calendar_window_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + CalendarWindow *calwin; + + g_return_if_fail (CALENDAR_IS_WINDOW (object)); + + calwin = CALENDAR_WINDOW (object); + + switch (prop_id) { + case PROP_INVERTORDER: + calendar_window_set_invert_order (calwin, + g_value_get_boolean (value)); + break; + case PROP_SHOWWEEKS: + calendar_window_set_show_weeks (calwin, + g_value_get_boolean (value)); + break; +#ifdef HAVE_LIBECAL + case PROP_TIMEFORMAT: + calendar_window_set_time_format (calwin, + g_value_get_enum (value)); + break; +#endif + case PROP_CURRENTTIMEP: + calendar_window_set_current_time_p (calwin, + g_value_get_pointer (value)); + break; + case PROP_PREFSDIR: + calendar_window_set_prefs_dir (calwin, + g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +calendar_window_destroy (GtkObject *object) +{ +#ifdef HAVE_LIBECAL + CalendarWindow *calwin; + + calwin = CALENDAR_WINDOW (object); + + if (calwin->priv->client) + g_object_unref (calwin->priv->client); + calwin->priv->client = NULL; + + if (calwin->priv->appointments_model) + g_object_unref (calwin->priv->appointments_model); + calwin->priv->appointments_model = NULL; + + if (calwin->priv->tasks_model) + g_object_unref (calwin->priv->tasks_model); + calwin->priv->tasks_model = NULL; + + if (calwin->priv->appointments_filter) + g_object_unref (calwin->priv->appointments_filter); + calwin->priv->appointments_filter = NULL; + + if (calwin->priv->birthdays_filter) + g_object_unref (calwin->priv->birthdays_filter); + calwin->priv->birthdays_filter = NULL; + + if (calwin->priv->tasks_filter) + g_object_unref (calwin->priv->tasks_filter); + calwin->priv->tasks_filter = NULL; + + if (calwin->priv->weather_filter) + g_object_unref (calwin->priv->weather_filter); + calwin->priv->weather_filter = NULL; + + if (calwin->priv->mateconfclient) + g_object_unref (calwin->priv->mateconfclient); + calwin->priv->mateconfclient = NULL; +#endif /* HAVE_LIBECAL */ + + GTK_OBJECT_CLASS (calendar_window_parent_class)->destroy (object); +} + +static void +calendar_window_class_init (CalendarWindowClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass); + + gobject_class->constructor = calendar_window_constructor; + gobject_class->get_property = calendar_window_get_property; + gobject_class->set_property = calendar_window_set_property; + + gtkobject_class->destroy = calendar_window_destroy; + + g_type_class_add_private (klass, sizeof (CalendarWindowPrivate)); + + signals[EDIT_LOCATIONS] = g_signal_new ("edit-locations", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (CalendarWindowClass, edit_locations), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + g_object_class_install_property ( + gobject_class, + PROP_INVERTORDER, + g_param_spec_boolean ("invert-order", + "Invert Order", + "Invert order of the calendar and tree views", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property ( + gobject_class, + PROP_SHOWWEEKS, + g_param_spec_boolean ("show-weeks", + "Show Weeks", + "Show weeks in the calendar", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + +#ifdef HAVE_LIBECAL + g_object_class_install_property ( + gobject_class, + PROP_TIMEFORMAT, + g_param_spec_enum ("time-format", + "Time Format", + "Time format used to display time", + CLOCK_TYPE_FORMAT, + clock_locale_format (), + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); +#endif + + g_object_class_install_property ( + gobject_class, + PROP_CURRENTTIMEP, + g_param_spec_pointer ("current-time", + "Current Time", + "Pointer to a variable containing the current time", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property ( + gobject_class, + PROP_PREFSDIR, + g_param_spec_string ("prefs-dir", + "Preferences Directory", + "Preferences directory in MateConf", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); +} + +static void +calendar_window_init (CalendarWindow *calwin) +{ + GtkWindow *window; + + calwin->priv = CALENDAR_WINDOW_GET_PRIVATE (calwin); + + window = GTK_WINDOW (calwin); + gtk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DOCK); + gtk_window_set_decorated (window, FALSE); + gtk_window_set_resizable (window, FALSE); + gtk_window_stick (window); + gtk_window_set_title (window, _("Calendar")); + gtk_window_set_icon_name (window, CLOCK_ICON); + +#ifdef HAVE_LIBECAL + calwin->priv->previous_selection = NULL; + calwin->priv->mateconfclient = mateconf_client_get_default (); +#endif +} + +GtkWidget * +calendar_window_new (time_t *static_current_time, + const char *prefs_dir, + gboolean invert_order) +{ + CalendarWindow *calwin; + + calwin = g_object_new (CALENDAR_TYPE_WINDOW, + "type", GTK_WINDOW_TOPLEVEL, + "current-time", static_current_time, + "invert-order", invert_order, + "prefs-dir", prefs_dir, + NULL); + + return GTK_WIDGET (calwin); +} + +void +calendar_window_refresh (CalendarWindow *calwin) +{ + g_return_if_fail (CALENDAR_IS_WINDOW (calwin)); + +#ifdef HAVE_LIBECAL + if (calwin->priv->appointments_filter && calwin->priv->appointment_list) + gtk_tree_model_filter_refilter (calwin->priv->appointments_filter); + if (calwin->priv->birthdays_filter && calwin->priv->birthday_list) + gtk_tree_model_filter_refilter (calwin->priv->birthdays_filter); + if (calwin->priv->tasks_filter && calwin->priv->task_list) + gtk_tree_model_filter_refilter (calwin->priv->tasks_filter); + if (calwin->priv->weather_filter && calwin->priv->weather_list) + gtk_tree_model_filter_refilter (calwin->priv->weather_filter); +#endif +} + +gboolean +calendar_window_get_invert_order (CalendarWindow *calwin) +{ + g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), FALSE); + + return calwin->priv->invert_order; +} + +void +calendar_window_set_invert_order (CalendarWindow *calwin, + gboolean invert_order) +{ + g_return_if_fail (CALENDAR_IS_WINDOW (calwin)); + + if (invert_order == calwin->priv->invert_order) + return; + + calwin->priv->invert_order = invert_order; + //FIXME: update the order of the content of the window + + g_object_notify (G_OBJECT (calwin), "invert-order"); +} + +gboolean +calendar_window_get_show_weeks (CalendarWindow *calwin) +{ + g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), FALSE); + + return calwin->priv->show_weeks; +} + +void +calendar_window_set_show_weeks (CalendarWindow *calwin, + gboolean show_weeks) +{ + GtkCalendarDisplayOptions options; + + g_return_if_fail (CALENDAR_IS_WINDOW (calwin)); + + if (show_weeks == calwin->priv->show_weeks) + return; + + calwin->priv->show_weeks = show_weeks; + + if (calwin->priv->calendar) { + options = gtk_calendar_get_display_options (GTK_CALENDAR (calwin->priv->calendar)); + + if (show_weeks) + options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS; + else + options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS); + + gtk_calendar_set_display_options (GTK_CALENDAR (calwin->priv->calendar), + options); + } + + g_object_notify (G_OBJECT (calwin), "show-weeks"); +} + +ClockFormat +calendar_window_get_time_format (CalendarWindow *calwin) +{ + g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), + CLOCK_FORMAT_INVALID); + +#ifdef HAVE_LIBECAL + return calwin->priv->time_format; +#else + return CLOCK_FORMAT_INVALID; +#endif +} + +void +calendar_window_set_time_format (CalendarWindow *calwin, + ClockFormat time_format) +{ + g_return_if_fail (CALENDAR_IS_WINDOW (calwin)); + +#ifdef HAVE_LIBECAL + if (time_format != CLOCK_FORMAT_12 && time_format != CLOCK_FORMAT_24) + time_format = clock_locale_format (); + + if (time_format == calwin->priv->time_format) + return; + + calwin->priv->time_format = time_format; + /* Time to display for appointments has changed */ + if (calwin->priv->appointments_model) + handle_appointments_changed (calwin); + + g_object_notify (G_OBJECT (calwin), "time-format"); +#endif +} + +static time_t * +calendar_window_get_current_time_p (CalendarWindow *calwin) +{ + g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), NULL); + + return calwin->priv->current_time; +} + +static void +calendar_window_set_current_time_p (CalendarWindow *calwin, + time_t *current_time) +{ + g_return_if_fail (CALENDAR_IS_WINDOW (calwin)); + + if (current_time == calwin->priv->current_time) + return; + + calwin->priv->current_time = current_time; + + g_object_notify (G_OBJECT (calwin), "current-time"); +} + +static const char * +calendar_window_get_prefs_dir (CalendarWindow *calwin) +{ + g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), NULL); + + return calwin->priv->prefs_dir; +} + +static void +calendar_window_set_prefs_dir (CalendarWindow *calwin, + const char *prefs_dir) +{ + g_return_if_fail (CALENDAR_IS_WINDOW (calwin)); + + if (!calwin->priv->prefs_dir && (!prefs_dir || !prefs_dir [0])) + return; + + if (calwin->priv->prefs_dir && prefs_dir && prefs_dir [0] && + !strcmp (calwin->priv->prefs_dir, prefs_dir)) + return; + + if (calwin->priv->prefs_dir) + g_free (calwin->priv->prefs_dir); + calwin->priv->prefs_dir = NULL; + + if (prefs_dir && prefs_dir [0]) + calwin->priv->prefs_dir = g_strdup (prefs_dir); + + g_object_notify (G_OBJECT (calwin), "prefs-dir"); +} diff --git a/applets/clock/calendar-window.h b/applets/clock/calendar-window.h new file mode 100644 index 00000000..0b0546c8 --- /dev/null +++ b/applets/clock/calendar-window.h @@ -0,0 +1,84 @@ +/* + * calendar-window.h: toplevel window containing a calendar and + * tasks/appointments + * + * Copyright (C) 2007 Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Vincent Untz <[email protected]> + * + * Most of the original code comes from clock.c + */ + +#ifndef CALENDAR_WINDOW_H +#define CALENDAR_WINDOW_H + +#include <gtk/gtk.h> +#include "clock-utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define CALENDAR_TYPE_WINDOW (calendar_window_get_type ()) +#define CALENDAR_WINDOW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_WINDOW, CalendarWindow)) +#define CALENDAR_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CALENDAR_TYPE_WINDOW, CalendarWindowClass)) +#define CALENDAR_IS_WINDOW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_WINDOW)) +#define CALENDAR_IS_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_WINDOW)) +#define CALENDAR_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_WINDOW, CalendarWindowClass)) + +typedef struct _CalendarWindow CalendarWindow; +typedef struct _CalendarWindowClass CalendarWindowClass; +typedef struct _CalendarWindowPrivate CalendarWindowPrivate; + +struct _CalendarWindow { + GtkWindow parent_instance; + + CalendarWindowPrivate *priv; +}; + +struct _CalendarWindowClass { + GtkWindowClass parent_class; + + void (* edit_locations) (CalendarWindow *calwin); +}; + +GType calendar_window_get_type (void) G_GNUC_CONST; +GtkWidget *calendar_window_new (time_t *static_current_time, + const char *prefs_dir, + gboolean invert_order); + +void calendar_window_refresh (CalendarWindow *calwin); + +GtkWidget *calendar_window_get_locations_box (CalendarWindow *calwin); + +gboolean calendar_window_get_invert_order (CalendarWindow *calwin); +void calendar_window_set_invert_order (CalendarWindow *calwin, + gboolean invert_order); +gboolean calendar_window_get_show_weeks (CalendarWindow *calwin); +void calendar_window_set_show_weeks (CalendarWindow *calwin, + gboolean show_weeks); +ClockFormat calendar_window_get_time_format (CalendarWindow *calwin); +void calendar_window_set_time_format (CalendarWindow *calwin, + ClockFormat time_format); + +#ifdef __cplusplus +} +#endif + +#endif /* CALENDAR_WINDOW_H */ diff --git a/applets/clock/clock-face.c b/applets/clock/clock-face.c new file mode 100644 index 00000000..53f0e4f4 --- /dev/null +++ b/applets/clock/clock-face.c @@ -0,0 +1,462 @@ +/** + * clock.c + * + * A GTK+ widget that implements a clock face + * + * (c) 2007, Peter Teichman + * (c) 2005-2006, Davyd Madeley + * + * Authors: + * Davyd Madeley <[email protected]> + * Peter Teichman <[email protected]> + */ + +#include <gtk/gtk.h> +#include <math.h> +#include <time.h> + +#include <librsvg/rsvg.h> + +#include "clock-face.h" +#include "clock-location.h" + +static GHashTable *pixbuf_cache = NULL; + +#define CLOCK_FACE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), INTL_TYPE_CLOCK_FACE, ClockFacePrivate)) + +G_DEFINE_TYPE (ClockFace, clock_face, GTK_TYPE_WIDGET) + +static void clock_face_finalize (GObject *); +static gboolean clock_face_expose (GtkWidget *clock, GdkEventExpose *event); +static void clock_face_size_request (GtkWidget *clock, + GtkRequisition *requisition); +static void clock_face_size_allocate (GtkWidget *clock, + GtkAllocation *allocation); + +static void update_time_and_face (ClockFace *this, + gboolean force_face_loading); +static void clock_face_load_face (ClockFace *this, + gint width, gint height); + +typedef struct _ClockFacePrivate ClockFacePrivate; + +typedef enum { + CLOCK_FACE_MORNING, + CLOCK_FACE_DAY, + CLOCK_FACE_EVENING, + CLOCK_FACE_NIGHT, + CLOCK_FACE_INVALID +} ClockFaceTimeOfDay; + +struct _ClockFacePrivate +{ + struct tm time; /* the time on the clock face */ + int minute_offset; /* the offset of the minutes hand */ + + ClockFaceSize size; + ClockFaceTimeOfDay timeofday; + ClockLocation *location; + GdkPixbuf *face_pixbuf; + GtkWidget *size_widget; +}; + +static void +clock_face_class_init (ClockFaceClass *class) +{ + GObjectClass *obj_class; + GtkWidgetClass *widget_class; + + obj_class = G_OBJECT_CLASS (class); + widget_class = GTK_WIDGET_CLASS (class); + + /* GtkWidget signals */ + widget_class->expose_event = clock_face_expose; + widget_class->size_request = clock_face_size_request; + widget_class->size_allocate = clock_face_size_allocate; + + /* GObject signals */ + obj_class->finalize = clock_face_finalize; + + g_type_class_add_private (obj_class, sizeof (ClockFacePrivate)); +} + +static void +clock_face_init (ClockFace *this) +{ + ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this); + + priv->size = CLOCK_FACE_SMALL; + priv->timeofday = CLOCK_FACE_INVALID; + priv->location = NULL; + priv->size_widget = NULL; + + gtk_widget_set_has_window (GTK_WIDGET (this), FALSE); +} + +static void +draw (GtkWidget *this, cairo_t *cr) +{ + ClockFacePrivate *priv; + GtkAllocation allocation; + double x, y; + double radius; + int hours, minutes, seconds; + + /* Hand lengths as a multiple of the clock radius */ + double hour_length, min_length, sec_length; + + priv = CLOCK_FACE_GET_PRIVATE (this); + + if (priv->size == CLOCK_FACE_LARGE) { + hour_length = 0.45; + min_length = 0.6; + sec_length = 0.65; + } else { + hour_length = 0.5; + min_length = 0.7; + sec_length = 0.8; /* not drawn currently */ + } + + gtk_widget_get_allocation (this, &allocation); + + x = allocation.x + allocation.width / 2; + y = allocation.y + allocation.height / 2; + radius = MIN (allocation.width / 2, + allocation.height / 2) - 5; + + cairo_save (cr); + cairo_translate (cr, allocation.x, allocation.y); + + /* clock back */ + if (priv->face_pixbuf) { + GdkWindow *window = gtk_widget_get_window (this); + gdk_draw_pixbuf (GDK_DRAWABLE (window), + NULL, + priv->face_pixbuf, + 0, 0, + allocation.x, + allocation.y, + allocation.width, + allocation.height, + GDK_RGB_DITHER_NONE, 0, 0); + } + + cairo_restore (cr); + + /* clock hands */ + hours = priv->time.tm_hour; + minutes = priv->time.tm_min + priv->minute_offset; + seconds = priv->time.tm_sec; + + cairo_set_line_width (cr, 1); + + /* hour hand: + * the hour hand is rotated 30 degrees (pi/6 r) per hour + + * 1/2 a degree (pi/360 r) per minute + */ + cairo_save (cr); + cairo_move_to (cr, x, y); + cairo_line_to (cr, x + radius * hour_length * sin (M_PI / 6 * hours + + M_PI / 360 * minutes), + y + radius * hour_length * -cos (M_PI / 6 * hours + + M_PI / 360 * minutes)); + cairo_stroke (cr); + cairo_restore (cr); + /* minute hand: + * the minute hand is rotated 6 degrees (pi/30 r) per minute + */ + cairo_move_to (cr, x, y); + cairo_line_to (cr, x + radius * min_length * sin (M_PI / 30 * minutes), + y + radius * min_length * -cos (M_PI / 30 * minutes)); + cairo_stroke (cr); + + /* seconds hand: + * operates identically to the minute hand + */ + if (priv->size == CLOCK_FACE_LARGE) { + cairo_save (cr); + cairo_set_source_rgb (cr, 0.937, 0.161, 0.161); /* tango red */ + cairo_move_to (cr, x, y); + cairo_line_to (cr, x + radius * sec_length * sin (M_PI / 30 * seconds), + y + radius * sec_length * -cos (M_PI / 30 * seconds)); + cairo_stroke (cr); + cairo_restore (cr); + } +} + +static gboolean +clock_face_expose (GtkWidget *this, GdkEventExpose *event) +{ + cairo_t *cr; + + /* get a cairo_t */ + cr = gdk_cairo_create (gtk_widget_get_window (this)); + + cairo_rectangle (cr, + event->area.x, event->area.y, + event->area.width, event->area.height); + cairo_clip (cr); + + draw (this, cr); + + cairo_destroy (cr); + + return FALSE; +} + +static void +clock_face_redraw_canvas (ClockFace *this) +{ + gtk_widget_queue_draw (GTK_WIDGET (this)); +} + +static void +clock_face_size_request (GtkWidget *this, + GtkRequisition *requisition) +{ + ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this); + + if (priv->size_widget != NULL) { + GtkRequisition req; + + /* Tie our size to the height of the size_widget */ + gtk_widget_size_request (GTK_WIDGET (priv->size_widget), &req); + + /* Pad out our height by a little bit - this improves + the balance */ + requisition->width = req.height + req.height / 8; + requisition->height = req.height + req.height / 8; + } else if (priv->face_pixbuf != NULL) { + int w, h; + + /* Use the size of the current pixbuf */ + w = gdk_pixbuf_get_width (GDK_PIXBUF (priv->face_pixbuf)); + h = gdk_pixbuf_get_height (GDK_PIXBUF (priv->face_pixbuf)); + + requisition->width = w; + requisition->height = h; + } else { + /* we don't know anything, so use known dimensions for the svg + * files */ + if (priv->size == CLOCK_FACE_LARGE) { + requisition->width = 50; + requisition->height = 50; + } else { + requisition->width = 36; + requisition->height = 36; + } + } +} + +static void +clock_face_size_allocate (GtkWidget *this, + GtkAllocation *allocation) +{ + GtkAllocation this_allocation; + GtkAllocation old_allocation; + + gtk_widget_get_allocation (this, &this_allocation); + + old_allocation.width = this_allocation.width; + old_allocation.height = this_allocation.height; + + if (GTK_WIDGET_CLASS (clock_face_parent_class)->size_allocate) + GTK_WIDGET_CLASS (clock_face_parent_class)->size_allocate (this, allocation); + + if (old_allocation.width == allocation->width && + old_allocation.height == allocation->height) + return; + + /* Reload the face for the new size */ + update_time_and_face (CLOCK_FACE (this), TRUE); +} + +static void +update_time_and_face (ClockFace *this, + gboolean force_face_loading) +{ + ClockFacePrivate *priv; + ClockFaceTimeOfDay timeofday; + + priv = CLOCK_FACE_GET_PRIVATE (this); + + /* update the time */ + if (priv->location) { + clock_location_localtime (priv->location, &priv->time); + } else { + time_t timet; + time (&timet); + localtime_r (&timet, &priv->time); + } + + /* FIXME this should be a mateconf setting + * Or we could use some code from clock-sun.c? + * currently we hardcode + * morning 7-9 + * day 9-17 + * evening 17-22 + * night 22-7 + */ + if (priv->time.tm_hour < 7) + timeofday = CLOCK_FACE_NIGHT; + else if (priv->time.tm_hour < 9) + timeofday = CLOCK_FACE_MORNING; + else if (priv->time.tm_hour < 17) + timeofday = CLOCK_FACE_DAY; + else if (priv->time.tm_hour < 22) + timeofday = CLOCK_FACE_EVENING; + else + timeofday = CLOCK_FACE_NIGHT; + + if (priv->timeofday != timeofday || force_face_loading) { + GtkAllocation allocation; + gint width, height; + + priv->timeofday = timeofday; + + gtk_widget_get_allocation (GTK_WIDGET (this), &allocation); + + width = allocation.width; + height = allocation.height; + + /* Only load the pixbuf if we have some space allocated. + * Note that 1x1 is not really some space... */ + if (width > 1 && height > 1) + clock_face_load_face (this, width, height); + } +} + +gboolean +clock_face_refresh (ClockFace *this) +{ + update_time_and_face (this, FALSE); + clock_face_redraw_canvas (this); + + return TRUE; /* keep running this event */ +} + +GtkWidget * +clock_face_new (ClockFaceSize size) +{ + GObject *obj = g_object_new (INTL_TYPE_CLOCK_FACE, NULL); + ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj); + + priv->size = size; + + return GTK_WIDGET (obj); +} + +GtkWidget * +clock_face_new_with_location (ClockFaceSize size, + ClockLocation *loc, + GtkWidget *size_widget) +{ + GObject *obj = g_object_new (INTL_TYPE_CLOCK_FACE, NULL); + ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj); + + priv->size = size; + priv->location = g_object_ref (loc); + priv->size_widget = g_object_ref (size_widget); + + return GTK_WIDGET (obj); +} + +static void +clock_face_finalize (GObject *obj) +{ + ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj); + + if (priv->location) { + g_object_unref (priv->location); + priv->location = NULL; + } + + if (priv->face_pixbuf) { + g_object_unref (priv->face_pixbuf); + priv->face_pixbuf = NULL; + } + + if (priv->size_widget) { + g_object_unref (priv->size_widget); + priv->size_widget = NULL; + } + + G_OBJECT_CLASS (clock_face_parent_class)->finalize (obj); + + if (pixbuf_cache && g_hash_table_size (pixbuf_cache) == 0) { + g_hash_table_destroy (pixbuf_cache); + pixbuf_cache = NULL; + } +} + +/* The pixbuf is being disposed, so remove it from the cache */ +static void +remove_pixbuf_from_cache (const char *key, + GObject *pixbuf) +{ + g_hash_table_remove (pixbuf_cache, key); +} + +static void +clock_face_load_face (ClockFace *this, gint width, gint height) +{ + ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this); + const gchar *size_string[2] = { "small", "large" }; + const gchar *daytime_string[4] = { "morning", "day", "evening", "night" }; + gchar *cache_name; + gchar *name; + + if (!pixbuf_cache) + pixbuf_cache = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, NULL); + + if (priv->face_pixbuf != NULL) { + /* This might empty the cache, but it's useless to destroy + * it since this object is still alive and might add another + * pixbuf in the cache later (eg, a few lines below) */ + g_object_unref (priv->face_pixbuf); + priv->face_pixbuf = NULL; + } + + /* Look for the pixbuf in the process-wide cache first */ + cache_name = g_strdup_printf ("%d-%d-%d-%d", + priv->size, priv->timeofday, + width, height); + + priv->face_pixbuf = g_hash_table_lookup (pixbuf_cache, cache_name); + if (priv->face_pixbuf) { + g_object_ref (priv->face_pixbuf); + return; + } + + /* The pixbuf is not cached, let's load it */ + name = g_strconcat (ICONDIR, "/clock-face-", size_string[priv->size], + "-", daytime_string[priv->timeofday], ".svg", + NULL); + priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name, + width, height, + NULL); + g_free (name); + + if (!priv->face_pixbuf) { + name = g_strconcat (ICONDIR, "/clock-face-", + size_string[priv->size], ".svg", NULL); + priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name, + width, + height, + NULL); + g_free (name); + } + + /* Save the found pixbuf in the cache */ + if (priv->face_pixbuf) { + g_hash_table_replace (pixbuf_cache, + cache_name, priv->face_pixbuf); + /* This will handle automatic removal from the cache when + * the pixbuf isn't needed anymore */ + g_object_weak_ref (G_OBJECT (priv->face_pixbuf), + (GWeakNotify) remove_pixbuf_from_cache, + cache_name); + } else + g_free (cache_name); +} diff --git a/applets/clock/clock-face.h b/applets/clock/clock-face.h new file mode 100644 index 00000000..3c665c63 --- /dev/null +++ b/applets/clock/clock-face.h @@ -0,0 +1,64 @@ +/** + * clock.h + * + * A GTK+ widget that implements a clock face + * + * (c) 2007, Peter Teichman + * (c) 2005-2006, Davyd Madeley + * + * Authors: + * Davyd Madeley <[email protected]> + * Peter Teichman <[email protected]> + */ + +#ifndef __INTL_CLOCK_FACE_H__ +#define __INTL_CLOCK_FACE_H__ + +#include <gtk/gtk.h> +#include "clock-location.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define INTL_TYPE_CLOCK_FACE (clock_face_get_type ()) +#define CLOCK_FACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INTL_TYPE_CLOCK_FACE, ClockFace)) +#define CLOCK_FACE_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), INTL_CLOCK_FACE, ClockFaceClass)) +#define INTL_IS_CLOCK_FACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INTL_TYPE_CLOCK_FACE)) +#define INTL_IS_CLOCK_FACE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), INTL_TYPE_CLOCK_FACE)) +#define CLOCK_FACE_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), INTL_TYPE_CLOCK_FACE, ClockFaceClass)) + +typedef struct _ClockFace ClockFace; +typedef struct _ClockFaceClass ClockFaceClass; + +struct _ClockFace +{ + GtkWidget parent; + + /* < private > */ +}; + +struct _ClockFaceClass +{ + GtkWidgetClass parent_class; +}; + +typedef enum { + CLOCK_FACE_SMALL, + CLOCK_FACE_LARGE +} ClockFaceSize; + +GType clock_face_get_type (void); + +GtkWidget *clock_face_new (ClockFaceSize size); +GtkWidget *clock_face_new_with_location (ClockFaceSize size, + ClockLocation *loc, + GtkWidget *size_widget); +gboolean clock_face_refresh (ClockFace *this); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/applets/clock/clock-location-tile.c b/applets/clock/clock-location-tile.c new file mode 100644 index 00000000..a6f6a4ce --- /dev/null +++ b/applets/clock/clock-location-tile.c @@ -0,0 +1,728 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <string.h> +#include <stdlib.h> + +#include <glib/gi18n.h> +#include <gtk/gtk.h> +#include <gdk/gdkx.h> + +#include "clock.h" +#include "clock-face.h" +#include "clock-location-tile.h" +#include "clock-location.h" +#include "clock-utils.h" +#include "clock-marshallers.h" +#include "set-timezone.h" + +G_DEFINE_TYPE (ClockLocationTile, clock_location_tile, GTK_TYPE_ALIGNMENT) + +enum { + TILE_PRESSED, + NEED_CLOCK_FORMAT, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; + +typedef struct { + ClockLocation *location; + + struct tm last_refresh; + long last_offset; + + ClockFaceSize size; + + GtkWidget *box; + GtkWidget *clock_face; + GtkWidget *city_label; + GtkWidget *time_label; + + GtkWidget *current_button; + GtkWidget *current_label; + GtkWidget *current_marker; + GtkWidget *current_spacer; + GtkSizeGroup *current_group; + GtkSizeGroup *button_group; + + GtkWidget *weather_icon; + + gulong location_weather_updated_id; +} ClockLocationTilePrivate; + +static void clock_location_tile_finalize (GObject *); + +#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTilePrivate)) + +static void clock_location_tile_fill (ClockLocationTile *this); +static void update_weather_icon (ClockLocation *loc, WeatherInfo *info, gpointer data); +static gboolean weather_tooltip (GtkWidget *widget, + gint x, gint y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + gpointer data); + +ClockLocationTile * +clock_location_tile_new (ClockLocation *loc, + ClockFaceSize size) +{ + ClockLocationTile *this; + ClockLocationTilePrivate *priv; + + this = g_object_new (CLOCK_LOCATION_TILE_TYPE, NULL); + priv = PRIVATE (this); + + priv->location = g_object_ref (loc); + priv->size = size; + + clock_location_tile_fill (this); + + update_weather_icon (loc, clock_location_get_weather_info (loc), this); + gtk_widget_set_has_tooltip (priv->weather_icon, TRUE); + + g_signal_connect (priv->weather_icon, "query-tooltip", + G_CALLBACK (weather_tooltip), this); + priv->location_weather_updated_id = g_signal_connect (G_OBJECT (loc), "weather-updated", + G_CALLBACK (update_weather_icon), this); + + return this; +} + +static void +clock_location_tile_class_init (ClockLocationTileClass *this_class) +{ + GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class); + + g_obj_class->finalize = clock_location_tile_finalize; + + g_type_class_add_private (this_class, sizeof (ClockLocationTilePrivate)); + + signals[TILE_PRESSED] = g_signal_new ("tile-pressed", + G_TYPE_FROM_CLASS (g_obj_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (ClockLocationTileClass, tile_pressed), + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + signals[NEED_CLOCK_FORMAT] = g_signal_new ("need-clock-format", + G_TYPE_FROM_CLASS (g_obj_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ClockLocationTileClass, need_clock_format), + NULL, + NULL, + _clock_marshal_INT__VOID, + G_TYPE_INT, 0); +} + +static void +clock_location_tile_init (ClockLocationTile *this) +{ + ClockLocationTilePrivate *priv = PRIVATE (this); + + priv->location = NULL; + + memset (&(priv->last_refresh), 0, sizeof (struct tm)); + priv->last_offset = 0; + + priv->size = CLOCK_FACE_SMALL; + + priv->clock_face = NULL; + priv->city_label = NULL; + priv->time_label = NULL; +} + +static void +clock_location_tile_finalize (GObject *g_obj) +{ + ClockLocationTilePrivate *priv = PRIVATE (g_obj); + + if (priv->location) { + g_signal_handler_disconnect (priv->location, priv->location_weather_updated_id); + priv->location_weather_updated_id = 0; + + g_object_unref (priv->location); + priv->location = NULL; + } + + if (priv->button_group) { + g_object_unref (priv->button_group); + priv->button_group = NULL; + } + + if (priv->current_group) { + g_object_unref (priv->current_group); + priv->current_group = NULL; + } + + G_OBJECT_CLASS (clock_location_tile_parent_class)->finalize (g_obj); +} + +static gboolean +press_on_tile (GtkWidget *widget, + GdkEventButton *event, + ClockLocationTile *tile) +{ + g_signal_emit (tile, signals[TILE_PRESSED], 0); + + return TRUE; +} + +static void +make_current_cb (gpointer data, GError *error) +{ + GtkWidget *dialog; + + if (error) { + dialog = gtk_message_dialog_new (NULL, + 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("Failed to set the system timezone")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_widget_destroy), NULL); + gtk_window_present (GTK_WINDOW (dialog)); + + g_error_free (error); + } +} + +static void +make_current (GtkWidget *widget, ClockLocationTile *tile) +{ + ClockLocationTilePrivate *priv = PRIVATE (tile); + GtkWidget *toplevel; + guint xid; + + xid = 0; + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tile)); + + if (toplevel) { + GdkWindow *window = gtk_widget_get_window (toplevel); + + if (window) + xid = GDK_WINDOW_XWINDOW (window); + } + + clock_location_make_current (priv->location, + xid, + (GFunc)make_current_cb, tile, NULL); +} + +static gboolean +enter_or_leave_tile (GtkWidget *widget, + GdkEventCrossing *event, + ClockLocationTile *tile) +{ + ClockLocationTilePrivate *priv = PRIVATE (tile); + + if (event->mode != GDK_CROSSING_NORMAL) { + return TRUE; + } + + if (clock_location_is_current (priv->location)) { + gtk_widget_hide (priv->current_button); + gtk_widget_hide (priv->current_spacer); + gtk_widget_show (priv->current_marker); + + return TRUE; + } + + if (event->type == GDK_ENTER_NOTIFY) { + gint can_set; + + if (clock_location_is_current_timezone (priv->location)) + can_set = 2; + else + can_set = can_set_system_timezone (); + if (can_set != 0) { + gtk_label_set_markup (GTK_LABEL (priv->current_label), + can_set == 1 ? + _("<small>Set...</small>") : + _("<small>Set</small>")); + gtk_widget_hide (priv->current_spacer); + gtk_widget_hide (priv->current_marker); + gtk_widget_show (priv->current_button); + } + else { + gtk_widget_hide (priv->current_marker); + gtk_widget_hide (priv->current_button); + gtk_widget_show (priv->current_spacer); + } + } + else { + if (event->detail != GDK_NOTIFY_INFERIOR) { + gtk_widget_hide (priv->current_button); + gtk_widget_hide (priv->current_marker); + gtk_widget_show (priv->current_spacer); + } + } + + return TRUE; +} + +static void +clock_location_tile_fill (ClockLocationTile *this) +{ + ClockLocationTilePrivate *priv = PRIVATE (this); + GtkWidget *align; + GtkWidget *strut; + GtkWidget *box; + GtkWidget *alignment; + GtkWidget *tile; + GtkWidget *head_section; + + priv->box = gtk_event_box_new (); + + gtk_widget_add_events (priv->box, GDK_BUTTON_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); + g_signal_connect (priv->box, "button-press-event", + G_CALLBACK (press_on_tile), this); + g_signal_connect (priv->box, "enter-notify-event", + G_CALLBACK (enter_or_leave_tile), this); + g_signal_connect (priv->box, "leave-notify-event", + G_CALLBACK (enter_or_leave_tile), this); + + alignment = gtk_alignment_new (0, 0, 1, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 3, 3, 3, 0); + + tile = gtk_hbox_new (FALSE, 6); + head_section = gtk_vbox_new (FALSE, 0); + + priv->city_label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (priv->city_label), 0, 0); + + align = gtk_alignment_new (0, 0, 0, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, 0, 3); + gtk_container_add (GTK_CONTAINER (align), priv->city_label); + gtk_box_pack_start (GTK_BOX (head_section), align, FALSE, FALSE, 0); + + priv->time_label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (priv->time_label), 0, 0); + + priv->weather_icon = gtk_image_new (); + align = gtk_alignment_new (0, 0, 0, 0); + gtk_container_add (GTK_CONTAINER (align), priv->weather_icon); + + box = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (head_section), box, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), align, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), priv->time_label, FALSE, FALSE, 0); + + priv->current_button = gtk_button_new (); + /* The correct label is set on EnterNotify events */ + priv->current_label = gtk_label_new (""); + gtk_widget_show (priv->current_label); + gtk_widget_set_no_show_all (priv->current_button, TRUE); + gtk_container_add (GTK_CONTAINER (priv->current_button), priv->current_label); + gtk_widget_set_tooltip_text (priv->current_button, + _("Set location as current location and use its timezone for this computer")); + + priv->current_marker = gtk_image_new_from_icon_name ("go-home", GTK_ICON_SIZE_BUTTON); + gtk_misc_set_alignment (GTK_MISC (priv->current_marker), 1.0, 0.5); + gtk_widget_set_no_show_all (priv->current_marker, TRUE); + + priv->current_spacer = gtk_event_box_new (); + gtk_widget_set_no_show_all (priv->current_spacer, TRUE); + + strut = gtk_event_box_new (); + gtk_box_pack_start (GTK_BOX (box), strut, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (box), priv->current_button, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), priv->current_marker, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), priv->current_spacer, FALSE, FALSE, 0); + priv->button_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); + gtk_size_group_set_ignore_hidden (priv->button_group, FALSE); + gtk_size_group_add_widget (priv->button_group, strut); + gtk_size_group_add_widget (priv->button_group, priv->current_button); + + /* + * Avoid resizing the popup as the tiles display the current marker, + * set button or nothing. For that purpose, replace 'nothing' with + * an event box, and force the button, marker and spacer to have the + * same size via a size group. The visibility of the three is managed + * manually to ensure that only one of them is shown at any time. + * (The all have to be shown initially to get the sizes worked out, + * but they are never visible together). + */ + priv->current_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); + gtk_size_group_set_ignore_hidden (priv->current_group, FALSE); + gtk_size_group_add_widget (priv->current_group, priv->current_button); + gtk_size_group_add_widget (priv->current_group, priv->current_marker); + gtk_size_group_add_widget (priv->current_group, priv->current_spacer); + + gtk_widget_show (priv->current_button); + gtk_widget_show (priv->current_marker); + gtk_widget_show (priv->current_spacer); + + g_signal_connect (priv->current_button, "clicked", + G_CALLBACK (make_current), this); + + priv->clock_face = clock_face_new_with_location ( + priv->size, priv->location, head_section); + + gtk_box_pack_start (GTK_BOX (tile), priv->clock_face, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (tile), head_section, TRUE, TRUE, 0); + + gtk_container_add (GTK_CONTAINER (alignment), tile); + gtk_container_add (GTK_CONTAINER (priv->box), alignment); + gtk_container_add (GTK_CONTAINER (this), priv->box); +} + +static gboolean +clock_needs_face_refresh (ClockLocationTile *this) +{ + ClockLocationTilePrivate *priv = PRIVATE (this); + struct tm now; + + clock_location_localtime (priv->location, &now); + + if (now.tm_year > priv->last_refresh.tm_year + || now.tm_mon > priv->last_refresh.tm_mon + || now.tm_mday > priv->last_refresh.tm_mday + || now.tm_hour > priv->last_refresh.tm_hour + || now.tm_min > priv->last_refresh.tm_min) { + return TRUE; + } + + if ((priv->size == CLOCK_FACE_LARGE) + && now.tm_sec > priv->last_refresh.tm_sec) { + return TRUE; + } + + return FALSE; +} + +static gboolean +clock_needs_label_refresh (ClockLocationTile *this) +{ + ClockLocationTilePrivate *priv = PRIVATE (this); + struct tm now; + long offset; + + clock_location_localtime (priv->location, &now); + offset = clock_location_get_offset (priv->location); + + if (now.tm_year > priv->last_refresh.tm_year + || now.tm_mon > priv->last_refresh.tm_mon + || now.tm_mday > priv->last_refresh.tm_mday + || now.tm_hour > priv->last_refresh.tm_hour + || now.tm_min > priv->last_refresh.tm_min + || offset != priv->last_offset) { + return TRUE; + } + + return FALSE; +} + +static void +copy_tm (struct tm *from, struct tm *to) +{ + to->tm_sec = from->tm_sec; + to->tm_min = from->tm_min; + to->tm_hour = from->tm_hour; + to->tm_mday = from->tm_mday; + to->tm_mon = from->tm_mon; + to->tm_year = from->tm_year; + to->tm_wday = from->tm_wday; + to->tm_yday = from->tm_yday; +} + +static char * +format_time (struct tm *now, + char *tzname, + ClockFormat clock_format, + long offset) +{ + char buf[256]; + char *format; + time_t local_t; + struct tm local_now; + char *utf8; + char *tmp; + long hours, minutes; + + time (&local_t); + localtime_r (&local_t, &local_now); + + if (local_now.tm_wday != now->tm_wday) { + if (clock_format == CLOCK_FORMAT_12) { + /* Translators: This is a strftime format string. + * It is used to display the time in 12-hours format + * (eg, like in the US: 8:10 am), when the local + * weekday differs from the weekday at the location + * (the %A expands to the weekday). The %p expands to + * am/pm. */ + format = _("%l:%M <small>%p (%A)</small>"); + } + else { + /* Translators: This is a strftime format string. + * It is used to display the time in 24-hours format + * (eg, like in France: 20:10), when the local + * weekday differs from the weekday at the location + * (the %A expands to the weekday). */ + format = _("%H:%M <small>(%A)</small>"); + } + } + else { + if (clock_format == CLOCK_FORMAT_12) { + /* Translators: This is a strftime format string. + * It is used to display the time in 12-hours format + * (eg, like in the US: 8:10 am). The %p expands to + * am/pm. */ + format = _("%l:%M <small>%p</small>"); + } + else { + /* Translators: This is a strftime format string. + * It is used to display the time in 24-hours format + * (eg, like in France: 20:10). */ + format = _("%H:%M"); + } + } + + if (strftime (buf, sizeof (buf), format, now) <= 0) { + strcpy (buf, "???"); + } + + hours = offset / 3600; + minutes = labs (offset % 3600) / 60; + + if (hours != 0 && minutes != 0) { + tmp = g_strdup_printf ("%s <small>%s %+ld:%ld</small>", buf, tzname, hours, minutes); + } + else if (hours != 0) { + tmp = g_strdup_printf ("%s <small>%s %+ld</small>", buf, tzname, hours); + } + else { + tmp = g_strdup_printf ("%s <small>%s</small>", buf, tzname); + } + + utf8 = g_locale_to_utf8 (tmp, -1, NULL, NULL, NULL); + + g_free (tmp); + + return utf8; +} + +static char * +convert_time_to_str (time_t now, ClockFormat clock_format) +{ + const gchar *format; + struct tm *tm; + gchar buf[128]; + + if (clock_format == CLOCK_FORMAT_12) { + /* Translators: This is a strftime format string. + * It is used to display the time in 12-hours format (eg, like + * in the US: 8:10 am). The %p expands to am/pm. + */ + format = _("%l:%M %p"); + } + else { + /* Translators: This is a strftime format string. + * It is used to display the time in 24-hours format (eg, like + * in France: 20:10). + */ + format = _("%H:%M"); + } + + tm = localtime (&now); + strftime (buf, sizeof (buf) - 1, format, tm); + + return g_locale_to_utf8 (buf, -1, NULL, NULL, NULL); +} + +void +clock_location_tile_refresh (ClockLocationTile *this, gboolean force_refresh) +{ + ClockLocationTilePrivate *priv = PRIVATE (this); + gchar *tmp, *tzname; + struct tm now; + long offset; + int format; + + g_return_if_fail (IS_CLOCK_LOCATION_TILE (this)); + + if (clock_location_is_current (priv->location)) { + gtk_widget_hide (priv->current_spacer); + gtk_widget_hide (priv->current_button); + gtk_widget_show (priv->current_marker); + } + else { + if (gtk_widget_get_visible (priv->current_marker)) { + gtk_widget_hide (priv->current_marker); + gtk_widget_hide (priv->current_button); + gtk_widget_show (priv->current_spacer); + } + } + + if (clock_needs_face_refresh (this)) { + clock_face_refresh (CLOCK_FACE (priv->clock_face)); + } + + if (!force_refresh && !clock_needs_label_refresh (this)) { + return; + } + + clock_location_localtime (priv->location, &now); + tzname = clock_location_get_tzname (priv->location); + + copy_tm (&now, &(priv->last_refresh)); + priv->last_offset = clock_location_get_offset (priv->location); + + tmp = g_strdup_printf ("<big><b>%s</b></big>", + clock_location_get_display_name (priv->location)); + gtk_label_set_markup (GTK_LABEL (priv->city_label), tmp); + g_free (tmp); + + g_signal_emit (this, signals[NEED_CLOCK_FORMAT], 0, &format); + + offset = - priv->last_offset; + + tmp = format_time (&now, tzname, format, offset); + + gtk_label_set_markup (GTK_LABEL (priv->time_label), tmp); + + g_free (tmp); +} + +void +weather_info_setup_tooltip (WeatherInfo *info, ClockLocation *location, GtkTooltip *tooltip, + ClockFormat clock_format) +{ + GdkPixbuf *pixbuf = NULL; + GtkIconTheme *theme = NULL; + const gchar *conditions, *wind; + gchar *temp, *apparent; + gchar *line1, *line2, *line3, *line4, *tip; + const gchar *icon_name; + const gchar *sys_timezone; + time_t sunrise_time, sunset_time; + gchar *sunrise_str, *sunset_str; + + icon_name = weather_info_get_icon_name (info); + theme = gtk_icon_theme_get_default (); + pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 48, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL); + if (pixbuf) + gtk_tooltip_set_icon (tooltip, pixbuf); + + conditions = weather_info_get_conditions (info); + if (strcmp (conditions, "-") != 0) + line1 = g_strdup_printf (_("%s, %s"), + conditions, + weather_info_get_sky (info)); + else + line1 = g_strdup (weather_info_get_sky (info)); + + /* we need to g_strdup() since both functions return the same address + * of a static buffer */ + temp = g_strdup (weather_info_get_temp (info)); + apparent = g_strdup (weather_info_get_apparent (info)); + if (strcmp (apparent, temp) != 0 && + /* FMQ: it's broken to read from another module's translations; add some API to libmateweather. */ + strcmp (apparent, dgettext ("mate-applets-2.0", "Unknown")) != 0) + /* Translators: The two strings are temperatures. */ + line2 = g_strdup_printf (_("%s, feels like %s"), temp, apparent); + else + line2 = g_strdup (temp); + g_free (temp); + g_free (apparent); + + wind = weather_info_get_wind (info); + if (strcmp (apparent, dgettext ("mate-applets-2.0", "Unknown")) != 0) + line3 = g_strdup_printf ("%s\n", wind); + else + line3 = g_strdup (""); + + sys_timezone = getenv ("TZ"); + setenv ("TZ", clock_location_get_timezone (location), 1); + tzset (); + if (weather_info_get_value_sunrise (info, &sunrise_time)) + sunrise_str = convert_time_to_str (sunrise_time, clock_format); + else + sunrise_str = g_strdup ("???"); + if (weather_info_get_value_sunset (info, &sunset_time)) + sunset_str = convert_time_to_str (sunset_time, clock_format); + else + sunset_str = g_strdup ("???"); + line4 = g_strdup_printf (_("Sunrise: %s / Sunset: %s"), + sunrise_str, sunset_str); + g_free (sunrise_str); + g_free (sunset_str); + + if (sys_timezone) + setenv ("TZ", sys_timezone, 1); + else + unsetenv ("TZ"); + tzset (); + + tip = g_strdup_printf ("<b>%s</b>\n%s\n%s%s", line1, line2, line3, line4); + gtk_tooltip_set_markup (tooltip, tip); + g_free (line1); + g_free (line2); + g_free (line3); + g_free (line4); + g_free (tip); +} + +static gboolean +weather_tooltip (GtkWidget *widget, + gint x, + gint y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + gpointer data) +{ + ClockLocationTile *tile = data; + ClockLocationTilePrivate *priv = PRIVATE (tile); + WeatherInfo *info; + int clock_format; + + info = clock_location_get_weather_info (priv->location); + + if (!info || !weather_info_is_valid (info)) + return FALSE; + + g_signal_emit (tile, signals[NEED_CLOCK_FORMAT], 0, &clock_format); + + weather_info_setup_tooltip (info, priv->location, tooltip, clock_format); + + return TRUE; +} + +static void +update_weather_icon (ClockLocation *loc, WeatherInfo *info, gpointer data) +{ + ClockLocationTile *tile = data; + ClockLocationTilePrivate *priv = PRIVATE (tile); + GdkPixbuf *pixbuf = NULL; + GtkIconTheme *theme = NULL; + const gchar *icon_name; + + if (!info || !weather_info_is_valid (info)) + return; + + icon_name = weather_info_get_icon_name (info); + theme = gtk_icon_theme_get_default (); + pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 16, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL); + + if (pixbuf) { + gtk_image_set_from_pixbuf (GTK_IMAGE (priv->weather_icon), pixbuf); + gtk_alignment_set_padding (GTK_ALIGNMENT (gtk_widget_get_parent (priv->weather_icon)), 0, 0, 0, 6); + } +} + +ClockLocation * +clock_location_tile_get_location (ClockLocationTile *this) +{ + ClockLocationTilePrivate *priv; + + g_return_val_if_fail (IS_CLOCK_LOCATION_TILE (this), NULL); + + priv = PRIVATE (this); + + return g_object_ref (priv->location); +} diff --git a/applets/clock/clock-location-tile.h b/applets/clock/clock-location-tile.h new file mode 100644 index 00000000..00ccb5a8 --- /dev/null +++ b/applets/clock/clock-location-tile.h @@ -0,0 +1,51 @@ +#ifndef __CLOCK_LOCATION_TILE_H__ +#define __CLOCK_LOCATION_TILE_H__ + +#include <gtk/gtk.h> + +#include "clock.h" +#include "clock-face.h" +#include "clock-location.h" +#include "clock-utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define CLOCK_LOCATION_TILE_TYPE (clock_location_tile_get_type ()) +#define CLOCK_LOCATION_TILE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTile)) +#define CLOCK_LOCATION_TILE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_LOCATION_TILE_TYPE, ClockLocationTileClass)) +#define IS_CLOCK_LOCATION_TILE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_LOCATION_TILE_TYPE)) +#define IS_CLOCK_LOCATION_TILE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_LOCATION_TILE_TYPE)) +#define CLOCK_LOCATION_TILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTileClass)) + +typedef struct +{ + GtkAlignment parent; +} ClockLocationTile; + +typedef struct +{ + GtkAlignmentClass parent_class; + + void (* tile_pressed) (ClockLocationTile *tile); + int (* need_clock_format) (ClockLocationTile *tile); +} ClockLocationTileClass; + +GType clock_location_tile_get_type (void); + +ClockLocationTile *clock_location_tile_new (ClockLocation *loc, + ClockFaceSize size); + +ClockLocation *clock_location_tile_get_location (ClockLocationTile *this); + +void weather_info_setup_tooltip (WeatherInfo *info, ClockLocation *location, GtkTooltip *tip, + ClockFormat clock_format); + +void clock_location_tile_refresh (ClockLocationTile *this, + gboolean force_refresh); + +#ifdef __cplusplus +} +#endif +#endif /* __CLOCK_H__ */ diff --git a/applets/clock/clock-location.c b/applets/clock/clock-location.c new file mode 100644 index 00000000..1b81c517 --- /dev/null +++ b/applets/clock/clock-location.c @@ -0,0 +1,894 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <dirent.h> +#include <errno.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <time.h> +#include <unistd.h> +#include <math.h> + +#include <glib.h> +#include <gio/gio.h> + +#ifdef HAVE_NETWORK_MANAGER +#include <dbus/dbus-glib.h> +#include <dbus/dbus-glib-lowlevel.h> +#include <NetworkManager/NetworkManager.h> +#endif + +#include "clock-location.h" +#include "clock-marshallers.h" +#include "set-timezone.h" +#include "system-timezone.h" + +G_DEFINE_TYPE (ClockLocation, clock_location, G_TYPE_OBJECT) + +typedef struct { + gchar *name; + gchar *city; + + SystemTimezone *systz; + + gchar *timezone; + + gchar *tzname; + + gfloat latitude; + gfloat longitude; + + gchar *weather_code; + WeatherInfo *weather_info; + guint weather_timeout; + guint weather_retry_time; + + TempUnit temperature_unit; + SpeedUnit speed_unit; +} ClockLocationPrivate; + +#define WEATHER_TIMEOUT_BASE 30 +#define WEATHER_TIMEOUT_MAX 1800 +#define WEATHER_EMPTY_CODE "-" + +enum { + WEATHER_UPDATED, + SET_CURRENT, + LAST_SIGNAL +}; + +static guint location_signals[LAST_SIGNAL] = { 0 }; + +static void clock_location_finalize (GObject *); +static void clock_location_set_tz (ClockLocation *this); +static void clock_location_unset_tz (ClockLocation *this); +static void setup_weather_updates (ClockLocation *loc); +static void add_to_network_monitor (ClockLocation *loc); +static void remove_from_network_monitor (ClockLocation *loc); + +static gchar *clock_location_get_valid_weather_code (const gchar *code); + +#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_LOCATION_TYPE, ClockLocationPrivate)) + +ClockLocation * +clock_location_find_and_ref (GList *locations, + const gchar *name, + const gchar *city, + const gchar *timezone, + gfloat latitude, + gfloat longitude, + const gchar *code) +{ + GList *l; + ClockLocationPrivate *priv; + + for (l = locations; l != NULL; l = l->next) { + priv = PRIVATE (l->data); + + if (priv->latitude == latitude && + priv->longitude == longitude && + g_strcmp0 (priv->weather_code, code) == 0 && + g_strcmp0 (priv->timezone, timezone) == 0 && + g_strcmp0 (priv->city, city) == 0 && + g_strcmp0 (priv->name, name) == 0) + break; + } + + if (l != NULL) + return g_object_ref (CLOCK_LOCATION (l->data)); + else + return NULL; +} + +ClockLocation * +clock_location_new (const gchar *name, const gchar *city, + const gchar *timezone, + gfloat latitude, gfloat longitude, + const gchar *code, WeatherPrefs *prefs) +{ + ClockLocation *this; + ClockLocationPrivate *priv; + + this = g_object_new (CLOCK_LOCATION_TYPE, NULL); + priv = PRIVATE (this); + + priv->name = g_strdup (name); + priv->city = g_strdup (city); + priv->timezone = g_strdup (timezone); + + /* initialize priv->tzname */ + clock_location_set_tz (this); + clock_location_unset_tz (this); + + priv->latitude = latitude; + priv->longitude = longitude; + + priv->weather_code = clock_location_get_valid_weather_code (code); + + if (prefs) { + priv->temperature_unit = prefs->temperature_unit; + priv->speed_unit = prefs->speed_unit; + } + + setup_weather_updates (this); + + return this; +} + +static ClockLocation *current_location = NULL; + +static void +clock_location_class_init (ClockLocationClass *this_class) +{ + GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class); + + g_obj_class->finalize = clock_location_finalize; + + location_signals[WEATHER_UPDATED] = + g_signal_new ("weather-updated", + G_OBJECT_CLASS_TYPE (g_obj_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (ClockLocationClass, weather_updated), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); + + location_signals[SET_CURRENT] = + g_signal_new ("set-current", + G_OBJECT_CLASS_TYPE (g_obj_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (ClockLocationClass, set_current), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + g_type_class_add_private (this_class, sizeof (ClockLocationPrivate)); +} + +static void +clock_location_init (ClockLocation *this) +{ + ClockLocationPrivate *priv = PRIVATE (this); + + priv->name = NULL; + priv->city = NULL; + + priv->systz = system_timezone_new (); + + priv->timezone = NULL; + + priv->tzname = NULL; + + priv->latitude = 0; + priv->longitude = 0; + + priv->temperature_unit = TEMP_UNIT_CENTIGRADE; + priv->speed_unit = SPEED_UNIT_MS; +} + +static void +clock_location_finalize (GObject *g_obj) +{ + ClockLocationPrivate *priv = PRIVATE (g_obj); + + remove_from_network_monitor (CLOCK_LOCATION (g_obj)); + + if (priv->name) { + g_free (priv->name); + priv->name = NULL; + } + + if (priv->city) { + g_free (priv->city); + priv->city = NULL; + } + + if (priv->systz) { + g_object_unref (priv->systz); + priv->systz = NULL; + } + + if (priv->timezone) { + g_free (priv->timezone); + priv->timezone = NULL; + } + + if (priv->tzname) { + g_free (priv->tzname); + priv->tzname = NULL; + } + + if (priv->weather_code) { + g_free (priv->weather_code); + priv->weather_code = NULL; + } + + if (priv->weather_info) { + weather_info_free (priv->weather_info); + priv->weather_info = NULL; + } + + if (priv->weather_timeout) { + g_source_remove (priv->weather_timeout); + priv->weather_timeout = 0; + } + + G_OBJECT_CLASS (clock_location_parent_class)->finalize (g_obj); +} + +const gchar * +clock_location_get_display_name (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + if (priv->name && priv->name[0]) + return priv->name; + else + return priv->city; +} + +const gchar * +clock_location_get_name (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + return priv->name; +} + +void +clock_location_set_name (ClockLocation *loc, const gchar *name) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + if (priv->name) { + g_free (priv->name); + priv->name = NULL; + } + + priv->name = g_strdup (name); +} + +const gchar * +clock_location_get_city (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + return priv->city; +} + +void +clock_location_set_city (ClockLocation *loc, const gchar *city) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + if (priv->city) { + g_free (priv->city); + priv->city = NULL; + } + + priv->city = g_strdup (city); +} + +gchar * +clock_location_get_timezone (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + return priv->timezone; +} + +void +clock_location_set_timezone (ClockLocation *loc, const gchar *timezone) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + if (priv->timezone) { + g_free (priv->timezone); + priv->timezone = NULL; + } + + priv->timezone = g_strdup (timezone); +} + +gchar * +clock_location_get_tzname (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + return priv->tzname; +} + +void +clock_location_get_coords (ClockLocation *loc, gfloat *latitude, + gfloat *longitude) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + *latitude = priv->latitude; + *longitude = priv->longitude; +} + +void +clock_location_set_coords (ClockLocation *loc, gfloat latitude, + gfloat longitude) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + priv->latitude = latitude; + priv->longitude = longitude; +} + +static void +clock_location_set_tzname (ClockLocation *this, const char *tzname) +{ + ClockLocationPrivate *priv = PRIVATE (this); + + if (priv->tzname) { + if (strcmp (priv->tzname, tzname) == 0) { + return; + } + + g_free (priv->tzname); + priv->tzname = NULL; + } + + if (tzname) { + priv->tzname = g_strdup (tzname); + } else { + priv->tzname = NULL; + } +} + +static void +clock_location_set_tz (ClockLocation *this) +{ + ClockLocationPrivate *priv = PRIVATE (this); + + time_t now_t; + struct tm now; + + if (priv->timezone == NULL) { + return; + } + + setenv ("TZ", priv->timezone, 1); + tzset(); + + now_t = time (NULL); + localtime_r (&now_t, &now); + + if (now.tm_isdst > 0) { + clock_location_set_tzname (this, tzname[1]); + } else { + clock_location_set_tzname (this, tzname[0]); + } +} + +static void +clock_location_unset_tz (ClockLocation *this) +{ + ClockLocationPrivate *priv = PRIVATE (this); + const char *env_timezone; + + if (priv->timezone == NULL) { + return; + } + + env_timezone = system_timezone_get_env (priv->systz); + + if (env_timezone) { + setenv ("TZ", env_timezone, 1); + } else { + unsetenv ("TZ"); + } + tzset(); +} + +void +clock_location_localtime (ClockLocation *loc, struct tm *tm) +{ + time_t now; + + clock_location_set_tz (loc); + + time (&now); + localtime_r (&now, tm); + + clock_location_unset_tz (loc); +} + +gboolean +clock_location_is_current_timezone (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + const char *zone; + + zone = system_timezone_get (priv->systz); + + if (zone) + return strcmp (zone, priv->timezone) == 0; + else + return clock_location_get_offset (loc) == 0; +} + +gboolean +clock_location_is_current (ClockLocation *loc) +{ + if (current_location == loc) + return TRUE; + else if (current_location != NULL) + return FALSE; + + if (clock_location_is_current_timezone (loc)) { + /* Note that some code in clock.c depends on the fact that + * calling this function can set the current location if + * there's none */ + current_location = loc; + g_object_add_weak_pointer (G_OBJECT (current_location), + (gpointer *)¤t_location); + g_signal_emit (current_location, location_signals[SET_CURRENT], + 0, NULL); + + return TRUE; + } + + return FALSE; +} + + +glong +clock_location_get_offset (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + glong sys_timezone, local_timezone; + glong offset; + time_t t; + struct tm *tm; + + t = time (NULL); + + unsetenv ("TZ"); + tm = localtime (&t); + sys_timezone = timezone; + + if (tm->tm_isdst > 0) { + sys_timezone -= 3600; + } + + setenv ("TZ", priv->timezone, 1); + tm = localtime (&t); + local_timezone = timezone; + + if (tm->tm_isdst > 0) { + local_timezone -= 3600; + } + + offset = local_timezone - sys_timezone; + + clock_location_unset_tz (loc); + + return offset; +} + +typedef struct { + ClockLocation *location; + GFunc callback; + gpointer data; + GDestroyNotify destroy; +} MakeCurrentData; + +static void +make_current_cb (gpointer data, GError *error) +{ + MakeCurrentData *mcdata = data; + + if (error == NULL) { + if (current_location) + g_object_remove_weak_pointer (G_OBJECT (current_location), + (gpointer *)¤t_location); + current_location = mcdata->location; + g_object_add_weak_pointer (G_OBJECT (current_location), + (gpointer *)¤t_location); + g_signal_emit (current_location, location_signals[SET_CURRENT], + 0, NULL); + } + + if (mcdata->callback) + mcdata->callback (mcdata->data, error); + else + g_error_free (error); +} + +static void +free_make_current_data (gpointer data) +{ + MakeCurrentData *mcdata = data; + + if (mcdata->destroy) + mcdata->destroy (mcdata->data); + + g_object_unref (mcdata->location); + g_free (mcdata); +} + +void +clock_location_make_current (ClockLocation *loc, + guint transient_parent_xid, + GFunc callback, + gpointer data, + GDestroyNotify destroy) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + gchar *filename; + MakeCurrentData *mcdata; + + if (loc == current_location) { + if (destroy) + destroy (data); + return; + } + + if (clock_location_is_current_timezone (loc)) { + if (current_location) + g_object_remove_weak_pointer (G_OBJECT (current_location), + (gpointer *)¤t_location); + current_location = loc; + g_object_add_weak_pointer (G_OBJECT (current_location), + (gpointer *)¤t_location); + g_signal_emit (current_location, location_signals[SET_CURRENT], + 0, NULL); + if (callback) + callback (data, NULL); + if (destroy) + destroy (data); + return; + } + + mcdata = g_new (MakeCurrentData, 1); + + mcdata->location = g_object_ref (loc); + mcdata->callback = callback; + mcdata->data = data; + mcdata->destroy = destroy; + + filename = g_build_filename (SYSTEM_ZONEINFODIR, priv->timezone, NULL); + set_system_timezone_async (filename, + (GFunc)make_current_cb, + mcdata, + free_make_current_data); + g_free (filename); +} + +static gchar * +clock_location_get_valid_weather_code (const gchar *code) +{ + if (!code || code[0] == '\0') + return g_strdup (WEATHER_EMPTY_CODE); + else + return g_strdup (code); +} + +const gchar * +clock_location_get_weather_code (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + return priv->weather_code; +} + +void +clock_location_set_weather_code (ClockLocation *loc, const gchar *code) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + g_free (priv->weather_code); + priv->weather_code = clock_location_get_valid_weather_code (code); + + setup_weather_updates (loc); +} + +WeatherInfo * +clock_location_get_weather_info (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + return priv->weather_info; +} + +static gboolean update_weather_info (gpointer data); + +static void +set_weather_update_timeout (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + guint timeout; + + if (!weather_info_network_error (priv->weather_info)) { + /* The last update succeeded; set the next update to + * happen in half an hour, and reset the retry timer. + */ + timeout = WEATHER_TIMEOUT_MAX; + priv->weather_retry_time = WEATHER_TIMEOUT_BASE; + } else { + /* The last update failed; set the next update + * according to the retry timer, and exponentially + * back off the retry timer. + */ + timeout = priv->weather_retry_time; + priv->weather_retry_time *= 2; + if (priv->weather_retry_time > WEATHER_TIMEOUT_MAX) + priv->weather_retry_time = WEATHER_TIMEOUT_MAX; + } + + if (priv->weather_timeout) + g_source_remove (priv->weather_timeout); + priv->weather_timeout = + g_timeout_add_seconds (timeout, update_weather_info, loc); +} + +static void +weather_info_updated (WeatherInfo *info, gpointer data) +{ + ClockLocation *loc = data; + ClockLocationPrivate *priv = PRIVATE (loc); + + set_weather_update_timeout (loc); + g_signal_emit (loc, location_signals[WEATHER_UPDATED], + 0, priv->weather_info); +} + +static gboolean +update_weather_info (gpointer data) +{ + ClockLocation *loc = data; + ClockLocationPrivate *priv = PRIVATE (loc); + WeatherPrefs prefs = { + FORECAST_STATE, + FALSE, + NULL, + TEMP_UNIT_CENTIGRADE, + SPEED_UNIT_MS, + PRESSURE_UNIT_MB, + DISTANCE_UNIT_KM + }; + + prefs.temperature_unit = priv->temperature_unit; + prefs.speed_unit = priv->speed_unit; + + weather_info_abort (priv->weather_info); + weather_info_update (priv->weather_info, + &prefs, weather_info_updated, loc); + + return TRUE; +} + +static gchar * +rad2dms (gfloat lat, gfloat lon) +{ + gchar h, h2; + gfloat d, deg, min, d2, deg2, min2; + + h = lat > 0 ? 'N' : 'S'; + d = fabs (lat); + deg = floor (d); + min = floor (60 * (d - deg)); + h2 = lon > 0 ? 'E' : 'W'; + d2 = fabs (lon); + deg2 = floor (d2); + min2 = floor (60 * (d2 - deg2)); + return g_strdup_printf ("%02d-%02d%c %02d-%02d%c", + (int)deg, (int)min, h, + (int)deg2, (int)min2, h2); +} + +static GList *locations = NULL; + +static void +update_weather_infos (void) +{ + GList *l; + + for (l = locations; l; l = l->next) { + ClockLocation *loc = l->data; + ClockLocationPrivate *priv = PRIVATE (loc); + + priv->weather_retry_time = WEATHER_TIMEOUT_BASE; + update_weather_info (loc); + } +} + +#ifdef HAVE_NETWORK_MANAGER +static void +state_notify (DBusPendingCall *pending, gpointer data) +{ + DBusMessage *msg = dbus_pending_call_steal_reply (pending); + + if (!msg) + return; + + if (dbus_message_get_type (msg) == DBUS_MESSAGE_TYPE_METHOD_RETURN) { + dbus_uint32_t result; + + if (dbus_message_get_args (msg, NULL, + DBUS_TYPE_UINT32, &result, + DBUS_TYPE_INVALID)) { + if (result == NM_STATE_CONNECTED) { + update_weather_infos (); + } + } + } + + dbus_message_unref (msg); +} + +static void +check_network (DBusConnection *connection) +{ + DBusMessage *message; + DBusPendingCall *reply; + + message = dbus_message_new_method_call (NM_DBUS_SERVICE, + NM_DBUS_PATH, + NM_DBUS_INTERFACE, + "state"); + if (dbus_connection_send_with_reply (connection, message, &reply, -1)) { + dbus_pending_call_set_notify (reply, state_notify, NULL, NULL); + dbus_pending_call_unref (reply); + } + + dbus_message_unref (message); +} + +static DBusHandlerResult +filter_func (DBusConnection *connection, + DBusMessage *message, + void *user_data) +{ + if (dbus_message_is_signal (message, + NM_DBUS_INTERFACE, + "StateChanged")) { + check_network (connection); + + return DBUS_HANDLER_RESULT_HANDLED; + } + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static void +setup_network_monitor (void) +{ + GError *error; + DBusError derror; + static DBusGConnection *bus = NULL; + DBusConnection *dbus; + + if (bus == NULL) { + error = NULL; + bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); + if (bus == NULL) { + g_warning ("Couldn't connect to system bus: %s", + error->message); + g_error_free (error); + + return; + } + + dbus_error_init (&derror); + dbus = dbus_g_connection_get_connection (bus); + dbus_connection_add_filter (dbus, filter_func, NULL, NULL); + dbus_bus_add_match (dbus, + "type='signal'," + "interface='" NM_DBUS_INTERFACE "'", + &derror); + if (dbus_error_is_set (&derror)) { + g_warning ("Couldn't register signal handler: %s: %s", + derror.name, derror.message); + dbus_error_free (&derror); + } + } +} +#endif + +static void +add_to_network_monitor (ClockLocation *loc) +{ +#ifdef HAVE_NETWORK_MANAGER + setup_network_monitor (); +#endif + + if (!g_list_find (locations, loc)) + locations = g_list_prepend (locations, loc); +} + +static void +remove_from_network_monitor (ClockLocation *loc) +{ + locations = g_list_remove (locations, loc); +} + +static void +setup_weather_updates (ClockLocation *loc) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + WeatherLocation *wl; + WeatherPrefs prefs = { + FORECAST_STATE, + FALSE, + NULL, + TEMP_UNIT_CENTIGRADE, + SPEED_UNIT_MS, + PRESSURE_UNIT_MB, + DISTANCE_UNIT_KM + }; + + gchar *dms; + + prefs.temperature_unit = priv->temperature_unit; + prefs.speed_unit = priv->speed_unit; + + if (priv->weather_info) { + weather_info_free (priv->weather_info); + priv->weather_info = NULL; + } + + if (priv->weather_timeout) { + g_source_remove (priv->weather_timeout); + priv->weather_timeout = 0; + } + + if (!priv->weather_code || + strcmp (priv->weather_code, WEATHER_EMPTY_CODE) == 0) + return; + + dms = rad2dms (priv->latitude, priv->longitude); + wl = weather_location_new (priv->city, priv->weather_code, + NULL, NULL, dms, NULL, NULL); + + priv->weather_info = + weather_info_new (wl, &prefs, weather_info_updated, loc); + + set_weather_update_timeout (loc); + + weather_location_free (wl); + g_free (dms); + + add_to_network_monitor (loc); +} + +void +clock_location_set_weather_prefs (ClockLocation *loc, + WeatherPrefs *prefs) +{ + ClockLocationPrivate *priv = PRIVATE (loc); + + priv->temperature_unit = prefs->temperature_unit; + priv->speed_unit = prefs->speed_unit; + + update_weather_info (loc); +} + diff --git a/applets/clock/clock-location.h b/applets/clock/clock-location.h new file mode 100644 index 00000000..ae2275aa --- /dev/null +++ b/applets/clock/clock-location.h @@ -0,0 +1,87 @@ +#ifndef __CLOCK_LOCATION_H__ +#define __CLOCK_LOCATION_H__ + +#include <time.h> +#include <glib.h> +#include <glib-object.h> +#include <libmateweather/weather.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define CLOCK_LOCATION_TYPE (clock_location_get_type ()) +#define CLOCK_LOCATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_LOCATION_TYPE, ClockLocation)) +#define CLOCK_LOCATION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_LOCATION_TYPE, ClockLocationClass)) +#define IS_CLOCK_LOCATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_LOCATION_TYPE)) +#define IS_CLOCK_LOCATION_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_LOCATION_TYPE)) +#define CLOCK_LOCATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_LOCATION_TYPE, ClockLocationClass)) + +typedef struct +{ + GObject g_object; +} ClockLocation; + +typedef struct +{ + GObjectClass g_object_class; + + void (* weather_updated) (ClockLocation *location, WeatherInfo *info); + + void (* set_current) (ClockLocation *location); +} ClockLocationClass; + +GType clock_location_get_type (void); + +ClockLocation *clock_location_new (const gchar *name, const gchar *city, + const gchar *timezone, + gfloat latitude, gfloat longitude, + const gchar *code, + WeatherPrefs *prefs); + +ClockLocation *clock_location_find_and_ref (GList *locations, + const gchar *name, + const gchar *city, + const gchar *timezone, + gfloat latitude, + gfloat longitude, + const gchar *code); + +gchar *clock_location_get_tzname (ClockLocation *loc); + +const gchar *clock_location_get_display_name (ClockLocation *loc); + +const gchar *clock_location_get_name (ClockLocation *loc); +void clock_location_set_name (ClockLocation *loc, const gchar *name); + +const gchar *clock_location_get_city (ClockLocation *loc); +void clock_location_set_city (ClockLocation *loc, const gchar *city); + +gchar *clock_location_get_timezone (ClockLocation *loc); +void clock_location_set_timezone (ClockLocation *loc, const gchar *timezone); + +void clock_location_get_coords (ClockLocation *loc, gfloat *latitude, gfloat *longitude); +void clock_location_set_coords (ClockLocation *loc, gfloat latitude, gfloat longitude); + +void clock_location_localtime (ClockLocation *loc, struct tm *tm); + +gboolean clock_location_is_current (ClockLocation *loc); +void clock_location_make_current (ClockLocation *loc, + guint transient_parent_xid, + GFunc callback, + gpointer data, + GDestroyNotify destroy); +gboolean clock_location_is_current_timezone (ClockLocation *loc); + +const gchar *clock_location_get_weather_code (ClockLocation *loc); +void clock_location_set_weather_code (ClockLocation *loc, const gchar *code); +WeatherInfo *clock_location_get_weather_info (ClockLocation *loc); +void clock_location_set_weather_prefs (ClockLocation *loc, + WeatherPrefs *weather_prefs); + +glong clock_location_get_offset (ClockLocation *loc); + +#ifdef __cplusplus +} +#endif +#endif /* __CLOCK_LOCATION_H__ */ diff --git a/applets/clock/clock-map.c b/applets/clock/clock-map.c new file mode 100644 index 00000000..5a6e0379 --- /dev/null +++ b/applets/clock/clock-map.c @@ -0,0 +1,700 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <cairo.h> +#include <sys/time.h> +#include <sys/timeb.h> +#include <gtk/gtk.h> +#include <math.h> + +#include "clock.h" +#include "clock-map.h" +#include "clock-sunpos.h" +#include "clock-marshallers.h" + +G_DEFINE_TYPE (ClockMap, clock_map, GTK_TYPE_WIDGET) + +enum { + NEED_LOCATIONS, + LAST_SIGNAL +}; + +enum { + MARKER_NORMAL = 0, + MARKER_HILIGHT, + MARKER_CURRENT, + MARKER_NB +}; + +static char *marker_files[MARKER_NB] = { + ICONDIR "/clock-map-location-marker.png", + ICONDIR "/clock-map-location-hilight.png", + ICONDIR "/clock-map-location-current.png" +}; + +static guint signals[LAST_SIGNAL]; + +typedef struct { + time_t last_refresh; + + gint width; + gint height; + + guint highlight_timeout_id; + + GdkPixbuf *stock_map_pixbuf; + GdkPixbuf *location_marker_pixbuf[MARKER_NB]; + + GdkPixbuf *location_map_pixbuf; + + /* The shadow itself */ + GdkPixbuf *shadow_pixbuf; + + /* The map with the shadow composited onto it */ + GdkPixbuf *shadow_map_pixbuf; +} ClockMapPrivate; + +static void clock_map_finalize (GObject *); +static void clock_map_size_request (GtkWidget *this, + GtkRequisition *requisition); +static void clock_map_size_allocate (GtkWidget *this, + GtkAllocation *allocation); +static gboolean clock_map_expose (GtkWidget *this, + GdkEventExpose *expose); + +static void clock_map_place_locations (ClockMap *this); +static void clock_map_render_shadow (ClockMap *this); +static void clock_map_display (ClockMap *this); + +#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_MAP_TYPE, ClockMapPrivate)) + +ClockMap * +clock_map_new (void) +{ + ClockMap *this; + + this = g_object_new (CLOCK_MAP_TYPE, NULL); + + return this; +} + +static void +clock_map_class_init (ClockMapClass *this_class) +{ + GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (g_obj_class); + + g_obj_class->finalize = clock_map_finalize; + + /* GtkWidget signals */ + widget_class->size_request = clock_map_size_request; + widget_class->size_allocate = clock_map_size_allocate; + widget_class->expose_event = clock_map_expose; + + g_type_class_add_private (this_class, sizeof (ClockMapPrivate)); + + /** + * ClockMap::need-locations + * + * The map widget emits this signal when it needs to know which + * locations to display. + * + * Returns: the handler should return a (GList *) of (ClockLocation *). + * The map widget will not modify this list, so the caller should keep + * it alive. + */ + signals[NEED_LOCATIONS] = g_signal_new ("need-locations", + G_TYPE_FROM_CLASS (g_obj_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ClockMapClass, need_locations), + NULL, + NULL, + _clock_marshal_POINTER__VOID, + G_TYPE_POINTER, 0); +} + +static void +clock_map_init (ClockMap *this) +{ + int i; + ClockMapPrivate *priv = PRIVATE (this); + + gtk_widget_set_has_window (GTK_WIDGET (this), FALSE); + + priv->last_refresh = 0; + priv->width = 0; + priv->height = 0; + priv->highlight_timeout_id = 0; + priv->stock_map_pixbuf = NULL; + + g_assert (sizeof (marker_files)/sizeof (char *) == MARKER_NB); + + for (i = 0; i < MARKER_NB; i++) { + priv->location_marker_pixbuf[i] = gdk_pixbuf_new_from_file + (marker_files[i], NULL); + } +} + +static void +clock_map_finalize (GObject *g_obj) +{ + ClockMapPrivate *priv = PRIVATE (g_obj); + int i; + + if (priv->highlight_timeout_id) { + g_source_remove (priv->highlight_timeout_id); + priv->highlight_timeout_id = 0; + } + + if (priv->stock_map_pixbuf) { + g_object_unref (priv->stock_map_pixbuf); + priv->stock_map_pixbuf = NULL; + } + + for (i = 0; i < MARKER_NB; i++) { + if (priv->location_marker_pixbuf[i]) { + g_object_unref (priv->location_marker_pixbuf[i]); + priv->location_marker_pixbuf[i] = NULL; + } + } + + if (priv->location_map_pixbuf) { + g_object_unref (priv->location_map_pixbuf); + priv->location_map_pixbuf = NULL; + } + + if (priv->shadow_pixbuf) { + g_object_unref (priv->shadow_pixbuf); + priv->shadow_pixbuf = NULL; + } + + if (priv->shadow_map_pixbuf) { + g_object_unref (priv->shadow_map_pixbuf); + priv->shadow_map_pixbuf = NULL; + } + + G_OBJECT_CLASS (clock_map_parent_class)->finalize (g_obj); +} + +void +clock_map_refresh (ClockMap *this) +{ + ClockMapPrivate *priv = PRIVATE (this); + GtkWidget *widget = GTK_WIDGET (this); + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); + + /* Only do something if we have some space allocated. + * Note that 1x1 is not really some space... */ + if (allocation.width <= 1 || allocation.height <= 1) + return; + + /* Allocation changed => we reload the map */ + if (priv->width != allocation.width || + priv->height != allocation.height) { + if (priv->stock_map_pixbuf) { + g_object_unref (priv->stock_map_pixbuf); + priv->stock_map_pixbuf = NULL; + } + + priv->width = allocation.width; + priv->height = allocation.height; + } + + if (!priv->stock_map_pixbuf) { + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_scale + (ICONDIR "/clock-map.png", + priv->width, priv->height, FALSE, NULL); + + priv->stock_map_pixbuf = pixbuf; + } + + clock_map_place_locations (this); + + clock_map_display (this); +} + +static gboolean +clock_map_expose (GtkWidget *this, GdkEventExpose *event) +{ + ClockMapPrivate *priv = PRIVATE (this); + GdkWindow *window; + GtkStyle *style; + GtkAllocation allocation; + GdkRectangle region; + cairo_t *cr; + + window = gtk_widget_get_window (this); + style = gtk_widget_get_style (this); + gtk_widget_get_allocation (this, &allocation); + + if (!priv->shadow_map_pixbuf) { + g_warning ("Needed to refresh the map in expose event."); + clock_map_refresh (CLOCK_MAP (this)); + } + + cr = gdk_cairo_create (window); + + region.x = allocation.x; + region.y = allocation.y; + region.width = gdk_pixbuf_get_width (priv->shadow_map_pixbuf); + region.height = gdk_pixbuf_get_height (priv->shadow_map_pixbuf); + + gdk_rectangle_intersect (®ion, &(event->area), ®ion); + gdk_draw_pixbuf (window, + style->black_gc, + priv->shadow_map_pixbuf, + region.x - allocation.x, + region.y - allocation.y, + region.x, + region.y, + region.width, + region.height, + GDK_RGB_DITHER_NORMAL, + 0, 0); + + /* draw a simple outline */ + cairo_rectangle ( + cr, + allocation.x + 0.5, allocation.y + 0.5, + gdk_pixbuf_get_width (priv->shadow_map_pixbuf) - 1, + gdk_pixbuf_get_height (priv->shadow_map_pixbuf) - 1); + + cairo_set_source_rgb ( + cr, + style->mid [GTK_STATE_ACTIVE].red / 65535.0, + style->mid [GTK_STATE_ACTIVE].green / 65535.0, + style->mid [GTK_STATE_ACTIVE].blue / 65535.0); + + cairo_set_line_width (cr, 1.0); + cairo_stroke (cr); + + cairo_destroy (cr); + + return FALSE; +} + +static void +clock_map_size_request (GtkWidget *this, GtkRequisition *requisition) +{ + requisition->width = 250; + requisition->height = 125; +} + +static void +clock_map_size_allocate (GtkWidget *this, GtkAllocation *allocation) +{ + ClockMapPrivate *priv = PRIVATE (this); + + if (GTK_WIDGET_CLASS (clock_map_parent_class)->size_allocate) + GTK_WIDGET_CLASS (clock_map_parent_class)->size_allocate (this, allocation); + + if (priv->width != allocation->width || + priv->height != allocation->height) + clock_map_refresh (CLOCK_MAP (this)); +} + +static void +clock_map_mark (ClockMap *this, gfloat latitude, gfloat longitude, gint mark) +{ + ClockMapPrivate *priv = PRIVATE (this); + GdkPixbuf *marker = priv->location_marker_pixbuf[mark]; + GdkPixbuf *partial = NULL; + + int x, y; + int width, height; + int marker_width, marker_height; + int dest_x, dest_y, dest_width, dest_height; + + width = gdk_pixbuf_get_width (priv->location_map_pixbuf); + height = gdk_pixbuf_get_height (priv->location_map_pixbuf); + + x = (width / 2.0 + (width / 2.0) * longitude / 180.0); + y = (height / 2.0 - (height / 2.0) * latitude / 90.0); + + marker_width = gdk_pixbuf_get_width (marker); + marker_height = gdk_pixbuf_get_height (marker); + + dest_x = x - marker_width / 2; + dest_y = y - marker_height / 2; + dest_width = marker_width; + dest_height = marker_height; + + /* create a small partial pixbuf if the mark is too close to + the north or south pole */ + if (dest_y < 0) { + partial = gdk_pixbuf_new_subpixbuf + (marker, 0, dest_y + marker_height, + marker_width, -dest_y); + + dest_y = 0.0; + marker_height = gdk_pixbuf_get_height (partial); + } else if (dest_y + dest_height > height) { + partial = gdk_pixbuf_new_subpixbuf + (marker, 0, 0, marker_width, height - dest_y); + marker_height = gdk_pixbuf_get_height (partial); + } + + if (partial) { + marker = partial; + } + + /* handle the cases where the marker needs to be placed across + the 180 degree longitude line */ + if (dest_x < 0) { + /* split into our two pixbufs for the left and right edges */ + GdkPixbuf *lhs = NULL; + GdkPixbuf *rhs = NULL; + + lhs = gdk_pixbuf_new_subpixbuf + (marker, -dest_x, 0, marker_width + dest_x, marker_height); + + gdk_pixbuf_composite (lhs, priv->location_map_pixbuf, + 0, dest_y, + gdk_pixbuf_get_width (lhs), + gdk_pixbuf_get_height (lhs), + 0, dest_y, + 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF); + + rhs = gdk_pixbuf_new_subpixbuf + (marker, 0, 0, -dest_x, marker_height); + + gdk_pixbuf_composite (rhs, priv->location_map_pixbuf, + width - gdk_pixbuf_get_width (rhs) - 1, + dest_y, + gdk_pixbuf_get_width (rhs), + gdk_pixbuf_get_height (rhs), + width - gdk_pixbuf_get_width (rhs) - 1, + dest_y, + 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF); + + g_object_unref (lhs); + g_object_unref (rhs); + } else if (dest_x + dest_width > width) { + /* split into our two pixbufs for the left and right edges */ + GdkPixbuf *lhs = NULL; + GdkPixbuf *rhs = NULL; + + lhs = gdk_pixbuf_new_subpixbuf + (marker, width - dest_x, 0, marker_width - width + dest_x, marker_height); + + gdk_pixbuf_composite (lhs, priv->location_map_pixbuf, + 0, dest_y, + gdk_pixbuf_get_width (lhs), + gdk_pixbuf_get_height (lhs), + 0, dest_y, + 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF); + + rhs = gdk_pixbuf_new_subpixbuf + (marker, 0, 0, width - dest_x, marker_height); + + gdk_pixbuf_composite (rhs, priv->location_map_pixbuf, + width - gdk_pixbuf_get_width (rhs) - 1, + dest_y, + gdk_pixbuf_get_width (rhs), + gdk_pixbuf_get_height (rhs), + width - gdk_pixbuf_get_width (rhs) - 1, + dest_y, + 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF); + + g_object_unref (lhs); + g_object_unref (rhs); + } else { + gdk_pixbuf_composite (marker, priv->location_map_pixbuf, + dest_x, dest_y, + gdk_pixbuf_get_width (marker), + gdk_pixbuf_get_height (marker), + dest_x, dest_y, + 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF); + } + + if (partial != NULL) { + g_object_unref (partial); + } +} + +/** + * Return value: %TRUE if @loc can be placed on the map, %FALSE otherwise. + **/ +static gboolean +clock_map_place_location (ClockMap *this, ClockLocation *loc, gboolean hilight) +{ + gfloat latitude, longitude; + gint marker; + + clock_location_get_coords (loc, &latitude, &longitude); + /* 0/0 means unset, basically */ + if (latitude == 0 && longitude == 0) + return FALSE; + + if (hilight) + marker = MARKER_HILIGHT; + else if (clock_location_is_current (loc)) + marker = MARKER_CURRENT; + else + marker = MARKER_NORMAL; + + clock_map_mark (this, latitude, longitude, marker); + + return TRUE; +} + +static void +clock_map_place_locations (ClockMap *this) +{ + ClockMapPrivate *priv = PRIVATE (this); + GList *locs; + ClockLocation *loc; + + if (priv->location_map_pixbuf) { + g_object_unref (priv->location_map_pixbuf); + priv->location_map_pixbuf = NULL; + } + + priv->location_map_pixbuf = gdk_pixbuf_copy (priv->stock_map_pixbuf); + + locs = NULL; + g_signal_emit (this, signals[NEED_LOCATIONS], 0, &locs); + + while (locs) { + loc = CLOCK_LOCATION (locs->data); + + clock_map_place_location (this, loc, FALSE); + + locs = locs->next; + } + +#if 0 + /* map_mark test suite for the edge cases */ + + /* points around longitude 180 */ + clock_map_mark (this, 0.0, 180.0); + clock_map_mark (this, -15.0, -178.0); + clock_map_mark (this, -30.0, -176.0); + clock_map_mark (this, 15.0, 178.0); + clock_map_mark (this, 30.0, 176.0); + + clock_map_mark (this, 90.0, 180.0); + clock_map_mark (this, -90.0, 180.0); + + /* north pole & friends */ + clock_map_mark (this, 90.0, 0.0); + clock_map_mark (this, 88.0, -15.0); + clock_map_mark (this, 92.0, 15.0); + + /* south pole & friends */ + clock_map_mark (this, -90.0, 0.0); + clock_map_mark (this, -88.0, -15.0); + clock_map_mark (this, -92.0, 15.0); +#endif +} + +static void +clock_map_compute_vector (gdouble lat, gdouble lon, gdouble *vec) +{ + gdouble lat_rad, lon_rad; + lat_rad = lat * (M_PI/180.0); + lon_rad = lon * (M_PI/180.0); + + vec[0] = sin(lon_rad) * cos(lat_rad); + vec[1] = sin(lat_rad); + vec[2] = cos(lon_rad) * cos(lat_rad); +} + +static guchar +clock_map_is_sunlit (gdouble pos_lat, gdouble pos_long, + gdouble sun_lat, gdouble sun_long) +{ + gdouble pos_vec[3]; + gdouble sun_vec[3]; + gdouble dot; + + /* twilight */ + gdouble epsilon = 0.01; + + clock_map_compute_vector (pos_lat, pos_long, pos_vec); + clock_map_compute_vector (sun_lat, sun_long, sun_vec); + + /* compute the dot product of the two */ + dot = pos_vec[0]*sun_vec[0] + pos_vec[1]*sun_vec[1] + + pos_vec[2]*sun_vec[2]; + + if (dot > epsilon) { + return 0x00; + } + + if (dot < -epsilon) { + return 0xFF; + } + + return (guchar)(-128 * ((dot / epsilon) - 1)); +} + +static void +clock_map_render_shadow_pixbuf (GdkPixbuf *pixbuf) +{ + int x, y; + int height, width; + int n_channels, rowstride; + guchar *pixels, *p; + gdouble sun_lat, sun_lon; + time_t now = time (NULL); + + n_channels = gdk_pixbuf_get_n_channels (pixbuf); + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + pixels = gdk_pixbuf_get_pixels (pixbuf); + + width = gdk_pixbuf_get_width (pixbuf); + height = gdk_pixbuf_get_height (pixbuf); + + sun_position (now, &sun_lat, &sun_lon); + + for (y = 0; y < height; y++) { + gdouble lat = (height / 2.0 - y) / (height / 2.0) * 90.0; + + for (x = 0; x < width; x++) { + guchar shade; + gdouble lon = + (x - width / 2.0) / (width / 2.0) * 180.0; + + shade = clock_map_is_sunlit (lat, lon, + sun_lat, sun_lon); + + p = pixels + y * rowstride + x * n_channels; + p[3] = shade; + } + } +} + +static void +clock_map_render_shadow (ClockMap *this) +{ + ClockMapPrivate *priv = PRIVATE (this); + + if (priv->shadow_pixbuf) { + g_object_unref (priv->shadow_pixbuf); + } + + priv->shadow_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, + priv->width, priv->height); + + /* Initialize to all shadow */ + gdk_pixbuf_fill (priv->shadow_pixbuf, 0x6d9ccdff); + + clock_map_render_shadow_pixbuf (priv->shadow_pixbuf); + + if (priv->shadow_map_pixbuf) { + g_object_unref (priv->shadow_map_pixbuf); + } + + priv->shadow_map_pixbuf = gdk_pixbuf_copy (priv->location_map_pixbuf); + + gdk_pixbuf_composite (priv->shadow_pixbuf, priv->shadow_map_pixbuf, + 0, 0, priv->width, priv->height, + 0, 0, 1, 1, GDK_INTERP_NEAREST, 0x66); +} + +static void +clock_map_display (ClockMap *this) +{ + ClockMapPrivate *priv = PRIVATE (this); + + clock_map_render_shadow (this); + gtk_widget_queue_draw (GTK_WIDGET (this)); + + time (&priv->last_refresh); +} + +typedef struct { + ClockMap *map; + ClockLocation *location; + int count; +} BlinkData; + +static gboolean +highlight (gpointer user_data) +{ + BlinkData *data = user_data; + + if (data->count == 6) + return FALSE; + + if (data->count % 2 == 0) { + if (!clock_map_place_location (data->map, + data->location, TRUE)) + return FALSE; + } else + clock_map_place_locations (data->map); + clock_map_display (data->map); + + data->count++; + + return TRUE; +} + +static void +highlight_destroy (gpointer user_data) +{ + BlinkData *data = user_data; + ClockMapPrivate *priv; + + priv = PRIVATE (data->map); + priv->highlight_timeout_id = 0; + + g_object_unref (data->location); + g_free (data); +} + +void +clock_map_blink_location (ClockMap *this, ClockLocation *loc) +{ + BlinkData *data; + ClockMapPrivate *priv; + + priv = PRIVATE (this); + + g_return_if_fail (IS_CLOCK_MAP (this)); + g_return_if_fail (IS_CLOCK_LOCATION (loc)); + + data = g_new0 (BlinkData, 1); + data->map = this; + data->location = g_object_ref (loc); + + if (priv->highlight_timeout_id) { + g_source_remove (priv->highlight_timeout_id); + clock_map_place_locations (this); + } + + highlight (data); + + priv->highlight_timeout_id = g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, + 300, highlight, data, + highlight_destroy); +} + +static gboolean +clock_map_needs_refresh (ClockMap *this) +{ + ClockMapPrivate *priv = PRIVATE (this); + time_t now_t; + + time (&now_t); + + /* refresh once per minute */ + return (ABS (now_t - priv->last_refresh) >= 60); +} + +void +clock_map_update_time (ClockMap *this) +{ + + g_return_if_fail (IS_CLOCK_MAP (this)); + + if (!clock_map_needs_refresh (this)) { + return; + } + + clock_map_display (this); +} diff --git a/applets/clock/clock-map.h b/applets/clock/clock-map.h new file mode 100644 index 00000000..2b662c87 --- /dev/null +++ b/applets/clock/clock-map.h @@ -0,0 +1,43 @@ +#ifndef __CLOCK_MAP_H__ +#define __CLOCK_MAP_H__ + +#include "clock.h" +#include "clock-location.h" + +#include <gtk/gtk.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define CLOCK_MAP_TYPE (clock_map_get_type ()) +#define CLOCK_MAP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_MAP_TYPE, ClockMap)) +#define CLOCK_MAP_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_MAP_TYPE, ClockMapClass)) +#define IS_CLOCK_MAP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_MAP_TYPE)) +#define IS_CLOCK_MAP_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_MAP_TYPE)) +#define CLOCK_MAP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_MAP_TYPE, ClockMapClass)) + +typedef struct +{ + GtkWidget parent; +} ClockMap; + +typedef struct +{ + GtkWidgetClass parent_class; + + GList *(* need_locations) (ClockMap *map); +} ClockMapClass; + +GType clock_map_get_type (void); + +ClockMap *clock_map_new (void); +void clock_map_refresh (ClockMap *this); +void clock_map_update_time (ClockMap *this); +void clock_map_blink_location (ClockMap *this, ClockLocation *loc); + + +#ifdef __cplusplus +} +#endif +#endif /* __CLOCK_MAP_H__ */ diff --git a/applets/clock/clock-marshallers.list b/applets/clock/clock-marshallers.list new file mode 100644 index 00000000..8c4d3072 --- /dev/null +++ b/applets/clock/clock-marshallers.list @@ -0,0 +1,3 @@ +POINTER:VOID +VOID:OBJECT,STRING +INT:VOID diff --git a/applets/clock/clock-menu.xml b/applets/clock/clock-menu.xml new file mode 100644 index 00000000..abe0e071 --- /dev/null +++ b/applets/clock/clock-menu.xml @@ -0,0 +1,8 @@ +<menuitem name="Clock Copy Time Item" action="ClockCopyTime" /> +<menuitem name="Clock Copy Date Item" action="ClockCopyDate" /> +<separator/> +<menuitem name="Clock Configure Item" action="ClockConfig" /> +<menuitem name="Clock Preferences Item" action="ClockPreferences" /> +<menuitem name="Clock Help Item" action="ClockHelp" /> +<menuitem name="Clock About Item" action="ClockAbout" /> + diff --git a/applets/clock/clock-sunpos.c b/applets/clock/clock-sunpos.c new file mode 100644 index 00000000..2103fd90 --- /dev/null +++ b/applets/clock/clock-sunpos.c @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2007 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Jonathan Blandford <[email protected]> + * Matthias Clasen <[email protected]> + */ + +#include <time.h> +#include <gtk/gtk.h> +#include <math.h> +#include "clock-sunpos.h" + +/* Calculated with the methods and figures from "Practical Astronomy With Your + * Calculator, version 3" by Peter Duffet-Smith. + */ +/* Table 6. Details of the Sun's apparent matecorba at epoch 1990.0 */ + +#define EPOCH 2447891.5 /* days */ /* epoch 1990 */ +#define UNIX_EPOCH 2440586.5 /* days */ /* epoch 1970 */ +#define EPSILON_G 279.403303 /* degrees */ /* ecliptic longitude at epoch 1990.0 */ +#define MU_G 282.768422 /* degrees */ /* ecliptic longitude at perigee */ +#define ECCENTRICITY 0.016713 /* eccentricity of matecorba */ +#define R_0 149598500 /* km */ /* semi-major axis */ +#define THETA_0 0.533128 /* degrees */ /* angular diameter at r = r_0 */ +#define MEAN_OBLIQUITY 23.440592 /* degrees */ /* mean obliquity of earth's axis at epoch 1990.0 */ + +#define NORMALIZE(x) \ + while (x>360) x-=360; while (x<0) x+= 360; + +#define DEG_TO_RADS(x) \ + (x * G_PI/180.0) + +#define RADS_TO_DEG(x) \ + (x * 180.0/G_PI) + +/* Calculate number of days since 4713BC. + */ +static gdouble +unix_time_to_julian_date (gint unix_time) +{ + return UNIX_EPOCH + (double) unix_time / (60 * 60 * 24); +} + +/* Finds an iterative solution for [ E - e sin (E) = M ] for values of e less + than 0.1. Page 90 */ + +#define ERROR_ACCURACY 1e-6 /* radians */ + +static gdouble +solve_keplers_equation (gdouble e, + gdouble M) +{ + gdouble d, E; + + /* start with an initial estimate */ + E = M; + + d = E - e * sin (E) - M; + + while (ABS (d) > ERROR_ACCURACY) + { + E = E - (d / (1 - e * cos (E))); + d = E - e * sin (E) - M; + } + + return E; +} + + /* convert the ecliptic longitude to right ascension and declination. Section 27. */ +static void +ecliptic_to_equatorial (gdouble lambda, + gdouble beta, + gdouble *ra, + gdouble *dec) +{ + gdouble cos_mo; + gdouble sin_mo; + + g_assert (ra != NULL); + g_assert (dec != NULL); + + sin_mo = sin (DEG_TO_RADS (MEAN_OBLIQUITY)); + cos_mo = cos (DEG_TO_RADS (MEAN_OBLIQUITY)); + + *ra = atan2 (sin (lambda) * cos_mo - tan (beta) * sin_mo, cos (lambda)); + *dec = asin (sin (beta) * cos_mo + cos (beta) * sin_mo * sin (lambda)); +} + +/* calculate GST. Section 12 */ +static gdouble +greenwich_sidereal_time (gdouble unix_time) +{ + gdouble u, JD, T, T0, UT; + + u = fmod (unix_time, 24 * 60 * 60); + JD = unix_time_to_julian_date (unix_time - u); + T = (JD - 2451545) / 36525; + T0 = 6.697374558 + (2400.051336 * T) + (0.000025862 * T * T); + T0 = fmod (T0, 24); + UT = u / (60 * 60); + T0 = T0 + UT * 1.002737909; + T0 = fmod (T0, 24); + + return T0; +} + +/* Calculate the position of the sun at a given time. pages 89-91 */ +void +sun_position (time_t unix_time, gdouble *lat, gdouble *lon) +{ + gdouble jd, D, N, M, E, x, v, lambda; + gdouble ra, dec; + jd = unix_time_to_julian_date (unix_time); + + /* Calculate number of days since the epoch */ + D = jd - EPOCH; + + N = D*360/365.242191; + + /* normalize to 0 - 360 degrees */ + NORMALIZE (N); + + /* Step 4: */ + M = N + EPSILON_G - MU_G; + NORMALIZE (M); + + /* Step 5: convert to radians */ + M = DEG_TO_RADS (M); + + /* Step 6: */ + E = solve_keplers_equation (ECCENTRICITY, M); + + /* Step 7: */ + x = sqrt ((1 + ECCENTRICITY)/(1 - ECCENTRICITY)) * tan (E/2); + + /* Step 8, 9 */ + v = 2 * RADS_TO_DEG (atan (x)); + NORMALIZE (v); + + /* Step 10 */ + lambda = v + MU_G; + NORMALIZE (lambda); + + /* convert the ecliptic longitude to right ascension and declination */ + ecliptic_to_equatorial (DEG_TO_RADS (lambda), 0.0, &ra, &dec); + + ra = ra - (G_PI/12) * greenwich_sidereal_time (unix_time); + ra = RADS_TO_DEG (ra); + dec = RADS_TO_DEG (dec); + NORMALIZE (ra); + NORMALIZE (dec); + + *lat = dec; + *lon = ra; +} + + +#if 0 +int +main (int argc, char *argv[]) +{ + gint i; + gint now; + GTimeVal timeval; + gdouble lat, lon; + + gtk_init (&argc, &argv); + + g_get_current_time (&timeval); + now = timeval.tv_sec; + + for (i = 0; i < now; i += 15 * 60) + { + sun_position (i, &lat, &lon); + g_print ("%d: %f %f\n", lat, lon); + } + + return 0; +} + +#endif diff --git a/applets/clock/clock-sunpos.h b/applets/clock/clock-sunpos.h new file mode 100644 index 00000000..97124505 --- /dev/null +++ b/applets/clock/clock-sunpos.h @@ -0,0 +1,8 @@ +#ifndef __CLOCK_SUNPOS_H__ +#define __CLOCK_SUNPOS_H__ + +#include <glib.h> + +void sun_position(time_t unix_time, gdouble *lat, gdouble *lon); + +#endif diff --git a/applets/clock/clock-utils.c b/applets/clock/clock-utils.c new file mode 100644 index 00000000..c9581e00 --- /dev/null +++ b/applets/clock/clock-utils.c @@ -0,0 +1,127 @@ +/* + * clock-utils.c + * + * Copyright (C) 2007 Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Vincent Untz <[email protected]> + * + * Most of the original code comes from clock.c + */ + +#include "config.h" + +#ifdef HAVE_LANGINFO_H +#include <langinfo.h> +#endif + +#include <glib/gi18n.h> + +#include <gtk/gtk.h> + +#include "clock.h" + +#include "clock-utils.h" + +gboolean +clock_locale_supports_am_pm (void) +{ +#ifdef HAVE_NL_LANGINFO + const char *am; + + am = nl_langinfo (AM_STR); + return (am[0] != '\0'); +#else + return TRUE; +#endif +} + +ClockFormat +clock_locale_format (void) +{ + return clock_locale_supports_am_pm () ? + CLOCK_FORMAT_12 : CLOCK_FORMAT_24; +} + +void +clock_utils_display_help (GtkWidget *widget, + const char *doc_id, + const char *link_id) +{ + GError *error = NULL; + char *uri; + + if (link_id) + uri = g_strdup_printf ("ghelp:%s?%s", doc_id, link_id); + else + uri = g_strdup_printf ("ghelp:%s", doc_id); + + gtk_show_uri (gtk_widget_get_screen (widget), uri, + gtk_get_current_event_time (), &error); + + g_free (uri); + + if (error && + g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_error_free (error); + else if (error) { + GtkWidget *parent; + GtkWidget *dialog; + char *primary; + + if (GTK_IS_WINDOW (widget)) + parent = widget; + else + parent = NULL; + + primary = g_markup_printf_escaped ( + _("Could not display help document '%s'"), + doc_id); + dialog = gtk_message_dialog_new ( + parent ? GTK_WINDOW (parent) : NULL, + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + "%s", primary); + + gtk_message_dialog_format_secondary_text ( + GTK_MESSAGE_DIALOG (dialog), + "%s", error->message); + + g_error_free (error); + g_free (primary); + + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_widget_destroy), + NULL); + + gtk_window_set_icon_name (GTK_WINDOW (dialog), CLOCK_ICON); + gtk_window_set_screen (GTK_WINDOW (dialog), + gtk_widget_get_screen (widget)); + + if (parent == NULL) { + /* we have no parent window */ + gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), + FALSE); + gtk_window_set_title (GTK_WINDOW (dialog), + _("Error displaying help document")); + } + + gtk_widget_show (dialog); + } +} diff --git a/applets/clock/clock-utils.h b/applets/clock/clock-utils.h new file mode 100644 index 00000000..a185d9e2 --- /dev/null +++ b/applets/clock/clock-utils.h @@ -0,0 +1,57 @@ +/* + * clock-utils.h + * + * Copyright (C) 2007 Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Vincent Untz <[email protected]> + * + * Most of the original code comes from clock.c + */ + +#ifndef __CLOCK_UTILS_H__ +#define __CLOCK_UTILS_H__ + +#include <gtk/gtk.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Needs to match the indices in the combo of the prefs dialog */ +typedef enum { + CLOCK_FORMAT_INVALID = 0, + CLOCK_FORMAT_12, + CLOCK_FORMAT_24, + CLOCK_FORMAT_UNIX, + CLOCK_FORMAT_INTERNET, + CLOCK_FORMAT_CUSTOM +} ClockFormat; + +gboolean clock_locale_supports_am_pm (void); +ClockFormat clock_locale_format (void); + +void clock_utils_display_help (GtkWidget *widget, + const char *doc_id, + const char *link_id); + +#ifdef __cplusplus +} +#endif + +#endif /* __CLOCK_UTILS_H__ */ diff --git a/applets/clock/clock.c b/applets/clock/clock.c new file mode 100644 index 00000000..b4846009 --- /dev/null +++ b/applets/clock/clock.c @@ -0,0 +1,3745 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ +/* + * clock.c: the MATE clock applet + * + * Copyright (C) 1997-2003 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Miguel de Icaza + * Frederico Mena + * Stuart Parmenter + * Alexander Larsson + * George Lebl + * Gediminas Paulauskas + * Mark McLoughlin + */ + +#include "config.h" + +#include <stdio.h> +#include <sys/stat.h> +#include <unistd.h> +#include <dirent.h> +#include <string.h> +#include <time.h> +#include <sys/time.h> +#include <math.h> +#include <locale.h> + +#include <mate-panel-applet.h> +#include <mate-panel-applet-mateconf.h> + +#include <glib/gi18n.h> + +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> +#include <gdk/gdkx.h> +#include <mateconf/mateconf-client.h> + +#include <libmateweather/mateweather-prefs.h> +#include <libmateweather/mateweather-xml.h> +#include <libmateweather/location-entry.h> +#include <libmateweather/timezone-menu.h> + +#ifdef HAVE_LIBECAL +#include <libedataserverui/e-passwords.h> +#endif + +#include "clock.h" + +#include "calendar-window.h" +#include "clock-location.h" +#include "clock-location-tile.h" +#include "clock-map.h" +#include "clock-utils.h" +#include "set-timezone.h" +#include "system-timezone.h" + +#define INTERNETSECOND (864) +#define INTERNETBEAT (86400) + +#define NEVER_SENSITIVE "never_sensitive" + +#define N_MATECONF_PREFS 11 /* Keep this in sync with the number of keys below! */ +#define KEY_FORMAT "format" +#define KEY_SHOW_SECONDS "show_seconds" +#define KEY_SHOW_DATE "show_date" +#define KEY_SHOW_WEATHER "show_weather" +#define KEY_SHOW_TEMPERATURE "show_temperature" +#define KEY_CUSTOM_FORMAT "custom_format" +#define KEY_SHOW_WEEK "show_week_numbers" +#define KEY_CITIES "cities" +#define KEY_TEMPERATURE_UNIT "temperature_unit" +#define KEY_SPEED_UNIT "speed_unit" + +static MateConfEnumStringPair format_type_enum_map [] = { + { CLOCK_FORMAT_12, "12-hour" }, + { CLOCK_FORMAT_24, "24-hour" }, + { CLOCK_FORMAT_UNIX, "unix" }, + { CLOCK_FORMAT_INTERNET, "internet" }, + { CLOCK_FORMAT_CUSTOM, "custom" }, + { 0, NULL } +}; + +enum { + COL_CITY_NAME = 0, + COL_CITY_TZ, + COL_CITY_LOC, + COL_CITY_LAST +}; + +typedef struct _ClockData ClockData; + +struct _ClockData { + /* widgets */ + GtkWidget *applet; + + GtkWidget *panel_button; /* main toggle button for the whole clock */ + + GtkWidget *main_obox; /* orientable box inside panel_button */ + GtkWidget *weather_obox; /* orientable box for the weather widgets */ + + GtkWidget *clockw; /* main label for the date/time display */ + + GtkWidget *panel_weather_icon; + GtkWidget *panel_temperature_label; + + GtkWidget *props; + GtkWidget *calendar_popup; + + GtkWidget *clock_vbox; + GtkSizeGroup *clock_group; + + GtkBuilder *builder; + + /* Preferences dialog */ + GtkWidget *prefs_window; + GtkTreeView *prefs_locations; + + GtkWidget *prefs_location_add_button; + GtkWidget *prefs_location_edit_button; + GtkWidget *prefs_location_remove_button; + + MateWeatherLocationEntry *location_entry; + MateWeatherTimezoneMenu *zone_combo; + + GtkWidget *time_settings_button; + GtkWidget *calendar; + GtkWidget *hours_spin; + GtkWidget *minutes_spin; + GtkWidget *seconds_spin; + GtkWidget *set_time_button; + + GtkListStore *cities_store; + GtkWidget *cities_section; + GtkWidget *map_section; + GtkWidget *map_widget; + + /* Window to set the time */ + GtkWidget *set_time_window; + GtkWidget *current_time_label; + + /* preferences */ + ClockFormat format; + char *custom_format; + gboolean showseconds; + gboolean showdate; + gboolean showweek; + gboolean show_weather; + gboolean show_temperature; + + gboolean use_temperature_default; + gboolean use_speed_default; + TempUnit temperature_unit; + SpeedUnit speed_unit; + + /* Locations */ + GList *locations; + GList *location_tiles; + + /* runtime data */ + time_t current_time; + char *timeformat; + guint timeout; + MatePanelAppletOrient orient; + int size; + GtkAllocation old_allocation; + + SystemTimezone *systz; + + int fixed_width; + int fixed_height; + + GtkWidget *showseconds_check; + GtkWidget *showdate_check; + GtkWidget *custom_hbox; + GtkWidget *custom_label; + GtkWidget *custom_entry; + gboolean custom_format_shown; + + gboolean can_handle_format_12; + + guint listeners [N_MATECONF_PREFS]; +}; + +/* Used to count the number of clock instances. It's there to know when we + * should free resources that are shared. */ +static int clock_numbers = 0; + +static void update_clock (ClockData * cd); +static void update_tooltip (ClockData * cd); +static void update_panel_weather (ClockData *cd); +static int clock_timeout_callback (gpointer data); +static float get_itime (time_t current_time); + +static void set_atk_name_description (GtkWidget *widget, + const char *name, + const char *desc); +static void verb_display_properties_dialog (GtkAction *action, + ClockData *cd); + +static void display_properties_dialog (ClockData *cd, + gboolean start_in_locations_page); +static void display_help_dialog (GtkAction *action, + ClockData *cd); +static void display_about_dialog (GtkAction *action, + ClockData *cd); +static void position_calendar_popup (ClockData *cd); +static void update_orient (ClockData *cd); +static void applet_change_orient (MatePanelApplet *applet, + MatePanelAppletOrient orient, + ClockData *cd); + +static void edit_hide (GtkWidget *unused, ClockData *cd); +static gboolean edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd); +static void save_cities_store (ClockData *cd); + +/* ClockBox, an instantiable GtkBox */ + +typedef GtkBox ClockBox; +typedef GtkBoxClass ClockBoxClass; + +static GType clock_box_get_type (void); + +G_DEFINE_TYPE (ClockBox, clock_box, GTK_TYPE_BOX) + +static void +clock_box_init (ClockBox *box) +{ +} + +static void +clock_box_class_init (ClockBoxClass *klass) +{ +} + +/* Clock */ + +static inline GtkWidget * +_clock_get_widget (ClockData *cd, + const char *name) +{ + return GTK_WIDGET (gtk_builder_get_object (cd->builder, name)); +} + +static void +unfix_size (ClockData *cd) +{ + cd->fixed_width = -1; + cd->fixed_height = -1; + gtk_widget_queue_resize (cd->panel_button); +} + +static int +calculate_minimum_width (GtkWidget *widget, + const gchar *text) +{ + PangoContext *context; + PangoLayout *layout; + int width, height; + int focus_width = 0; + int focus_pad = 0; + + context = gtk_widget_get_pango_context (widget); + + layout = pango_layout_new (context); + pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT); + pango_layout_set_text (layout, text, -1); + pango_layout_get_pixel_size (layout, &width, &height); + g_object_unref (G_OBJECT (layout)); + layout = NULL; + + gtk_widget_style_get (widget, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + NULL); + + width += 2 * (focus_width + focus_pad + gtk_widget_get_style (widget)->xthickness); + + return width; +} + +static void +clock_set_timeout (ClockData *cd, + time_t now) +{ + int timeouttime; + + if (cd->format == CLOCK_FORMAT_INTERNET) { + int itime_ms; + + itime_ms = ((unsigned int) (get_itime (now) * 1000)); + + if (!cd->showseconds) + timeouttime = (999 - itime_ms % 1000) * 86.4 + 1; + else { + struct timeval tv; + gettimeofday (&tv, NULL); + itime_ms += (tv.tv_usec * 86.4) / 1000; + timeouttime = ((999 - itime_ms % 1000) * 86.4) / 100 + 1; + } + } else { + struct timeval tv; + + gettimeofday (&tv, NULL); + timeouttime = (G_USEC_PER_SEC - tv.tv_usec)/1000+1; + + /* timeout of one minute if we don't care about the seconds */ + if (cd->format != CLOCK_FORMAT_UNIX && + !cd->showseconds && + (!cd->set_time_window || !gtk_widget_get_visible (cd->set_time_window))) + timeouttime += 1000 * (59 - now % 60); + } + + cd->timeout = g_timeout_add (timeouttime, + clock_timeout_callback, + cd); +} + +static int +clock_timeout_callback (gpointer data) +{ + ClockData *cd = data; + time_t new_time; + + time (&new_time); + + if (!cd->showseconds && + (!cd->set_time_window || !gtk_widget_get_visible (cd->set_time_window)) && + cd->format != CLOCK_FORMAT_UNIX && + cd->format != CLOCK_FORMAT_CUSTOM) { + if (cd->format == CLOCK_FORMAT_INTERNET && + (unsigned int)get_itime (new_time) != + (unsigned int)get_itime (cd->current_time)) { + update_clock (cd); + } else if ((cd->format == CLOCK_FORMAT_12 || + cd->format == CLOCK_FORMAT_24) && + new_time / 60 != cd->current_time / 60) { + update_clock (cd); + } + } else { + update_clock (cd); + } + + clock_set_timeout (cd, new_time); + + return FALSE; +} + +static float +get_itime (time_t current_time) +{ + struct tm *tm; + float itime; + time_t bmt; + + /* BMT (Biel Mean Time) is GMT+1 */ + bmt = current_time + 3600; + tm = gmtime (&bmt); + itime = (tm->tm_hour*3600.0 + tm->tm_min*60.0 + tm->tm_sec)/86.4; + + return itime; +} + +/* adapted from panel-toplevel.c */ +static int +calculate_minimum_height (GtkWidget *widget, + MatePanelAppletOrient orientation) +{ + GtkStyle *style; + PangoContext *context; + PangoFontMetrics *metrics; + int focus_width = 0; + int focus_pad = 0; + int ascent; + int descent; + int thickness; + + style = gtk_widget_get_style (widget); + context = gtk_widget_get_pango_context (widget); + metrics = pango_context_get_metrics (context, + style->font_desc, + pango_context_get_language (context)); + + ascent = pango_font_metrics_get_ascent (metrics); + descent = pango_font_metrics_get_descent (metrics); + + pango_font_metrics_unref (metrics); + + gtk_widget_style_get (widget, + "focus-line-width", &focus_width, + "focus-padding", &focus_pad, + NULL); + + if (orientation == MATE_PANEL_APPLET_ORIENT_UP + || orientation == MATE_PANEL_APPLET_ORIENT_DOWN) { + thickness = style->ythickness; + } else { + thickness = style->xthickness; + } + + return PANGO_PIXELS (ascent + descent) + 2 * (focus_width + focus_pad + thickness); +} + +static gboolean +use_two_line_format (ClockData *cd) +{ + if (cd->size >= 2 * calculate_minimum_height (cd->panel_button, cd->orient)) + return TRUE; + + return FALSE; +} + +static char * +get_updated_timeformat (ClockData *cd) +{ + /* Show date in another line if panel is vertical, or + * horizontal but large enough to hold two lines of text + */ + char *result; + const char *time_format; + const char *date_format; + char *clock_format; + + if (cd->format == CLOCK_FORMAT_12) + /* Translators: This is a strftime format string. + * It is used to display the time in 12-hours format (eg, like + * in the US: 8:10 am). The %p expands to am/pm. */ + time_format = cd->showseconds ? _("%l:%M:%S %p") : _("%l:%M %p"); + else + /* Translators: This is a strftime format string. + * It is used to display the time in 24-hours format (eg, like + * in France: 20:10). */ + time_format = cd->showseconds ? _("%H:%M:%S") : _("%H:%M"); + + if (!cd->showdate) + clock_format = g_strdup (time_format); + + else { + /* Translators: This is a strftime format string. + * It is used to display the date. Replace %e with %d if, when + * the day of the month as a decimal number is a single digit, + * it should begin with a 0 in your locale (e.g. "May 01" + * instead of "May 1"). */ + date_format = _("%a %b %e"); + + if (use_two_line_format (cd)) + /* translators: reverse the order of these arguments + * if the time should come before the + * date on a clock in your locale. + */ + clock_format = g_strdup_printf (_("%1$s\n%2$s"), + date_format, + time_format); + else + /* translators: reverse the order of these arguments + * if the time should come before the + * date on a clock in your locale. + */ + clock_format = g_strdup_printf (_("%1$s, %2$s"), + date_format, + time_format); + } + + result = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL); + g_free (clock_format); + + /* let's be paranoid */ + if (!result) + result = g_strdup ("???"); + + return result; +} + +static void +update_timeformat (ClockData *cd) +{ + g_free (cd->timeformat); + cd->timeformat = get_updated_timeformat (cd); +} + +/* sets accessible name and description for the widget */ +static void +set_atk_name_description (GtkWidget *widget, + const char *name, + const char *desc) +{ + AtkObject *obj; + obj = gtk_widget_get_accessible (widget); + + /* return if gail is not loaded */ + if (!GTK_IS_ACCESSIBLE (obj)) + return; + + if (desc != NULL) + atk_object_set_description (obj, desc); + if (name != NULL) + atk_object_set_name (obj, name); +} + +static void +update_location_tiles (ClockData *cd) +{ + GList *l; + + for (l = cd->location_tiles; l; l = l->next) { + ClockLocationTile *tile; + + tile = CLOCK_LOCATION_TILE (l->data); + clock_location_tile_refresh (tile, FALSE); + } +} + +static char * +format_time (ClockData *cd) +{ + struct tm *tm; + char hour[256]; + char *utf8; + + utf8 = NULL; + + tm = localtime (&cd->current_time); + + if (cd->format == CLOCK_FORMAT_UNIX) { + if (use_two_line_format (cd)) { + utf8 = g_strdup_printf ("%lu\n%05lu", + (unsigned long)(cd->current_time / 100000L), + (unsigned long)(cd->current_time % 100000L)); + } else { + utf8 = g_strdup_printf ("%lu", + (unsigned long)cd->current_time); + } + } else if (cd->format == CLOCK_FORMAT_INTERNET) { + float itime = get_itime (cd->current_time); + if (cd->showseconds) + utf8 = g_strdup_printf ("@%3.2f", itime); + else + utf8 = g_strdup_printf ("@%3d", (unsigned int) itime); + } else if (cd->format == CLOCK_FORMAT_CUSTOM) { + char *timeformat = g_locale_from_utf8 (cd->custom_format, -1, + NULL, NULL, NULL); + if (!timeformat) + strcpy (hour, "???"); + else if (strftime (hour, sizeof (hour), timeformat, tm) <= 0) + strcpy (hour, "???"); + g_free (timeformat); + + utf8 = g_locale_to_utf8 (hour, -1, NULL, NULL, NULL); + } else { + if (strftime (hour, sizeof (hour), cd->timeformat, tm) <= 0) + strcpy (hour, "???"); + + utf8 = g_locale_to_utf8 (hour, -1, NULL, NULL, NULL); + } + + if (!utf8) + utf8 = g_strdup (hour); + + return utf8; +} + +static gchar * +format_time_24 (ClockData *cd) +{ + struct tm *tm; + gchar buf[128]; + + tm = localtime (&cd->current_time); + strftime (buf, sizeof (buf) - 1, "%k:%M:%S", tm); + return g_locale_to_utf8 (buf, -1, NULL, NULL, NULL); +} + +static void +update_clock (ClockData * cd) +{ + gboolean use_markup; + char *utf8; + + use_markup = FALSE; + + time (&cd->current_time); + utf8 = format_time (cd); + + use_markup = FALSE; + if (pango_parse_markup (utf8, -1, 0, NULL, NULL, NULL, NULL)) + use_markup = TRUE; + + if (use_markup) + gtk_label_set_markup (GTK_LABEL (cd->clockw), utf8); + else + gtk_label_set_text (GTK_LABEL (cd->clockw), utf8); + + g_free (utf8); + + update_orient (cd); + gtk_widget_queue_resize (cd->panel_button); + + update_tooltip (cd); + update_location_tiles (cd); + + if (cd->map_widget && cd->calendar_popup && gtk_widget_get_visible (cd->calendar_popup)) + clock_map_update_time (CLOCK_MAP (cd->map_widget)); + + if (cd->current_time_label && + gtk_widget_get_visible (cd->current_time_label)) { + utf8 = format_time_24 (cd); + gtk_label_set_text (GTK_LABEL (cd->current_time_label), utf8); + g_free (utf8); + } +} + +static void +update_tooltip (ClockData * cd) +{ + if (!cd->showdate) { + struct tm *tm; + char date[256]; + char *utf8, *loc; + char *zone; + time_t now_t; + struct tm now; + char *tip; + + tm = localtime (&cd->current_time); + + utf8 = NULL; + + /* Show date in tooltip. */ + /* Translators: This is a strftime format string. + * It is used to display a date. Please leave "%%s" as it is: + * it will be used to insert the timezone name later. */ + loc = g_locale_from_utf8 (_("%A %B %d (%%s)"), -1, NULL, NULL, NULL); + if (!loc) + strcpy (date, "???"); + else if (strftime (date, sizeof (date), loc, tm) <= 0) + strcpy (date, "???"); + g_free (loc); + + utf8 = g_locale_to_utf8 (date, -1, NULL, NULL, NULL); + + /* Add the timezone name */ + + tzset (); + time (&now_t); + localtime_r (&now_t, &now); + + if (now.tm_isdst > 0) { + zone = tzname[1]; + } else { + zone = tzname[0]; + } + + tip = g_strdup_printf (utf8, zone); + + gtk_widget_set_tooltip_text (cd->panel_button, tip); + g_free (utf8); + g_free (tip); + } else { +#ifdef HAVE_LIBECAL + if (cd->calendar_popup) + gtk_widget_set_tooltip_text (cd->panel_button, + _("Click to hide your appointments and tasks")); + else + gtk_widget_set_tooltip_text (cd->panel_button, + _("Click to view your appointments and tasks")); +#else + if (cd->calendar_popup) + gtk_widget_set_tooltip_text (cd->panel_button, + _("Click to hide month calendar")); + else + gtk_widget_set_tooltip_text (cd->panel_button, + _("Click to view month calendar")); +#endif + } +} + +static void +refresh_clock (ClockData *cd) +{ + unfix_size (cd); + update_clock (cd); +} + +static void +refresh_clock_timeout(ClockData *cd) +{ + unfix_size (cd); + + update_timeformat (cd); + + if (cd->timeout) + g_source_remove (cd->timeout); + + update_clock (cd); + + clock_set_timeout (cd, cd->current_time); +} + +/** + * This is like refresh_clock_timeout(), except that we only care about whether + * the time actually changed. We don't care about the format. + */ +static void +refresh_click_timeout_time_only (ClockData *cd) +{ + if (cd->timeout) + g_source_remove (cd->timeout); + clock_timeout_callback (cd); +} + +static void +free_locations (ClockData *cd) +{ + GList *l; + + for (l = cd->locations; l; l = l->next) + g_object_unref (l->data); + + g_list_free (cd->locations); + cd->locations = NULL; +} + +static void +destroy_clock (GtkWidget * widget, ClockData *cd) +{ + MateConfClient *client; + int i; + + client = mateconf_client_get_default (); + + for (i = 0; i < N_MATECONF_PREFS; i++) + mateconf_client_notify_remove ( + client, cd->listeners [i]); + + g_object_unref (G_OBJECT (client)); + + if (cd->timeout) + g_source_remove (cd->timeout); + cd->timeout = 0; + + if (cd->props) + gtk_widget_destroy (cd->props); + cd->props = NULL; + + if (cd->calendar_popup) + gtk_widget_destroy (cd->calendar_popup); + cd->calendar_popup = NULL; + + g_free (cd->timeformat); + g_free (cd->custom_format); + + free_locations (cd); + + g_list_free (cd->location_tiles); + cd->location_tiles = NULL; + + if (cd->systz) { + g_object_unref (cd->systz); + cd->systz = NULL; + } + + if (cd->cities_store) { + g_object_unref (cd->cities_store); + cd->cities_store = NULL; + } + + if (cd->builder) { + g_object_unref (cd->builder); + cd->builder = NULL; + } + + g_free (cd); + +#ifdef HAVE_LIBECAL + if (clock_numbers > 0) { + e_passwords_shutdown (); + clock_numbers--; + } +#endif +} + +static gboolean +close_on_escape (GtkWidget *widget, + GdkEventKey *event, + GtkToggleButton *toggle_button) +{ + if (event->keyval == GDK_Escape) { + gtk_toggle_button_set_active (toggle_button, FALSE); + return TRUE; + } + + return FALSE; +} + +static gboolean +delete_event (GtkWidget *widget, + GdkEvent *event, + GtkToggleButton *toggle_button) +{ + gtk_toggle_button_set_active (toggle_button, FALSE); + return TRUE; +} + +static void +edit_locations_cb (CalendarWindow *calwin, gpointer data) +{ + ClockData *cd; + + cd = data; + + display_properties_dialog (cd, TRUE); +} + +static GtkWidget * +create_calendar (ClockData *cd) +{ + GtkWidget *window; + char *prefs_dir; + + prefs_dir = mate_panel_applet_get_preferences_key (MATE_PANEL_APPLET (cd->applet)); + window = calendar_window_new (&cd->current_time, + prefs_dir, + cd->orient == MATE_PANEL_APPLET_ORIENT_UP); + g_free (prefs_dir); + + calendar_window_set_show_weeks (CALENDAR_WINDOW (window), + cd->showweek); + calendar_window_set_time_format (CALENDAR_WINDOW (window), + cd->format); + + gtk_window_set_screen (GTK_WINDOW (window), + gtk_widget_get_screen (cd->applet)); + + g_signal_connect (window, "edit-locations", + G_CALLBACK (edit_locations_cb), cd); + + g_signal_connect (window, "delete_event", + G_CALLBACK (delete_event), cd->panel_button); + g_signal_connect (window, "key_press_event", + G_CALLBACK (close_on_escape), cd->panel_button); + + return window; +} + +static void +position_calendar_popup (ClockData *cd) +{ + GtkRequisition req; + GtkAllocation allocation; + GdkScreen *screen; + GdkRectangle monitor; + GdkGravity gravity = GDK_GRAVITY_NORTH_WEST; + int button_w, button_h; + int x, y; + int w, h; + int i, n; + gboolean found_monitor = FALSE; + + /* Get root origin of the toggle button, and position above that. */ + gdk_window_get_origin (gtk_widget_get_window (cd->panel_button), + &x, &y); + + gtk_window_get_size (GTK_WINDOW (cd->calendar_popup), &w, &h); + gtk_widget_size_request (cd->calendar_popup, &req); + w = req.width; + h = req.height; + + gtk_widget_get_allocation (cd->panel_button, &allocation); + button_w = allocation.width; + button_h = allocation.height; + + screen = gtk_window_get_screen (GTK_WINDOW (cd->calendar_popup)); + + n = gdk_screen_get_n_monitors (screen); + for (i = 0; i < n; i++) { + gdk_screen_get_monitor_geometry (screen, i, &monitor); + if (x >= monitor.x && x <= monitor.x + monitor.width && + y >= monitor.y && y <= monitor.y + monitor.height) { + found_monitor = TRUE; + break; + } + } + + if (!found_monitor) { + /* eek, we should be on one of those xinerama + monitors */ + monitor.x = 0; + monitor.y = 0; + monitor.width = gdk_screen_get_width (screen); + monitor.height = gdk_screen_get_height (screen); + } + + /* Based on panel orientation, position the popup. + * Ignore window gravity since the window is undecorated. + * The orientations are all named backward from what + * I expected. + */ + switch (cd->orient) { + case MATE_PANEL_APPLET_ORIENT_RIGHT: + x += button_w; + if ((y + h) > monitor.y + monitor.height) + y -= (y + h) - (monitor.y + monitor.height); + + if ((y + h) > (monitor.height / 2)) + gravity = GDK_GRAVITY_SOUTH_WEST; + else + gravity = GDK_GRAVITY_NORTH_WEST; + + break; + case MATE_PANEL_APPLET_ORIENT_LEFT: + x -= w; + if ((y + h) > monitor.y + monitor.height) + y -= (y + h) - (monitor.y + monitor.height); + + if ((y + h) > (monitor.height / 2)) + gravity = GDK_GRAVITY_SOUTH_EAST; + else + gravity = GDK_GRAVITY_NORTH_EAST; + + break; + case MATE_PANEL_APPLET_ORIENT_DOWN: + y += button_h; + if ((x + w) > monitor.x + monitor.width) + x -= (x + w) - (monitor.x + monitor.width); + + gravity = GDK_GRAVITY_NORTH_WEST; + + break; + case MATE_PANEL_APPLET_ORIENT_UP: + y -= h; + if ((x + w) > monitor.x + monitor.width) + x -= (x + w) - (monitor.x + monitor.width); + + gravity = GDK_GRAVITY_SOUTH_WEST; + + break; + } + + gtk_window_move (GTK_WINDOW (cd->calendar_popup), x, y); + gtk_window_set_gravity (GTK_WINDOW (cd->calendar_popup), gravity); +} + +static void +add_to_group (GtkWidget *child, gpointer data) +{ + GtkSizeGroup *group = data; + + gtk_size_group_add_widget (group, child); +} + +static void +create_clock_window (ClockData *cd) +{ + GtkWidget *locations_box; + + locations_box = calendar_window_get_locations_box (CALENDAR_WINDOW (cd->calendar_popup)); + gtk_widget_show (locations_box); + + cd->clock_vbox = gtk_vbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (locations_box), cd->clock_vbox); + + cd->clock_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + gtk_size_group_set_ignore_hidden (cd->clock_group, FALSE); + + gtk_container_foreach (GTK_CONTAINER (locations_box), + (GtkCallback) add_to_group, + cd->clock_group); +} + +static gint +sort_locations_by_name (gconstpointer a, gconstpointer b) +{ + ClockLocation *loc_a = (ClockLocation *) a; + ClockLocation *loc_b = (ClockLocation *) b; + + const char *name_a = clock_location_get_display_name (loc_a); + const char *name_b = clock_location_get_display_name (loc_b); + + return strcmp (name_a, name_b); +} + +static void +create_cities_store (ClockData *cd) +{ + GtkTreeIter iter; + GList *cities = cd->locations; + GList *list = NULL; + + if (cd->cities_store) { + g_object_unref (G_OBJECT (cd->cities_store)); + cd->cities_store = NULL; + } + + /* City name, Timezone name, Coordinates in lat/long */ + cd->cities_store = g_object_ref (gtk_list_store_new (COL_CITY_LAST, + G_TYPE_STRING, /* COL_CITY_NAME */ + G_TYPE_STRING, /* COL_CITY_TZ */ + CLOCK_LOCATION_TYPE)); /* COL_CITY_LOC */ + + list = g_list_copy (cities); + list = g_list_sort (list, sort_locations_by_name); + + while (list) { + ClockLocation *loc = CLOCK_LOCATION (list->data); + + gtk_list_store_append (cd->cities_store, &iter); + gtk_list_store_set (cd->cities_store, &iter, + COL_CITY_NAME, clock_location_get_display_name (loc), + /* FIXME: translate the timezone */ + COL_CITY_TZ, clock_location_get_timezone (loc), + COL_CITY_LOC, loc, + -1); + + list = list->next; + } + + + if (cd->prefs_window) { + GtkWidget *widget = _clock_get_widget (cd, "cities_list"); + gtk_tree_view_set_model (GTK_TREE_VIEW (widget), + GTK_TREE_MODEL (cd->cities_store)); + } +} + +static gint +sort_locations_by_time (gconstpointer a, gconstpointer b) +{ + ClockLocation *loc_a = (ClockLocation *) a; + ClockLocation *loc_b = (ClockLocation *) b; + + struct tm tm_a; + struct tm tm_b; + gint ret; + + clock_location_localtime (loc_a, &tm_a); + clock_location_localtime (loc_b, &tm_b); + + ret = (tm_a.tm_year == tm_b.tm_year) ? 0 : 1; + if (ret) { + return (tm_a.tm_year < tm_b.tm_year) ? -1 : 1; + } + + ret = (tm_a.tm_mon == tm_b.tm_mon) ? 0 : 1; + if (ret) { + return (tm_a.tm_mon < tm_b.tm_mon) ? -1 : 1; + } + + ret = (tm_a.tm_mday == tm_b.tm_mday) ? 0 : 1; + if (ret) { + return (tm_a.tm_mday < tm_b.tm_mday) ? -1 : 1; + } + + ret = (tm_a.tm_hour == tm_b.tm_hour) ? 0 : 1; + if (ret) { + return (tm_a.tm_hour < tm_b.tm_hour) ? -1 : 1; + } + + ret = (tm_a.tm_min == tm_b.tm_min) ? 0 : 1; + if (ret) { + return (tm_a.tm_min < tm_b.tm_min) ? -1 : 1; + } + + ret = (tm_a.tm_sec == tm_b.tm_sec) ? 0 : 1; + if (ret) { + return (tm_a.tm_sec < tm_b.tm_sec) ? -1 : 1; + } + + return ret; +} + +static void +location_tile_pressed_cb (ClockLocationTile *tile, gpointer data) +{ + ClockData *cd = data; + ClockLocation *loc; + + loc = clock_location_tile_get_location (tile); + + clock_map_blink_location (CLOCK_MAP (cd->map_widget), loc); + + g_object_unref (loc); +} + +static ClockFormat +location_tile_need_clock_format_cb(ClockLocationTile *tile, gpointer data) +{ + ClockData *cd = data; + + return cd->format; +} + +static void +create_cities_section (ClockData *cd) +{ + GList *node; + ClockLocationTile *city; + GList *cities; + + if (cd->cities_section) { + gtk_widget_destroy (cd->cities_section); + cd->cities_section = NULL; + } + + g_list_free (cd->location_tiles); + cd->location_tiles = NULL; + + cd->cities_section = gtk_vbox_new (FALSE, 6); + gtk_container_set_border_width (GTK_CONTAINER (cd->cities_section), 0); + + cities = cd->locations; + if (g_list_length (cities) == 0) { + /* if the list is empty, don't bother showing the + cities section */ + gtk_widget_hide (cd->cities_section); + return; + } + + /* Copy the existing list, so we can sort it nondestructively */ + node = g_list_copy (cities); + node = g_list_sort (node, sort_locations_by_time); + node = g_list_reverse (node); + + while (node) { + ClockLocation *loc = node->data; + + city = clock_location_tile_new (loc, CLOCK_FACE_SMALL); + g_signal_connect (city, "tile-pressed", + G_CALLBACK (location_tile_pressed_cb), cd); + g_signal_connect (city, "need-clock-format", + G_CALLBACK (location_tile_need_clock_format_cb), cd); + + gtk_box_pack_start (GTK_BOX (cd->cities_section), + GTK_WIDGET (city), + FALSE, FALSE, 0); + + cd->location_tiles = g_list_prepend (cd->location_tiles, city); + + clock_location_tile_refresh (city, TRUE); + + node = g_list_next (node); + } + + g_list_free (node); + + gtk_box_pack_end (GTK_BOX (cd->clock_vbox), + cd->cities_section, FALSE, FALSE, 0); + + gtk_widget_show_all (cd->cities_section); +} + +static GList * +map_need_locations_cb (ClockMap *map, gpointer data) +{ + ClockData *cd = data; + + return cd->locations; +} + +static void +create_map_section (ClockData *cd) +{ + ClockMap *map; + + if (cd->map_widget) { + gtk_widget_destroy (GTK_WIDGET (cd->map_section)); + cd->map_widget = NULL; + } + + map = clock_map_new (); + g_signal_connect (map, "need-locations", + G_CALLBACK (map_need_locations_cb), cd); + + cd->map_section = gtk_alignment_new (0, 0, 1, 1); + cd->map_widget = GTK_WIDGET (map); + + gtk_container_add (GTK_CONTAINER (cd->map_section), cd->map_widget); + + gtk_alignment_set_padding (GTK_ALIGNMENT (cd->map_section), 1, 1, 1, 1); + + gtk_box_pack_start (GTK_BOX (cd->clock_vbox), cd->map_section, FALSE, FALSE, 0); + gtk_widget_show (cd->map_widget); + gtk_widget_show (cd->map_section); +} + +static void +update_calendar_popup (ClockData *cd) +{ + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->panel_button))) { + if (cd->calendar_popup) { + gtk_widget_destroy (cd->calendar_popup); + cd->calendar_popup = NULL; + cd->cities_section = NULL; + cd->map_section = NULL; + cd->map_widget = NULL; + cd->clock_vbox = NULL; + + g_list_free (cd->location_tiles); + cd->location_tiles = NULL; + } + update_tooltip (cd); + return; + } + + if (!cd->calendar_popup) { + cd->calendar_popup = create_calendar (cd); + g_object_add_weak_pointer (G_OBJECT (cd->calendar_popup), + (gpointer *) &cd->calendar_popup); + update_tooltip (cd); + + create_clock_window (cd); + create_cities_store (cd); + create_cities_section (cd); + create_map_section (cd); + } + + if (cd->calendar_popup && gtk_widget_get_realized (cd->panel_button)) { + calendar_window_refresh (CALENDAR_WINDOW (cd->calendar_popup)); + position_calendar_popup (cd); + gtk_window_present (GTK_WINDOW (cd->calendar_popup)); + } +} + +static void +toggle_calendar (GtkWidget *button, + ClockData *cd) +{ + /* if time is wrong, the user might try to fix it by clicking on the + * clock */ + refresh_click_timeout_time_only (cd); + update_calendar_popup (cd); +} + +static gboolean +do_not_eat_button_press (GtkWidget *widget, + GdkEventButton *event) +{ + if (event->button != 1) + g_signal_stop_emission_by_name (widget, "button_press_event"); + + return FALSE; +} + +/* Don't request smaller size then the last one we did, this avoids + jumping when proportional fonts are used. We must take care to + call "unfix_size" whenever options are changed or such where + we'd want to forget the fixed size */ +static void +clock_size_request (GtkWidget *clock, GtkRequisition *req, gpointer data) +{ + ClockData *cd = data; + + if (req->width > cd->fixed_width) + cd->fixed_width = req->width; + if (req->height > cd->fixed_height) + cd->fixed_height = req->height; + req->width = cd->fixed_width; + req->height = cd->fixed_height; +} + +static void +clock_update_text_gravity (GtkWidget *label) +{ + PangoLayout *layout; + PangoContext *context; + + layout = gtk_label_get_layout (GTK_LABEL (label)); + context = pango_layout_get_context (layout); + pango_context_set_base_gravity (context, PANGO_GRAVITY_AUTO); +} + +static inline void +force_no_focus_padding (GtkWidget *widget) +{ + static gboolean first_time = TRUE; + + if (first_time) { + gtk_rc_parse_string ("\n" + " style \"clock-applet-button-style\"\n" + " {\n" + " GtkWidget::focus-line-width=0\n" + " GtkWidget::focus-padding=0\n" + " }\n" + "\n" + " widget \"*.clock-applet-button\" style \"clock-applet-button-style\"\n" + "\n"); + first_time = FALSE; + } + + gtk_widget_set_name (widget, "clock-applet-button"); +} + +static GtkWidget * +create_main_clock_button (void) +{ + GtkWidget *button; + + button = gtk_toggle_button_new (); + gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); + + force_no_focus_padding (button); + + return button; +} + +static GtkWidget * +create_main_clock_label (ClockData *cd) +{ + GtkWidget *label; + + label = gtk_label_new (NULL); + g_signal_connect (label, "size_request", + G_CALLBACK (clock_size_request), + cd); + g_signal_connect_swapped (label, "style_set", + G_CALLBACK (unfix_size), + cd); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); + clock_update_text_gravity (label); + g_signal_connect (label, "screen-changed", + G_CALLBACK (clock_update_text_gravity), + NULL); + + return label; +} + +static gboolean +weather_tooltip (GtkWidget *widget, + gint x, + gint y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + ClockData *cd) +{ + GList *locations, *l; + WeatherInfo *info; + + locations = cd->locations; + + for (l = locations; l; l = l->next) { + ClockLocation *location = l->data; + if (clock_location_is_current (location)) { + info = clock_location_get_weather_info (location); + if (!info || !weather_info_is_valid (info)) + continue; + + weather_info_setup_tooltip (info, location, tooltip, cd->format); + + return TRUE; + } + } + + return FALSE; +} + +static void +create_clock_widget (ClockData *cd) +{ +#ifdef HAVE_LIBECAL + clock_numbers++; + e_passwords_init (); +#endif + + /* Main toggle button */ + cd->panel_button = create_main_clock_button (); + g_signal_connect (cd->panel_button, "button_press_event", + G_CALLBACK (do_not_eat_button_press), NULL); + g_signal_connect (cd->panel_button, "toggled", + G_CALLBACK (toggle_calendar), cd); + g_signal_connect (G_OBJECT (cd->panel_button), "destroy", + G_CALLBACK (destroy_clock), + cd); + gtk_widget_show (cd->panel_button); + + /* Main orientable box */ + cd->main_obox = g_object_new (clock_box_get_type (), NULL); + gtk_box_set_spacing (GTK_BOX (cd->main_obox), 12); /* spacing between weather and time */ + gtk_container_add (GTK_CONTAINER (cd->panel_button), cd->main_obox); + gtk_widget_show (cd->main_obox); + + /* Weather orientable box */ + cd->weather_obox = g_object_new (clock_box_get_type (), NULL); + gtk_box_set_spacing (GTK_BOX (cd->weather_obox), 2); /* spacing between weather icon and temperature */ + gtk_box_pack_start (GTK_BOX (cd->main_obox), cd->weather_obox, FALSE, FALSE, 0); + gtk_widget_set_has_tooltip (cd->weather_obox, TRUE); + g_signal_connect (cd->weather_obox, "query-tooltip", + G_CALLBACK (weather_tooltip), cd); + + /* Weather widgets */ + cd->panel_weather_icon = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (cd->weather_obox), cd->panel_weather_icon, FALSE, FALSE, 0); + + cd->panel_temperature_label = gtk_label_new (NULL); + gtk_box_pack_start (GTK_BOX (cd->weather_obox), cd->panel_temperature_label, FALSE, FALSE, 0); + + /* Main label for time display */ + cd->clockw = create_main_clock_label (cd); + gtk_box_pack_start (GTK_BOX (cd->main_obox), cd->clockw, FALSE, FALSE, 0); + gtk_widget_show (cd->clockw); + + /* Done! */ + + set_atk_name_description (GTK_WIDGET (cd->applet), NULL, + _("Computer Clock")); + + gtk_container_add (GTK_CONTAINER (cd->applet), cd->panel_button); + gtk_container_set_border_width (GTK_CONTAINER (cd->applet), 0); + + cd->props = NULL; + cd->orient = -1; + cd->size = mate_panel_applet_get_size (MATE_PANEL_APPLET (cd->applet)); + + update_panel_weather (cd); + + /* Refresh the clock so that it paints its first state */ + refresh_clock_timeout (cd); + applet_change_orient (MATE_PANEL_APPLET (cd->applet), + mate_panel_applet_get_orient (MATE_PANEL_APPLET (cd->applet)), + cd); +} + +static void +update_orient (ClockData *cd) +{ + const gchar *text; + int min_width; + GtkAllocation allocation; + gdouble new_angle; + gdouble angle; + + text = gtk_label_get_text (GTK_LABEL (cd->clockw)); + min_width = calculate_minimum_width (cd->panel_button, text); + gtk_widget_get_allocation (cd->panel_button, &allocation); + + if (cd->orient == MATE_PANEL_APPLET_ORIENT_LEFT && + min_width > allocation.width) + new_angle = 270; + else if (cd->orient == MATE_PANEL_APPLET_ORIENT_RIGHT && + min_width > allocation.width) + new_angle = 90; + else + new_angle = 0; + + angle = gtk_label_get_angle (GTK_LABEL (cd->clockw)); + if (angle != new_angle) { + unfix_size (cd); + gtk_label_set_angle (GTK_LABEL (cd->clockw), new_angle); + gtk_label_set_angle (GTK_LABEL (cd->panel_temperature_label), new_angle); + } +} + +/* this is when the panel orientation changes */ +static void +applet_change_orient (MatePanelApplet *applet, + MatePanelAppletOrient orient, + ClockData *cd) +{ + GtkOrientation o; + + if (orient == cd->orient) + return; + + cd->orient = orient; + + switch (cd->orient) { + case MATE_PANEL_APPLET_ORIENT_RIGHT: + o = GTK_ORIENTATION_VERTICAL; + break; + case MATE_PANEL_APPLET_ORIENT_LEFT: + o = GTK_ORIENTATION_VERTICAL; + break; + case MATE_PANEL_APPLET_ORIENT_DOWN: + o = GTK_ORIENTATION_HORIZONTAL; + break; + case MATE_PANEL_APPLET_ORIENT_UP: + o = GTK_ORIENTATION_HORIZONTAL; + break; + default: + g_assert_not_reached (); + return; + } + + gtk_orientable_set_orientation (GTK_ORIENTABLE (cd->main_obox), o); + gtk_orientable_set_orientation (GTK_ORIENTABLE (cd->weather_obox), o); + + unfix_size (cd); + update_clock (cd); + update_calendar_popup (cd); +} + +/* this is when the panel size changes */ +static void +panel_button_change_pixel_size (GtkWidget *widget, + GtkAllocation *allocation, + ClockData *cd) +{ + int new_size; + + if (cd->old_allocation.width == allocation->width && + cd->old_allocation.height == allocation->height) + return; + + cd->old_allocation.width = allocation->width; + cd->old_allocation.height = allocation->height; + + if (cd->orient == MATE_PANEL_APPLET_ORIENT_LEFT || + cd->orient == MATE_PANEL_APPLET_ORIENT_RIGHT) + new_size = allocation->width; + else + new_size = allocation->height; + + cd->size = new_size; + + unfix_size (cd); + update_timeformat (cd); + update_clock (cd); +} + +static void +copy_time (GtkAction *action, + ClockData *cd) +{ + char string[256]; + char *utf8; + + if (cd->format == CLOCK_FORMAT_UNIX) { + g_snprintf (string, sizeof(string), "%lu", + (unsigned long)cd->current_time); + } else if (cd->format == CLOCK_FORMAT_INTERNET) { + float itime = get_itime (cd->current_time); + if (cd->showseconds) + g_snprintf (string, sizeof (string), "@%3.2f", itime); + else + g_snprintf (string, sizeof (string), "@%3d", + (unsigned int) itime); + } else { + struct tm *tm; + char *format; + + if (cd->format == CLOCK_FORMAT_CUSTOM) { + format = g_locale_from_utf8 (cd->custom_format, -1, + NULL, NULL, NULL); + } else if (cd->format == CLOCK_FORMAT_12) { + if (cd->showseconds) + /* Translators: This is a strftime format + * string. + * It is used to display the time in 12-hours + * format with a leading 0 if needed (eg, like + * in the US: 08:10 am). The %p expands to + * am/pm. */ + format = g_locale_from_utf8 (_("%I:%M:%S %p"), -1, NULL, NULL, NULL); + else + /* Translators: This is a strftime format + * string. + * It is used to display the time in 12-hours + * format with a leading 0 if needed (eg, like + * in the US: 08:10 am). The %p expands to + * am/pm. */ + format = g_locale_from_utf8 (_("%I:%M %p"), -1, NULL, NULL, NULL); + } else { + if (cd->showseconds) + /* Translators: This is a strftime format + * string. + * It is used to display the time in 24-hours + * format (eg, like in France: 20:10). */ + format = g_locale_from_utf8 (_("%H:%M:%S"), -1, NULL, NULL, NULL); + else + /* Translators: This is a strftime format + * string. + * It is used to display the time in 24-hours + * format (eg, like in France: 20:10). */ + format = g_locale_from_utf8 (_("%H:%M"), -1, NULL, NULL, NULL); + } + + tm = localtime (&cd->current_time); + + if (!format) + strcpy (string, "???"); + else if (strftime (string, sizeof (string), format, tm) <= 0) + strcpy (string, "???"); + g_free (format); + } + + utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY), + utf8, -1); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), + utf8, -1); + g_free (utf8); +} + +static void +copy_date (GtkAction *action, + ClockData *cd) +{ + struct tm *tm; + char string[256]; + char *utf8, *loc; + + tm = localtime (&cd->current_time); + + /* Translators: This is a strftime format string. + * It is used to display a date in the full format (so that people can + * copy and paste it elsewhere). */ + loc = g_locale_from_utf8 (_("%A, %B %d %Y"), -1, NULL, NULL, NULL); + if (!loc) + strcpy (string, "???"); + else if (strftime (string, sizeof (string), loc, tm) <= 0) + strcpy (string, "???"); + g_free (loc); + + utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY), + utf8, -1); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), + utf8, -1); + g_free (utf8); +} + +static void +update_set_time_button (ClockData *cd) +{ + gint can_set; + + /* this returns more than just a boolean; check the documentation of + * the dbus method for more information */ + can_set = can_set_system_time (); + + if (cd->time_settings_button) + gtk_widget_set_sensitive (cd->time_settings_button, can_set); + + if (cd->set_time_button) { + gtk_widget_set_sensitive (cd->set_time_button, can_set != 0); + gtk_button_set_label (GTK_BUTTON (cd->set_time_button), + can_set == 1 ? + _("Set System Time...") : + _("Set System Time")); + } +} + +static void +set_time_callback (ClockData *cd, GError *error) +{ + GtkWidget *window; + GtkWidget *dialog; + + if (error) { + dialog = gtk_message_dialog_new (NULL, + 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("Failed to set the system time")); + + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_widget_destroy), NULL); + gtk_window_present (GTK_WINDOW (dialog)); + + g_error_free (error); + } + else + update_set_time_button (cd); + + window = _clock_get_widget (cd, "set-time-window"); + gtk_widget_hide (window); +} + +static void +set_time (GtkWidget *widget, ClockData *cd) +{ + struct tm t; + time_t tim; + guint year, month, day; + + time (&tim); + /* sets t.isdst -- we could set it to -1 to have mktime() guess the + * right value , but we don't know if this works with all libc */ + localtime_r (&tim, &t); + + t.tm_sec = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->seconds_spin)); + t.tm_min = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->minutes_spin)); + t.tm_hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->hours_spin)); + gtk_calendar_get_date (GTK_CALENDAR (cd->calendar), &year, &month, &day); + t.tm_year = year - 1900; + t.tm_mon = month; + t.tm_mday = day; + + tim = mktime (&t); + + set_system_time_async (tim, (GFunc)set_time_callback, cd, NULL); +} + +static void +cancel_time_settings (GtkWidget *button, ClockData *cd) +{ + gtk_widget_hide (cd->set_time_window); + + refresh_click_timeout_time_only (cd); +} + +static gboolean +delete_time_settings (GtkWidget *widget, GdkEvent *event, gpointer data) +{ + cancel_time_settings (widget, data); + + return TRUE; +} + +static void +fill_time_settings_window (ClockData *cd) +{ + time_t now_t; + struct tm now; + + /* Fill the time settings */ + tzset (); + time (&now_t); + localtime_r (&now_t, &now); + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->seconds_spin), now.tm_sec); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->minutes_spin), now.tm_min); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->hours_spin), now.tm_hour); + + gtk_calendar_select_month (GTK_CALENDAR (cd->calendar), now.tm_mon, + now.tm_year + 1900); + gtk_calendar_select_day (GTK_CALENDAR (cd->calendar), now.tm_mday); +} + +static void +wrap_cb (GtkSpinButton *spin, ClockData *cd) +{ + gdouble value; + gdouble min, max; + GtkSpinType direction; + + value = gtk_spin_button_get_value (spin); + gtk_spin_button_get_range (spin, &min, &max); + + if (value == min) + direction = GTK_SPIN_STEP_FORWARD; + else + direction = GTK_SPIN_STEP_BACKWARD; + + if (spin == (GtkSpinButton *) cd->seconds_spin) + gtk_spin_button_spin (GTK_SPIN_BUTTON (cd->minutes_spin), direction, 1.0); + else if (spin == (GtkSpinButton *) cd->minutes_spin) + gtk_spin_button_spin (GTK_SPIN_BUTTON (cd->hours_spin), direction, 1.0); + else { + guint year, month, day; + GDate *date; + + gtk_calendar_get_date (GTK_CALENDAR (cd->calendar), &year, &month, &day); + + date = g_date_new_dmy (day, month + 1, year); + + if (direction == GTK_SPIN_STEP_FORWARD) + g_date_add_days (date, 1); + else + g_date_subtract_days (date, 1); + + year = g_date_get_year (date); + month = g_date_get_month (date) - 1; + day = g_date_get_day (date); + + gtk_calendar_select_month (GTK_CALENDAR (cd->calendar), month, year); + gtk_calendar_select_day (GTK_CALENDAR (cd->calendar), day); + + g_date_free (date); + } +} + +static gboolean +output_cb (GtkSpinButton *spin, + gpointer data) +{ + GtkAdjustment *adj; + gchar *text; + int value; + + adj = gtk_spin_button_get_adjustment (spin); + value = (int) gtk_adjustment_get_value (adj); + text = g_strdup_printf ("%02d", value); + gtk_entry_set_text (GTK_ENTRY (spin), text); + g_free (text); + + return TRUE; +} + +static void +ensure_time_settings_window_is_created (ClockData *cd) +{ + GtkWidget *cancel_button; + + if (cd->set_time_window) + return; + + cd->set_time_window = _clock_get_widget (cd, "set-time-window"); + g_signal_connect (cd->set_time_window, "delete_event", + G_CALLBACK (delete_time_settings), cd); + + cd->calendar = _clock_get_widget (cd, "calendar"); + cd->hours_spin = _clock_get_widget (cd, "hours_spin"); + cd->minutes_spin = _clock_get_widget (cd, "minutes_spin"); + cd->seconds_spin = _clock_get_widget (cd, "seconds_spin"); + + gtk_entry_set_width_chars (GTK_ENTRY (cd->hours_spin), 2); + gtk_entry_set_width_chars (GTK_ENTRY (cd->minutes_spin), 2); + gtk_entry_set_width_chars (GTK_ENTRY (cd->seconds_spin), 2); + gtk_entry_set_alignment (GTK_ENTRY (cd->hours_spin), 1.0); + gtk_entry_set_alignment (GTK_ENTRY (cd->minutes_spin), 1.0); + gtk_entry_set_alignment (GTK_ENTRY (cd->seconds_spin), 1.0); + g_signal_connect (cd->seconds_spin, "wrapped", G_CALLBACK (wrap_cb), cd); + g_signal_connect (cd->minutes_spin, "wrapped", G_CALLBACK (wrap_cb), cd); + g_signal_connect (cd->hours_spin, "wrapped", G_CALLBACK (wrap_cb), cd); + + g_signal_connect (cd->minutes_spin, "output", G_CALLBACK (output_cb), cd); + g_signal_connect (cd->seconds_spin, "output", G_CALLBACK (output_cb), cd); + + cd->set_time_button = _clock_get_widget (cd, "set-time-button"); + g_signal_connect (cd->set_time_button, "clicked", G_CALLBACK (set_time), cd); + + cancel_button = _clock_get_widget (cd, "cancel-set-time-button"); + g_signal_connect (cancel_button, "clicked", G_CALLBACK (cancel_time_settings), cd); + + cd->current_time_label = _clock_get_widget (cd, "current_time_label"); +} + +static void +run_time_settings (GtkWidget *unused, ClockData *cd) +{ + ensure_time_settings_window_is_created (cd); + fill_time_settings_window (cd); + + update_set_time_button (cd); + + gtk_window_present (GTK_WINDOW (cd->set_time_window)); + + refresh_click_timeout_time_only (cd); +} + +static void +config_date (GtkAction *action, + ClockData *cd) +{ + run_time_settings (NULL, cd); +} + +/* current timestamp */ +static const GtkActionEntry clock_menu_actions [] = { + { "ClockPreferences", GTK_STOCK_PROPERTIES, N_("_Preferences"), + NULL, NULL, + G_CALLBACK (verb_display_properties_dialog) }, + { "ClockHelp", GTK_STOCK_HELP, N_("_Help"), + NULL, NULL, + G_CALLBACK (display_help_dialog) }, + { "ClockAbout", GTK_STOCK_ABOUT, N_("_About"), + NULL, NULL, + G_CALLBACK (display_about_dialog) }, + { "ClockCopyTime", GTK_STOCK_COPY, N_("Copy _Time"), + NULL, NULL, + G_CALLBACK (copy_time) }, + { "ClockCopyDate", GTK_STOCK_COPY, N_("Copy _Date"), + NULL, NULL, + G_CALLBACK (copy_date) }, + { "ClockConfig", GTK_STOCK_PREFERENCES, N_("Ad_just Date & Time"), + NULL, NULL, + G_CALLBACK (config_date) } +}; + +static void +format_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *clock) +{ + const char *value; + int new_format; + + if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) + return; + + value = mateconf_value_get_string (entry->value); + if (!mateconf_string_to_enum (format_type_enum_map, value, &new_format)) + return; + + if (!clock->can_handle_format_12 && new_format == CLOCK_FORMAT_12) + new_format = CLOCK_FORMAT_24; + + if (new_format == clock->format) + return; + + clock->format = new_format; + refresh_clock_timeout (clock); + + if (clock->calendar_popup != NULL) { + calendar_window_set_time_format (CALENDAR_WINDOW (clock->calendar_popup), clock->format); + position_calendar_popup (clock); + } + +} + +static void +show_seconds_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *clock) +{ + gboolean value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) + return; + + value = mateconf_value_get_bool (entry->value); + + clock->showseconds = (value != 0); + refresh_clock_timeout (clock); +} + +static void +show_date_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *clock) +{ + gboolean value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) + return; + + value = mateconf_value_get_bool (entry->value); + + clock->showdate = (value != 0); + update_timeformat (clock); + refresh_clock (clock); +} + +static void +update_panel_weather (ClockData *cd) +{ + if (cd->show_weather) + gtk_widget_show (cd->panel_weather_icon); + else + gtk_widget_hide (cd->panel_weather_icon); + + if (cd->show_temperature) + gtk_widget_show (cd->panel_temperature_label); + else + gtk_widget_hide (cd->panel_temperature_label); + + if ((cd->show_weather || cd->show_temperature) && + g_list_length (cd->locations) > 0) + gtk_widget_show (cd->weather_obox); + else + gtk_widget_hide (cd->weather_obox); + + gtk_widget_queue_resize (cd->applet); +} + +static void +update_weather_bool_value_and_toggle_from_mateconf (ClockData *cd, MateConfEntry *entry, + gboolean *value_loc, const char *widget_name) +{ + GtkWidget *widget; + gboolean value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) + return; + + value = mateconf_value_get_bool (entry->value); + + *value_loc = (value != 0); + + widget = _clock_get_widget (cd, widget_name); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), + *value_loc); + + update_panel_weather (cd); +} + +static void +show_weather_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *cd) +{ + update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_weather, "weather_check"); +} + +static void +show_temperature_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *cd) +{ + update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_temperature, "temperature_check"); +} + +static void +location_weather_updated_cb (ClockLocation *location, + WeatherInfo *info, + gpointer data) +{ + ClockData *cd = data; + const gchar *icon_name; + const gchar *temp; + GtkIconTheme *theme; + GdkPixbuf *pixbuf; + + if (!info || !weather_info_is_valid (info)) + return; + + if (!clock_location_is_current (location)) + return; + + icon_name = weather_info_get_icon_name (info); + /* FIXME: mmh, screen please? Also, don't hardcode to 16 */ + theme = gtk_icon_theme_get_default (); + pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 16, + GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL); + + temp = weather_info_get_temp_summary (info); + + gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon), pixbuf); + gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label), temp); +} + +static void +location_set_current_cb (ClockLocation *loc, + gpointer data) +{ + ClockData *cd = data; + WeatherInfo *info; + + info = clock_location_get_weather_info (loc); + location_weather_updated_cb (loc, info, cd); + + if (cd->map_widget) + clock_map_refresh (CLOCK_MAP (cd->map_widget)); + update_location_tiles (cd); + save_cities_store (cd); +} + +static void +locations_changed (ClockData *cd) +{ + GList *l; + ClockLocation *loc; + glong id; + + if (!cd->locations) { + if (cd->weather_obox) + gtk_widget_hide (cd->weather_obox); + if (cd->panel_weather_icon) + gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon), + NULL); + if (cd->panel_temperature_label) + gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label), + ""); + } else { + if (cd->weather_obox) + gtk_widget_show (cd->weather_obox); + } + + for (l = cd->locations; l; l = l->next) { + loc = l->data; + + id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (loc), "weather-updated")); + if (id == 0) { + id = g_signal_connect (loc, "weather-updated", + G_CALLBACK (location_weather_updated_cb), cd); + g_object_set_data (G_OBJECT (loc), "weather-updated", GINT_TO_POINTER (id)); + g_signal_connect (loc, "set-current", + G_CALLBACK (location_set_current_cb), cd); + } + } + + if (cd->map_widget) + clock_map_refresh (CLOCK_MAP (cd->map_widget)); + + if (cd->clock_vbox) + create_cities_section (cd); +} + + +static void +set_locations (ClockData *cd, GList *locations) +{ + free_locations (cd); + cd->locations = locations; + locations_changed (cd); +} + +typedef struct { + GList *cities; + ClockData *cd; +} LocationParserData; + +/* Parser for our serialized locations in mateconf */ +static void +location_start_element (GMarkupParseContext *context, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error) +{ + ClockLocation *loc; + LocationParserData *data = user_data; + ClockData *cd = data->cd; + WeatherPrefs prefs; + const gchar *att_name; + + gchar *name = NULL; + gchar *city = NULL; + gchar *timezone = NULL; + gfloat latitude = 0.0; + gfloat longitude = 0.0; + gchar *code = NULL; + gboolean current = FALSE; + + int index = 0; + + prefs.temperature_unit = cd->temperature_unit; + prefs.speed_unit = cd->speed_unit; + + if (strcmp (element_name, "location") != 0) { + return; + } + + setlocale (LC_NUMERIC, "POSIX"); + + for (att_name = attribute_names[index]; att_name != NULL; + att_name = attribute_names[++index]) { + if (strcmp (att_name, "name") == 0) { + name = (gchar *)attribute_values[index]; + } else if (strcmp (att_name, "city") == 0) { + city = (gchar *)attribute_values[index]; + } else if (strcmp (att_name, "timezone") == 0) { + timezone = (gchar *)attribute_values[index]; + } else if (strcmp (att_name, "latitude") == 0) { + sscanf (attribute_values[index], "%f", &latitude); + } else if (strcmp (att_name, "longitude") == 0) { + sscanf (attribute_values[index], "%f", &longitude); + } else if (strcmp (att_name, "code") == 0) { + code = (gchar *)attribute_values[index]; + } + else if (strcmp (att_name, "current") == 0) { + if (strcmp (attribute_values[index], "true") == 0) { + current = TRUE; + } + } + } + + setlocale (LC_NUMERIC, ""); + + if ((!name && !city) || !timezone) { + return; + } + + /* migration from the old configuration, when name == city */ + if (!city) + city = name; + + loc = clock_location_find_and_ref (cd->locations, name, city, + timezone, latitude, longitude, code); + if (!loc) + loc = clock_location_new (name, city, timezone, + latitude, longitude, code, &prefs); + + if (current && clock_location_is_current_timezone (loc)) + clock_location_make_current (loc, GDK_WINDOW_XWINDOW (gtk_widget_get_window (cd->applet)), + NULL, NULL, NULL); + + data->cities = g_list_append (data->cities, loc); +} + +static GMarkupParser location_parser = { + location_start_element, NULL, NULL, NULL, NULL +}; + +static void +cities_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *cd) +{ + LocationParserData data; + + GSList *cur = NULL; + + GMarkupParseContext *context; + + data.cities = NULL; + data.cd = cd; + + if (!entry->value || entry->value->type != MATECONF_VALUE_LIST) + return; + + context = g_markup_parse_context_new (&location_parser, 0, &data, NULL); + + cur = mateconf_value_get_list (entry->value); + + while (cur) { + const char *str = mateconf_value_get_string (cur->data); + g_markup_parse_context_parse (context, str, strlen (str), NULL); + + cur = cur->next; + } + + g_markup_parse_context_free (context); + + set_locations (cd, data.cities); + create_cities_store (cd); +} + +static void +update_temperature_combo (ClockData *cd) +{ + GtkWidget *widget; + int active_index; + + widget = _clock_get_widget (cd, "temperature_combo"); + + if (cd->use_temperature_default) + active_index = 0; + else + active_index = cd->temperature_unit - 1; + + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index); +} + +static void +update_weather_locations (ClockData *cd) +{ + GList *locations, *l; + WeatherPrefs prefs = { + FORECAST_STATE, + FALSE, + NULL, + TEMP_UNIT_CENTIGRADE, + SPEED_UNIT_MS, + PRESSURE_UNIT_MB, + DISTANCE_UNIT_KM + }; + + prefs.temperature_unit = cd->temperature_unit; + prefs.speed_unit = cd->speed_unit; + + locations = cd->locations; + + for (l = locations; l; l = l->next) { + clock_location_set_weather_prefs (l->data, &prefs); + } +} + +static void +clock_migrate_to_26 (ClockData *clock) +{ + gboolean unixtime; + gboolean internettime; + int hourformat; + + internettime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet), + "internet_time", + NULL); + unixtime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet), + "unix_time", + NULL); + hourformat = mate_panel_applet_mateconf_get_int (MATE_PANEL_APPLET (clock->applet), + "hour_format", + NULL); + + if (unixtime) + clock->format = CLOCK_FORMAT_UNIX; + else if (internettime) + clock->format = CLOCK_FORMAT_INTERNET; + else if (hourformat == 12) + clock->format = CLOCK_FORMAT_12; + else if (hourformat == 24) + clock->format = CLOCK_FORMAT_24; + + /* It's still possible that we have none of the old keys, in which case + * we're not migrating from 2.6, but the config is simply wrong. So + * don't set the format key in this case. */ + if (clock->format != CLOCK_FORMAT_INVALID) + mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (clock->applet), + KEY_FORMAT, + mateconf_enum_to_string (format_type_enum_map, + clock->format), + NULL); +} + +static void +clock_timezone_changed (SystemTimezone *systz, + const char *new_tz, + ClockData *cd) +{ + /* This will refresh the current location */ + save_cities_store (cd); + + refresh_click_timeout_time_only (cd); +} + +static void +parse_and_set_temperature_string (const char *str, ClockData *cd) +{ + gint value = 0; + gboolean use_default = FALSE; + + value = mateweather_prefs_parse_temperature (str, &use_default); + + cd->use_temperature_default = use_default; + cd->temperature_unit = value; +} + +static void +parse_and_set_speed_string (const char *str, ClockData *cd) +{ + gint value = 0; + gboolean use_default = FALSE; + + value = mateweather_prefs_parse_speed (str, &use_default); + + cd->use_speed_default = use_default; + cd->speed_unit = value; +} + +static void +temperature_unit_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *cd) +{ + const gchar *value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) + return; + + value = mateconf_value_get_string (entry->value); + parse_and_set_temperature_string (value, cd); + update_temperature_combo (cd); + update_weather_locations (cd); +} + +static void +update_speed_combo (ClockData *cd) +{ + GtkWidget *widget; + int active_index; + + widget = _clock_get_widget (cd, "wind_speed_combo"); + + if (cd->use_speed_default) + active_index = 0; + else + active_index = cd->speed_unit - 1; + + gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index); +} + +static void +speed_unit_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *cd) +{ + const gchar *value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) + return; + + value = mateconf_value_get_string (entry->value); + parse_and_set_speed_string (value, cd); + update_speed_combo (cd); + update_weather_locations (cd); +} + +static void +custom_format_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *clock) +{ + const char *value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_STRING) + return; + + value = mateconf_value_get_string (entry->value); + + g_free (clock->custom_format); + clock->custom_format = g_strdup (value); + + if (clock->format == CLOCK_FORMAT_CUSTOM) + refresh_clock (clock); +} + +static void +show_week_changed (MateConfClient *client, + guint cnxn_id, + MateConfEntry *entry, + ClockData *clock) +{ + gboolean value; + + if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL) + return; + + value = mateconf_value_get_bool (entry->value); + + if (clock->showweek == (value != 0)) + return; + + clock->showweek = (value != 0); + + if (clock->calendar_popup != NULL) { + calendar_window_set_show_weeks (CALENDAR_WINDOW (clock->calendar_popup), clock->showweek); + position_calendar_popup (clock); + } +} + +static guint +setup_mateconf_preference (ClockData *cd, MateConfClient *client, const char *key_name, MateConfClientNotifyFunc callback) +{ + char *key; + guint id; + + key = mate_panel_applet_mateconf_get_full_key (MATE_PANEL_APPLET (cd->applet), + key_name); + id = mateconf_client_notify_add (client, key, + callback, + cd, NULL, NULL); + g_free (key); + + return id; +} + +static void +setup_mateconf (ClockData *cd) +{ + struct { + const char *key_name; + MateConfClientNotifyFunc callback; + } prefs[] = { + { KEY_FORMAT, (MateConfClientNotifyFunc) format_changed }, + { KEY_SHOW_SECONDS, (MateConfClientNotifyFunc) show_seconds_changed }, + { KEY_SHOW_DATE, (MateConfClientNotifyFunc) show_date_changed }, + { KEY_SHOW_WEATHER, (MateConfClientNotifyFunc) show_weather_changed }, + { KEY_SHOW_TEMPERATURE, (MateConfClientNotifyFunc) show_temperature_changed }, + { KEY_CUSTOM_FORMAT, (MateConfClientNotifyFunc) custom_format_changed }, + { KEY_SHOW_WEEK, (MateConfClientNotifyFunc) show_week_changed }, + { KEY_CITIES, (MateConfClientNotifyFunc) cities_changed }, + { KEY_TEMPERATURE_UNIT, (MateConfClientNotifyFunc) temperature_unit_changed }, + { KEY_SPEED_UNIT, (MateConfClientNotifyFunc) speed_unit_changed }, + }; + + MateConfClient *client; + int i; + + client = mateconf_client_get_default (); + + for (i = 0; i < G_N_ELEMENTS (prefs); i++) + cd->listeners[i] = setup_mateconf_preference (cd, client, prefs[i].key_name, prefs[i].callback); + + g_object_unref (G_OBJECT (client)); +} + +static GList * +parse_mateconf_cities (ClockData *cd, GSList *values) +{ + GSList *cur = values; + LocationParserData data; + GMarkupParseContext *context; + + data.cities = NULL; + data.cd = cd; + + context = + g_markup_parse_context_new (&location_parser, 0, &data, NULL); + + while (cur) { + const char *str = (char *)cur->data; + g_markup_parse_context_parse (context, str, strlen(str), NULL); + + cur = cur->next; + } + + g_markup_parse_context_free (context); + + return data.cities; +} + +static void +load_mateconf_settings (ClockData *cd) +{ + MatePanelApplet *applet; + int format; + char *format_str; + char *value; + GError *error; + GSList *values = NULL; + GList *cities = NULL; + + applet = MATE_PANEL_APPLET (cd->applet); + + cd->format = CLOCK_FORMAT_INVALID; + + format_str = mate_panel_applet_mateconf_get_string (applet, KEY_FORMAT, NULL); + if (format_str && + mateconf_string_to_enum (format_type_enum_map, format_str, &format)) + cd->format = format; + else + clock_migrate_to_26 (cd); + + g_free (format_str); + + if (cd->format == CLOCK_FORMAT_INVALID) + cd->format = clock_locale_format (); + + cd->custom_format = mate_panel_applet_mateconf_get_string (applet, KEY_CUSTOM_FORMAT, NULL); + cd->showseconds = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_SECONDS, NULL); + + error = NULL; + cd->showdate = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_DATE, &error); + if (error) { + g_error_free (error); + /* if on a small screen don't show date by default */ + if (gdk_screen_width () <= 800) + cd->showdate = FALSE; + else + cd->showdate = TRUE; + } + + cd->show_weather = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEATHER, NULL); + cd->show_temperature = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_TEMPERATURE, NULL); + cd->showweek = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEEK, NULL); + cd->timeformat = NULL; + + cd->can_handle_format_12 = (clock_locale_format () == CLOCK_FORMAT_12); + if (!cd->can_handle_format_12 && cd->format == CLOCK_FORMAT_12) + cd->format = CLOCK_FORMAT_24; + + value = mate_panel_applet_mateconf_get_string (applet, KEY_TEMPERATURE_UNIT, NULL); + parse_and_set_temperature_string (value, cd); + g_free (value); + + value = mate_panel_applet_mateconf_get_string (applet, KEY_SPEED_UNIT, NULL); + parse_and_set_speed_string (value, cd); + g_free (value); + + values = mate_panel_applet_mateconf_get_list (MATE_PANEL_APPLET (cd->applet), KEY_CITIES, + MATECONF_VALUE_STRING, NULL); + + if (g_slist_length (values) == 0) { + cities = NULL; + } else { + cities = parse_mateconf_cities (cd, values); + } + + set_locations (cd, cities); +} + +static gboolean +fill_clock_applet (MatePanelApplet *applet) +{ + ClockData *cd; + GtkActionGroup *action_group; + GtkAction *action; + gchar *ui_path; + char *filename; + GError *error; + + mate_panel_applet_add_preferences (applet, CLOCK_SCHEMA_DIR, NULL); + mate_panel_applet_set_flags (applet, MATE_PANEL_APPLET_EXPAND_MINOR); + + cd = g_new0 (ClockData, 1); + cd->fixed_width = -1; + cd->fixed_height = -1; + + cd->applet = GTK_WIDGET (applet); + + setup_mateconf (cd); + load_mateconf_settings (cd); + + cd->builder = gtk_builder_new (); + gtk_builder_set_translation_domain (cd->builder, GETTEXT_PACKAGE); + filename = g_build_filename (BUILDERDIR, "clock.ui", NULL); + + error = NULL; + gtk_builder_add_from_file (cd->builder, filename, &error); + if (error) { + g_warning ("Error loading \"%s\": %s", + filename, error->message); + g_error_free (error); + } + + g_free (filename); + + create_clock_widget (cd); + +#ifndef CLOCK_INPROCESS + gtk_window_set_default_icon_name (CLOCK_ICON); +#endif + gtk_widget_show (cd->applet); + + /* FIXME: Update this comment. */ + /* we have to bind change_orient before we do applet_widget_add + since we need to get an initial change_orient signal to set our + initial oriantation, and we get that during the _add call */ + g_signal_connect (G_OBJECT (cd->applet), + "change_orient", + G_CALLBACK (applet_change_orient), + cd); + + g_signal_connect (G_OBJECT (cd->panel_button), + "size_allocate", + G_CALLBACK (panel_button_change_pixel_size), + cd); + + mate_panel_applet_set_background_widget (MATE_PANEL_APPLET (cd->applet), + GTK_WIDGET (cd->applet)); + + action_group = gtk_action_group_new ("ClockApplet Menu Actions"); + gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (action_group, + clock_menu_actions, + G_N_ELEMENTS (clock_menu_actions), + cd); + ui_path = g_build_filename (CLOCK_MENU_UI_DIR, "clock-menu.xml", NULL); + mate_panel_applet_setup_menu_from_file (MATE_PANEL_APPLET (cd->applet), + ui_path, action_group); + g_free (ui_path); + + if (mate_panel_applet_get_locked_down (MATE_PANEL_APPLET (cd->applet))) { + action = gtk_action_group_get_action (action_group, "ClockPreferences"); + gtk_action_set_visible (action, FALSE); + + action = gtk_action_group_get_action (action_group, "ClockConfig"); + gtk_action_set_visible (action, FALSE); + } + + cd->systz = system_timezone_new (); + g_signal_connect (cd->systz, "changed", + G_CALLBACK (clock_timezone_changed), cd); + + action = gtk_action_group_get_action (action_group, "ClockConfig"); + gtk_action_set_visible (action, can_set_system_time ()); + g_object_unref (action_group); + + return TRUE; +} + +/* FIXME old clock applet */ +#if 0 +static void +setup_writability_sensitivity (ClockData *clock, GtkWidget *w, GtkWidget *label, const char *key) +{ + /* FMQ: was used from old preferences dialog; fix this up */ + char *fullkey; + MateConfClient *client; + + client = mateconf_client_get_default (); + + fullkey = mate_panel_applet_mateconf_get_full_key + (MATE_PANEL_APPLET (clock->applet), key); + + if ( ! mateconf_client_key_is_writable (client, fullkey, NULL)) { + g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE, + GINT_TO_POINTER (1)); + gtk_widget_set_sensitive (w, FALSE); + if (label != NULL) { + g_object_set_data (G_OBJECT (label), NEVER_SENSITIVE, + GINT_TO_POINTER (1)); + gtk_widget_set_sensitive (label, FALSE); + } + } + + g_free (fullkey); + + g_object_unref (G_OBJECT (client)); +} + +static void +update_properties_for_format (ClockData *cd, + GtkComboBox *combo, + ClockFormat format) +{ + + /* show the custom format things the first time we actually + * have a custom format set in MateConf, but after that don't + * unshow it if the format changes + */ + if (!cd->custom_format_shown && + (cd->format == CLOCK_FORMAT_CUSTOM || + (cd->custom_format && cd->custom_format [0]))) { + gtk_widget_show (cd->custom_hbox); + gtk_widget_show (cd->custom_label); + gtk_widget_show (cd->custom_entry); + + gtk_combo_box_append_text (combo, _("Custom format")); + + cd->custom_format_shown = TRUE; + } + + /* Some combinations of options do not make sense */ + switch (format) { + case CLOCK_FORMAT_12: + case CLOCK_FORMAT_24: + gtk_widget_set_sensitive (cd->showseconds_check, TRUE); + gtk_widget_set_sensitive (cd->showdate_check, TRUE); + gtk_widget_set_sensitive (cd->custom_entry, FALSE); + gtk_widget_set_sensitive (cd->custom_label, FALSE); + break; + case CLOCK_FORMAT_UNIX: + gtk_widget_set_sensitive (cd->showseconds_check, FALSE); + gtk_widget_set_sensitive (cd->showdate_check, FALSE); + gtk_widget_set_sensitive (cd->custom_entry, FALSE); + gtk_widget_set_sensitive (cd->custom_label, FALSE); + break; + case CLOCK_FORMAT_INTERNET: + gtk_widget_set_sensitive (cd->showseconds_check, TRUE); + gtk_widget_set_sensitive (cd->showdate_check, FALSE); + gtk_widget_set_sensitive (cd->custom_entry, FALSE); + gtk_widget_set_sensitive (cd->custom_label, FALSE); + break; + case CLOCK_FORMAT_CUSTOM: + gtk_widget_set_sensitive (cd->showseconds_check, FALSE); + gtk_widget_set_sensitive (cd->showdate_check, FALSE); + gtk_widget_set_sensitive (cd->custom_entry, TRUE); + gtk_widget_set_sensitive (cd->custom_label, TRUE); + break; + default: + g_assert_not_reached (); + break; + } +} + +static void +set_format_cb (GtkComboBox *combo, + ClockData *cd) +{ + /* FMQ: was used from old preferences dialog; fix this up */ + ClockFormat format; + + /* valid values begin from 1 */ + if (cd->can_handle_format_12) + format = gtk_combo_box_get_active (combo) + 1; + else + format = gtk_combo_box_get_active (combo) + 2; + + update_properties_for_format (cd, combo, format); + + if (cd->format != format) + mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), + KEY_FORMAT, + mateconf_enum_to_string (format_type_enum_map, format), + NULL); +} +#endif + +static void +set_show_seconds_cb (GtkWidget *w, + ClockData *clock) +{ + mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), + KEY_SHOW_SECONDS, + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), + NULL); +} + +static void +set_show_date_cb (GtkWidget *w, + ClockData *clock) +{ + mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), + KEY_SHOW_DATE, + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), + NULL); +} + +static void +set_show_weather_cb (GtkWidget *w, + ClockData *clock) +{ + mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), + KEY_SHOW_WEATHER, + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), + NULL); +} + +static void +set_show_temperature_cb (GtkWidget *w, + ClockData *clock) +{ + mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), + KEY_SHOW_TEMPERATURE, + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)), + NULL); +} + +#if 0 +static void +set_show_zones_cb (GtkWidget *w, + ClockData *clock) +{ + mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet), + KEY_SHOW_ZONES, + GTK_TOGGLE_BUTTON (w)->active, + NULL); +} +#endif + +/* FIXME old clock applet */ +#if 0 +static void +set_custom_format_cb (GtkEntry *entry, + ClockData *cd) +{ + /* FMQ: was used from old preferences dialog; fix this up */ + const char *custom_format; + + custom_format = gtk_entry_get_text (entry); + mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), + KEY_CUSTOM_FORMAT, custom_format, NULL); +} +#endif + +static void +prefs_locations_changed (GtkTreeSelection *selection, ClockData *cd) +{ + gint n; + + n = gtk_tree_selection_count_selected_rows (selection); + gtk_widget_set_sensitive (cd->prefs_location_edit_button, n > 0); + gtk_widget_set_sensitive (cd->prefs_location_remove_button, n > 0); +} + +static gchar * +loc_to_string (ClockLocation *loc) +{ + const gchar *name, *city; + gfloat latitude, longitude; + gchar *ret; + + name = clock_location_get_name (loc); + city = clock_location_get_city (loc); + clock_location_get_coords (loc, &latitude, &longitude); + + setlocale (LC_NUMERIC, "POSIX"); + + ret = g_markup_printf_escaped + ("<location name=\"%s\" city=\"%s\" timezone=\"%s\" latitude=\"%f\" longitude=\"%f\" code=\"%s\" current=\"%s\"/>", + name ? name : "", + city ? city : "", + clock_location_get_timezone (loc), + latitude, longitude, + clock_location_get_weather_code (loc), + clock_location_is_current (loc) ? "true" : "false"); + + setlocale (LC_NUMERIC, ""); + + return ret; +} + +static void +save_cities_store (ClockData *cd) +{ + ClockLocation *loc; + GList *node = cd->locations; + + GSList *root = NULL; + GSList *list = NULL; + + while (node) { + loc = CLOCK_LOCATION (node->data); + list = g_slist_prepend (list, loc_to_string (loc)); + node = node->next; + } + + list = g_slist_reverse (list); + mate_panel_applet_mateconf_set_list (MATE_PANEL_APPLET (cd->applet), + KEY_CITIES, MATECONF_VALUE_STRING, list, NULL); + + root = list; + + while (list) { + g_free (list->data); + list = g_slist_next (list); + } + + g_slist_free (root); +} + +static void +run_prefs_edit_save (GtkButton *button, ClockData *cd) +{ + GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window"); + + ClockLocation *loc = g_object_get_data (G_OBJECT (edit_window), "clock-location"); + + GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry"); + GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry"); + GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo"); + GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo"); + + const gchar *timezone, *weather_code; + gchar *city, *name; + + MateWeatherLocation *gloc; + gfloat lat = 0; + gfloat lon = 0; + + timezone = mateweather_timezone_menu_get_tzid (cd->zone_combo); + if (!timezone) { + edit_hide (NULL, cd); + return; + } + + city = NULL; + weather_code = NULL; + name = NULL; + + gloc = mateweather_location_entry_get_location (cd->location_entry); + if (gloc) { + city = mateweather_location_get_city_name (gloc); + weather_code = mateweather_location_get_code (gloc); + } + + if (mateweather_location_entry_has_custom_text (cd->location_entry)) { + name = gtk_editable_get_chars (GTK_EDITABLE (cd->location_entry), 0, -1); + } + + sscanf (gtk_entry_get_text (GTK_ENTRY (lat_entry)), "%f", &lat); + sscanf (gtk_entry_get_text (GTK_ENTRY (lon_entry)), "%f", &lon); + + if (gtk_combo_box_get_active (GTK_COMBO_BOX (lat_combo)) != 0) { + lat = -lat; + } + + if (gtk_combo_box_get_active (GTK_COMBO_BOX (lon_combo)) != 0) { + lon = -lon; + } + + if (loc) { + clock_location_set_timezone (loc, timezone); + clock_location_set_name (loc, name); + clock_location_set_city (loc, city); + clock_location_set_coords (loc, lat, lon); + clock_location_set_weather_code (loc, weather_code); + } else { + WeatherPrefs prefs; + + prefs.temperature_unit = cd->temperature_unit; + prefs.speed_unit = cd->speed_unit; + + loc = clock_location_new (name, city, timezone, lat, lon, weather_code, &prefs); + /* has the side-effect of setting the current location if + * there's none and this one can be considered as a current one + */ + clock_location_is_current (loc); + + cd->locations = g_list_append (cd->locations, loc); + } + g_free (name); + g_free (city); + + /* This will update everything related to locations to take into + * account the new location (via the mateconf notification) */ + save_cities_store (cd); + + edit_hide (edit_window, cd); +} + +static void +update_coords_helper (gfloat value, GtkWidget *entry, GtkWidget *combo) +{ + gchar *tmp; + + tmp = g_strdup_printf ("%f", fabsf (value)); + gtk_entry_set_text (GTK_ENTRY (entry), tmp); + g_free (tmp); + + if (value > 0) { + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); + } else { + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1); + } +} + +static void +update_coords (ClockData *cd, gboolean valid, gfloat lat, gfloat lon) +{ + GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry"); + GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry"); + GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo"); + GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo"); + + if (!valid) { + gtk_entry_set_text (GTK_ENTRY (lat_entry), ""); + gtk_entry_set_text (GTK_ENTRY (lon_entry), ""); + gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), -1); + gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), -1); + + return; + } + + update_coords_helper (lat, lat_entry, lat_combo); + update_coords_helper (lon, lon_entry, lon_combo); +} + +static void +fill_timezone_combo_from_location (ClockData *cd, ClockLocation *loc) +{ + if (loc != NULL) { + mateweather_timezone_menu_set_tzid (cd->zone_combo, + clock_location_get_timezone (loc)); + } else { + mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL); + } +} + +static void +location_update_ok_sensitivity (ClockData *cd) +{ + GtkWidget *ok_button; + const gchar *timezone; + gchar *name; + + ok_button = _clock_get_widget (cd, "edit-location-ok-button"); + + timezone = mateweather_timezone_menu_get_tzid (cd->zone_combo); + name = gtk_editable_get_chars (GTK_EDITABLE (cd->location_entry), 0, -1); + + if (timezone && name && name[0] != '\0') { + gtk_widget_set_sensitive (ok_button, TRUE); + } else { + gtk_widget_set_sensitive (ok_button, FALSE); + } + + g_free (name); +} + +static void +location_changed (GObject *object, GParamSpec *param, ClockData *cd) +{ + MateWeatherLocationEntry *entry = MATEWEATHER_LOCATION_ENTRY (object); + MateWeatherLocation *gloc; + MateWeatherTimezone *zone; + gboolean latlon_valid; + double latitude = 0.0, longitude = 0.0; + + gloc = mateweather_location_entry_get_location (entry); + + latlon_valid = gloc && mateweather_location_has_coords (gloc); + if (latlon_valid) + mateweather_location_get_coords (gloc, &latitude, &longitude); + update_coords (cd, latlon_valid, latitude, longitude); + + zone = gloc ? mateweather_location_get_timezone (gloc) : NULL; + if (zone) + mateweather_timezone_menu_set_tzid (cd->zone_combo, mateweather_timezone_get_tzid (zone)); + else + mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL); + + if (gloc) + mateweather_location_unref (gloc); +} + +static void +location_name_changed (GObject *object, ClockData *cd) +{ + location_update_ok_sensitivity (cd); +} + +static void +location_timezone_changed (GObject *object, GParamSpec *param, ClockData *cd) +{ + location_update_ok_sensitivity (cd); +} + +static void +edit_clear (ClockData *cd) +{ + GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry"); + GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry"); + GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo"); + GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo"); + + /* clear out the old data */ + mateweather_location_entry_set_location (cd->location_entry, NULL); + mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL); + + gtk_entry_set_text (GTK_ENTRY (lat_entry), ""); + gtk_entry_set_text (GTK_ENTRY (lon_entry), ""); + + gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), -1); + gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), -1); +} + +static void +edit_hide (GtkWidget *unused, ClockData *cd) +{ + GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window"); + + gtk_widget_hide (edit_window); + edit_clear (cd); +} + +static gboolean +edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd) +{ + edit_hide (unused, cd); + + return TRUE; +} + +static gboolean +edit_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd) +{ + edit_hide (widget, cd); + + return TRUE; +} + +static void +prefs_hide (GtkWidget *widget, ClockData *cd) +{ + GtkWidget *tree; + + edit_hide (widget, cd); + + gtk_widget_hide (cd->prefs_window); + + tree = _clock_get_widget (cd, "cities_list"); + + gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree))); + + refresh_click_timeout_time_only (cd); +} + +static gboolean +prefs_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd) +{ + prefs_hide (widget, cd); + + return TRUE; +} + +static void +prefs_help (GtkWidget *widget, ClockData *cd) +{ + clock_utils_display_help (cd->prefs_window, + "clock", "clock-settings"); +} + +static void +remove_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) +{ + ClockData *cd = data; + ClockLocation *loc = NULL; + + gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1); + cd->locations = g_list_remove (cd->locations, loc); + g_object_unref (loc); + + /* This will update everything related to locations to take into + * account the removed location (via the mateconf notification) */ + save_cities_store (cd); +} + +static void +run_prefs_locations_remove (GtkButton *button, ClockData *cd) +{ + GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations)); + + gtk_tree_selection_selected_foreach (sel, remove_tree_row, cd); +} + +static void +run_prefs_locations_add (GtkButton *button, ClockData *cd) +{ + GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window"); + + fill_timezone_combo_from_location (cd, NULL); + + g_object_set_data (G_OBJECT (edit_window), "clock-location", NULL); + gtk_window_set_title (GTK_WINDOW (edit_window), _("Choose Location")); + gtk_window_set_transient_for (GTK_WINDOW (edit_window), GTK_WINDOW (cd->prefs_window)); + + if (g_object_get_data (G_OBJECT (edit_window), "delete-handler") == NULL) { + g_object_set_data (G_OBJECT (edit_window), "delete-handler", + GINT_TO_POINTER (g_signal_connect (edit_window, "delete_event", G_CALLBACK (edit_delete), cd))); + } + + location_update_ok_sensitivity (cd); + + gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry)); + gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1); + + gtk_window_present_with_time (GTK_WINDOW (edit_window), gtk_get_current_event_time ()); +} + +static void +edit_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) +{ + ClockData *cd = data; + ClockLocation *loc; + const char *name; + gchar *tmp; + gfloat lat, lon; + + /* fill the dialog with this location's data, show it */ + GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window"); + + GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry"); + + GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry"); + + GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo"); + + GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo"); + + edit_clear (cd); + + gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1); + + mateweather_location_entry_set_city (cd->location_entry, + clock_location_get_city (loc), + clock_location_get_weather_code (loc)); + name = clock_location_get_name (loc); + if (name && name[0]) { + gtk_entry_set_text (GTK_ENTRY (cd->location_entry), name); + } + + clock_location_get_coords (loc, &lat, &lon); + + fill_timezone_combo_from_location (cd, loc); + + tmp = g_strdup_printf ("%f", fabsf(lat)); + gtk_entry_set_text (GTK_ENTRY (lat_entry), tmp); + g_free (tmp); + + if (lat > 0) { + gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), 0); + } else { + gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), 1); + } + + tmp = g_strdup_printf ("%f", fabsf(lon)); + gtk_entry_set_text (GTK_ENTRY (lon_entry), tmp); + g_free (tmp); + + if (lon > 0) { + gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), 0); + } else { + gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), 1); + } + + location_update_ok_sensitivity (cd); + + g_object_set_data (G_OBJECT (edit_window), "clock-location", loc); + + gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry)); + gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1); + + gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit Location")); + gtk_window_present (GTK_WINDOW (edit_window)); +} + +static void +run_prefs_locations_edit (GtkButton *unused, ClockData *cd) +{ + GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations)); + + gtk_tree_selection_selected_foreach (sel, edit_tree_row, cd); +} + +static void +set_12hr_format_radio_cb (GtkWidget *widget, ClockData *cd) +{ + const gchar *val; + ClockFormat format; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + format = CLOCK_FORMAT_12; + else + format = CLOCK_FORMAT_24; + + val = mateconf_enum_to_string (format_type_enum_map, format); + + mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), + KEY_FORMAT, val, NULL); +} + +static void +temperature_combo_changed (GtkComboBox *combo, ClockData *cd) +{ + int value; + int old_value; + const gchar *str; + + value = gtk_combo_box_get_active (combo) + 1; + + if (cd->use_temperature_default) + old_value = TEMP_UNIT_DEFAULT; + else + old_value = cd->temperature_unit; + + if (value == old_value) + return; + + str = mateweather_prefs_temp_enum_to_string (value); + + mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), + KEY_TEMPERATURE_UNIT, str, NULL); +} + +static void +speed_combo_changed (GtkComboBox *combo, ClockData *cd) +{ + int value; + int old_value; + const gchar *str; + + value = gtk_combo_box_get_active (combo) + 1; + + if (cd->use_speed_default) + old_value = SPEED_UNIT_DEFAULT; + else + old_value = cd->speed_unit; + + if (value == old_value) + return; + + str = mateweather_prefs_speed_enum_to_string (value); + + mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet), + KEY_SPEED_UNIT, str, NULL); +} + +static void +fill_prefs_window (ClockData *cd) +{ + static const int temperatures[] = { + TEMP_UNIT_DEFAULT, + TEMP_UNIT_KELVIN, + TEMP_UNIT_CENTIGRADE, + TEMP_UNIT_FAHRENHEIT, + -1 + }; + + static const int speeds[] = { + SPEED_UNIT_DEFAULT, + SPEED_UNIT_MS, + SPEED_UNIT_KPH, + SPEED_UNIT_MPH, + SPEED_UNIT_KNOTS, + SPEED_UNIT_BFT, + -1 + }; + + GtkWidget *radio_12hr; + GtkWidget *radio_24hr; + GtkWidget *widget; + GtkCellRenderer *renderer; + GtkTreeViewColumn *col; + GtkListStore *store; + int i; + + /* Set the 12 hour / 24 hour widget */ + radio_12hr = _clock_get_widget (cd, "12hr_radio"); + radio_24hr = _clock_get_widget (cd, "24hr_radio"); + + if (cd->format == CLOCK_FORMAT_12) + widget = radio_12hr; + else + widget = radio_24hr; + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); + + g_signal_connect (radio_12hr, "toggled", + G_CALLBACK (set_12hr_format_radio_cb), cd); + + /* Set the "Show Date" checkbox */ + widget = _clock_get_widget (cd, "date_check"); + g_signal_connect (widget, "toggled", + G_CALLBACK (set_show_date_cb), cd); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showdate); + + /* Set the "Show Seconds" checkbox */ + widget = _clock_get_widget (cd, "seconds_check"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showseconds); + g_signal_connect (widget, "toggled", + G_CALLBACK (set_show_seconds_cb), cd); + + /* Set the "Show weather" checkbox */ + widget = _clock_get_widget (cd, "weather_check"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_weather); + g_signal_connect (widget, "toggled", + G_CALLBACK (set_show_weather_cb), cd); + + /* Set the "Show temperature" checkbox */ + widget = _clock_get_widget (cd, "temperature_check"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_temperature); + g_signal_connect (widget, "toggled", + G_CALLBACK (set_show_temperature_cb), cd); + + /* Fill the Cities list */ + widget = _clock_get_widget (cd, "cities_list"); + + renderer = gtk_cell_renderer_text_new (); + col = gtk_tree_view_column_new_with_attributes (_("City Name"), renderer, "text", COL_CITY_NAME, NULL); + gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1); + + renderer = gtk_cell_renderer_text_new (); + col = gtk_tree_view_column_new_with_attributes (_("City Time Zone"), renderer, "text", COL_CITY_TZ, NULL); + gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1); + + if (cd->cities_store == NULL) + create_cities_store (cd); + + gtk_tree_view_set_model (GTK_TREE_VIEW (widget), + GTK_TREE_MODEL (cd->cities_store)); + + /* Temperature combo */ + widget = _clock_get_widget (cd, "temperature_combo"); + store = gtk_list_store_new (1, G_TYPE_STRING); + gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store)); + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL); + + for (i = 0; temperatures[i] != -1; i++) + gtk_combo_box_append_text (GTK_COMBO_BOX (widget), + mateweather_prefs_get_temp_display_name (temperatures[i])); + + update_temperature_combo (cd); + g_signal_connect (widget, "changed", + G_CALLBACK (temperature_combo_changed), cd); + + /* Wind speed combo */ + widget = _clock_get_widget (cd, "wind_speed_combo"); + store = gtk_list_store_new (1, G_TYPE_STRING); + gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store)); + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL); + + for (i = 0; speeds[i] != -1; i++) + gtk_combo_box_append_text (GTK_COMBO_BOX (widget), + mateweather_prefs_get_speed_display_name (speeds[i])); + + update_speed_combo (cd); + g_signal_connect (widget, "changed", + G_CALLBACK (speed_combo_changed), cd); +} + +static void +ensure_prefs_window_is_created (ClockData *cd) +{ + GtkWidget *edit_window; + GtkWidget *prefs_close_button; + GtkWidget *prefs_help_button; + GtkWidget *clock_options; + GtkWidget *edit_cancel_button; + GtkWidget *edit_ok_button; + GtkWidget *location_box; + GtkWidget *zone_box; + GtkWidget *location_name_label; + GtkWidget *timezone_label; + GtkTreeSelection *selection; + MateWeatherLocation *world; + + if (cd->prefs_window) + return; + + cd->prefs_window = _clock_get_widget (cd, "prefs-window"); + + gtk_window_set_icon_name (GTK_WINDOW (cd->prefs_window), CLOCK_ICON); + + prefs_close_button = _clock_get_widget (cd, "prefs-close-button"); + prefs_help_button = _clock_get_widget (cd, "prefs-help-button"); + clock_options = _clock_get_widget (cd, "clock-options"); + cd->prefs_locations = GTK_TREE_VIEW (_clock_get_widget (cd, "cities_list")); + location_name_label = _clock_get_widget (cd, "location-name-label"); + timezone_label = _clock_get_widget (cd, "timezone-label"); + + + if (!clock_locale_supports_am_pm ()) + gtk_widget_hide (clock_options); + + selection = gtk_tree_view_get_selection (cd->prefs_locations); + g_signal_connect (G_OBJECT (selection), "changed", + G_CALLBACK (prefs_locations_changed), cd); + + g_signal_connect (G_OBJECT (cd->prefs_window), "delete_event", + G_CALLBACK (prefs_hide_event), cd); + + g_signal_connect (G_OBJECT (prefs_close_button), "clicked", + G_CALLBACK (prefs_hide), cd); + + g_signal_connect (G_OBJECT (prefs_help_button), "clicked", + G_CALLBACK (prefs_help), cd); + + cd->prefs_location_remove_button = _clock_get_widget (cd, "prefs-locations-remove-button"); + + g_signal_connect (G_OBJECT (cd->prefs_location_remove_button), "clicked", + G_CALLBACK (run_prefs_locations_remove), cd); + + cd->prefs_location_add_button = _clock_get_widget (cd, "prefs-locations-add-button"); + + g_signal_connect (G_OBJECT (cd->prefs_location_add_button), "clicked", + G_CALLBACK (run_prefs_locations_add), cd); + + cd->prefs_location_edit_button = _clock_get_widget (cd, "prefs-locations-edit-button"); + + g_signal_connect (G_OBJECT (cd->prefs_location_edit_button), "clicked", + G_CALLBACK (run_prefs_locations_edit), cd); + + edit_window = _clock_get_widget (cd, "edit-location-window"); + + gtk_window_set_transient_for (GTK_WINDOW (edit_window), + GTK_WINDOW (cd->prefs_window)); + + g_signal_connect (G_OBJECT (edit_window), "delete_event", + G_CALLBACK (edit_hide_event), cd); + + edit_cancel_button = _clock_get_widget (cd, "edit-location-cancel-button"); + + edit_ok_button = _clock_get_widget (cd, "edit-location-ok-button"); + + world = mateweather_location_new_world (FALSE); + + location_box = _clock_get_widget (cd, "edit-location-name-box"); + cd->location_entry = MATEWEATHER_LOCATION_ENTRY (mateweather_location_entry_new (world)); + gtk_widget_show (GTK_WIDGET (cd->location_entry)); + gtk_container_add (GTK_CONTAINER (location_box), GTK_WIDGET (cd->location_entry)); + gtk_label_set_mnemonic_widget (GTK_LABEL (location_name_label), + GTK_WIDGET (cd->location_entry)); + + g_signal_connect (G_OBJECT (cd->location_entry), "notify::location", + G_CALLBACK (location_changed), cd); + g_signal_connect (G_OBJECT (cd->location_entry), "changed", + G_CALLBACK (location_name_changed), cd); + + zone_box = _clock_get_widget (cd, "edit-location-timezone-box"); + cd->zone_combo = MATEWEATHER_TIMEZONE_MENU (mateweather_timezone_menu_new (world)); + gtk_widget_show (GTK_WIDGET (cd->zone_combo)); + gtk_container_add (GTK_CONTAINER (zone_box), GTK_WIDGET (cd->zone_combo)); + gtk_label_set_mnemonic_widget (GTK_LABEL (timezone_label), + GTK_WIDGET (cd->zone_combo)); + + g_signal_connect (G_OBJECT (cd->zone_combo), "notify::tzid", + G_CALLBACK (location_timezone_changed), cd); + + mateweather_location_unref (world); + + g_signal_connect (G_OBJECT (edit_cancel_button), "clicked", + G_CALLBACK (edit_hide), cd); + + g_signal_connect (G_OBJECT (edit_ok_button), "clicked", + G_CALLBACK (run_prefs_edit_save), cd); + + /* Set up the time setting section */ + + cd->time_settings_button = _clock_get_widget (cd, "time-settings-button"); + g_signal_connect (cd->time_settings_button, "clicked", + G_CALLBACK (run_time_settings), cd); + + /* fill it with the current preferences */ + fill_prefs_window (cd); +} + +static void +display_properties_dialog (ClockData *cd, gboolean start_in_locations_page) +{ + ensure_prefs_window_is_created (cd); + + if (start_in_locations_page) { + GtkWidget *notebook = _clock_get_widget (cd, "notebook"); + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1); + } + + update_set_time_button (cd); + + gtk_window_set_screen (GTK_WINDOW (cd->prefs_window), + gtk_widget_get_screen (cd->applet)); + gtk_window_present (GTK_WINDOW (cd->prefs_window)); + + refresh_click_timeout_time_only (cd); + + /* FMQ: cd->props was the old preferences window; remove references to it */ + /* FMQ: connect to the Help button by hand; look at properties_response_cb() for the help code */ +#if 0 + /* FMQ: check the code below; replace the proper parts */ + GtkWidget *hbox; + GtkWidget *vbox; + GtkWidget *combo; + GtkWidget *label; + + gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("24 hour")); + gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("UNIX time")); + gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Internet time")); + + gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); + gtk_widget_show (combo); + + cd->custom_hbox = gtk_hbox_new (FALSE, 12); + gtk_box_pack_start (GTK_BOX (vbox), cd->custom_hbox, TRUE, TRUE, 0); + + cd->custom_label = gtk_label_new_with_mnemonic (_("Custom _format:")); + gtk_label_set_use_markup (GTK_LABEL (cd->custom_label), TRUE); + gtk_label_set_justify (GTK_LABEL (cd->custom_label), + GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (cd->custom_label), 0, 0.5); + gtk_box_pack_start (GTK_BOX (cd->custom_hbox), + cd->custom_label, + FALSE, FALSE, 0); + + cd->custom_entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (cd->custom_hbox), + cd->custom_entry, + FALSE, FALSE, 0); + gtk_entry_set_text (GTK_ENTRY (cd->custom_entry), + cd->custom_format); + g_signal_connect (cd->custom_entry, "changed", + G_CALLBACK (set_custom_format_cb), + cd); + + g_signal_connect (cd->props, "destroy", + G_CALLBACK (gtk_widget_destroyed), + &cd->props); + g_signal_connect (cd->props, "response", + G_CALLBACK (properties_response_cb), + cd); + + cd->custom_format_shown = FALSE; + update_properties_for_format (cd, GTK_COMBO_BOX (combo), cd->format); + + /* valid values begin from 1 */ + if (cd->can_handle_format_12) + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), + cd->format - 1); + else + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), + cd->format - 2); + + g_signal_connect (combo, "changed", + G_CALLBACK (set_format_cb), cd); + + /* Now set up the sensitivity based on mateconf key writability */ + setup_writability_sensitivity (cd, combo, label, KEY_FORMAT); + setup_writability_sensitivity (cd, cd->custom_entry, cd->custom_label, + KEY_CUSTOM_FORMAT); + setup_writability_sensitivity (cd, cd->showseconds_check, NULL, KEY_SHOW_SECONDS); + setup_writability_sensitivity (cd, cd->showdate_check, NULL, KEY_SHOW_DATE); + + gtk_widget_show (cd->props); +#endif +} + +static void +verb_display_properties_dialog (GtkAction *action, + ClockData *cd) +{ + display_properties_dialog (cd, FALSE); +} + +static void +display_help_dialog (GtkAction *action, + ClockData *cd) +{ + clock_utils_display_help (cd->applet, "clock", NULL); +} + +static void display_about_dialog(GtkAction* action, ClockData* cd) +{ + static const gchar* authors[] = { + "George Lebl <[email protected]>", + "Gediminas Paulauskas <[email protected]>", + NULL + }; + + static const char* documenters[] = { + "Dan Mueth <[email protected]>", + NULL + }; + + char copyright[] = \ + "Copyright \xc2\xa9 1998-2004 Free Software Foundation, Inc."; + + gtk_show_about_dialog(NULL, + "program-name", _("Clock"), + "authors", authors, + "comments", _("The Clock displays the current time and date"), + "copyright", copyright, + "documenters", documenters, + "logo-icon-name", CLOCK_ICON, + "translator-credits", _("translator-credits"), + "version", VERSION, + "website", "http://matsusoft.com.ar/projects/mate/", + NULL); +} + +static gboolean +clock_factory (MatePanelApplet *applet, + const char *iid, + gpointer data) +{ + gboolean retval = FALSE; + + if (!strcmp (iid, "ClockApplet")) + retval = fill_clock_applet (applet); + + return retval; +} + +#ifdef CLOCK_INPROCESS +MATE_PANEL_APPLET_IN_PROCESS_FACTORY ("ClockAppletFactory", + PANEL_TYPE_APPLET, + "ClockApplet", + clock_factory, + NULL) +#else +MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("ClockAppletFactory", + PANEL_TYPE_APPLET, + "ClockApplet", + clock_factory, + NULL) +#endif diff --git a/applets/clock/clock.h b/applets/clock/clock.h new file mode 100644 index 00000000..f2347f68 --- /dev/null +++ b/applets/clock/clock.h @@ -0,0 +1,41 @@ +/* + * clock.h + * + * Copyright (C) 2007 Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Authors: + * Vincent Untz <[email protected]> + * + * Most of the original code comes from clock.c + */ + +#ifndef CLOCK_H +#define CLOCK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define CLOCK_ICON "mate-panel-clock" +#define CLOCK_SCHEMA_DIR "/schemas/apps/clock_applet/prefs" + +#ifdef __cplusplus +} +#endif + +#endif /* CLOCK_H */ diff --git a/applets/clock/clock.schemas.in b/applets/clock/clock.schemas.in new file mode 100644 index 00000000..badec94e --- /dev/null +++ b/applets/clock/clock.schemas.in @@ -0,0 +1,313 @@ +<?xml version="1.0"?> +<mateconfschemafile> + <schemalist> + + <schema> + <key>/schemas/apps/clock_applet/prefs/format</key> + <owner>clock-applet</owner> + <type>string</type> + <locale name="C"> + <default> + <!-- Translators: + This controls whether the MATE panel clock should display time in 24 hour mode + or 12 hour mode by default. The only valid values for this are "24-hour" and + "12-hour". If your locale uses 24 hour time notation, translate this to "24-hour". + If your locale uses 12 hour time notation with am/pm, translate this to "12-hour". + + Do NOT translate this into anything else than "24-hour" or "12-hour". For example, + if you translate this to "24 sata" or anything else that isn't "24-hour" or + "12-hour", things will not work. + --> + 24-hour + </default> + <short>Hour format</short> + <long> + This key specifies the hour format used by the clock applet. + Possible values are "12-hour", "24-hour", "internet", "unix" and + "custom". + If set to "internet", the clock will display Internet time. + The Internet time system divides the day into 1000 ".beats". There + are no time zones in this system, so time is the same all over the + world. + If set to "unix", the clock will display time in seconds since + Epoch, i.e. 1970-01-01. + If set to "custom", the clock will display time according to the + format specified in the custom_format key. + </long> + </locale> + <locale name="en_US"> + <default>12-hour</default> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/custom_format</key> + <owner>clock-applet</owner> + <type>string</type> + <default></default> + <locale name="C"> + <short>Custom format of the clock</short> + <long> + This key specifies the format used by the clock applet when the + format key is set to "custom". You can use conversion specifiers + understood by strftime() to obtain a specific format. See the + strftime() manual for more information. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/show_seconds</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Show time with seconds</short> + <long>If true, display seconds in time.</long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/show_date</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Show date in clock</short> + <long>If true, display date in the clock, in addition to time.</long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/show_tooltip</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Show date in tooltip</short> + <long> + If true, show date in a tooltip when the pointer is over the clock. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/show_weather</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Show weather in clock</short> + <long>If true, display a weather icon.</long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/show_temperature</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Show temperature in clock</short> + <long>If true, show the temperature next to the weather icon.</long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/gmt_time</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Use UTC</short> + <long> + The use of this key was deprecated in MATE 2.28 in favour of the + use of timezones. The schema is retained for compatibility with + older versions. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/config_tool</key> + <owner>clock-applet</owner> + <type>string</type> + <default> </default> + <locale name="C"> + <short>Time configuration tool</short> + <long> + The use of this key was deprecated in MATE 2.22 with the use + of an internal time configuration tool. The schema is retained for + compatibility with older versions. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/show_week_numbers</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short>Show week numbers in calendar</short> + <long> + If true, show week numbers in the calendar. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/expand_appointments</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Expand list of appointments</short> + <long> + If true, expand the list of appointments in the calendar window. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/expand_birthdays</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Expand list of birthdays</short> + <long> + If true, expand the list of birthdays in the calendar window. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/expand_tasks</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Expand list of tasks</short> + <long> + If true, expand the list of tasks in the calendar window. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/expand_weather</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Expand list of weather information</short> + <long> + If true, expand the list of weather information in the calendar + window. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/expand_locations</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Expand list of locations</short> + <long> + If true, expand the list of locations in the calendar + window. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/hour_format</key> + <owner>clock-applet</owner> + <type>int</type> + <default>12</default> + <locale name="C"> + <short>Hour format</short> + <long> + The use of this key was deprecated in MATE 2.6 in favour of the + 'format' key. The schema is retained for compatibility with older + versions. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/unix_time</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Use UNIX time</short> + <long> + The use of this key was deprecated in MATE 2.6 in favour of the + 'format' key. The schema is retained for compatibility with older + versions. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/internet_time</key> + <owner>clock-applet</owner> + <type>bool</type> + <default>false</default> + <locale name="C"> + <short>Use Internet time</short> + <long> + The use of this key was deprecated in MATE 2.6 in favour of the + 'format' key. The schema is retained for compatibility with older + versions. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/cities</key> + <owner>clock-applet</owner> + <type>list</type> + <list_type>string</list_type> + <default>[]</default> + <locale name="C"> + <short>List of locations</short> + <long> + A list of locations to display in the calendar window. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/temperature_unit</key> + <owner>clock-applet</owner> + <type>string</type> + <default>Default</default> + <locale name="C"> + <short>Temperature unit</short> + <long> + The unit to use when showing temperatures. + </long> + </locale> + </schema> + + <schema> + <key>/schemas/apps/clock_applet/prefs/speed_unit</key> + <owner>clock-applet</owner> + <type>string</type> + <default>Default</default> + <locale name="C"> + <short>Speed unit</short> + <long> + The unit to use when showing wind speed. + </long> + </locale> + </schema> + + </schemalist> + +</mateconfschemafile> diff --git a/applets/clock/clock.ui b/applets/clock/clock.ui new file mode 100644 index 00000000..11d9f8db --- /dev/null +++ b/applets/clock/clock.ui @@ -0,0 +1,1136 @@ +<?xml version="1.0"?> +<interface> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy toplevel-contextual --> + <object class="GtkDialog" id="edit-location-window"> + <property name="border_width">5</property> + <property name="resizable">False</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox3"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkTable" id="table26"> + <property name="visible">True</property> + <property name="n_columns">3</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkVBox" id="vbox34"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow12"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <child> + <object class="GtkViewport" id="viewport3"> + <property name="visible">True</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkImage" id="image30"> + <property name="stock">gtk-missing-image</property> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="table27"> + <property name="visible">True</property> + <property name="border_width">5</property> + <property name="n_rows">5</property> + <property name="n_columns">4</property> + <property name="column_spacing">6</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkLabel" id="label243"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes" comments="Languages that have a single word that translates as either "state" or "province" should use that instead of "region"."><small><i>Type a city, region, or country name and then select a match from the pop-up.</i></small></property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">4</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkVBox" id="edit-location-name-box"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="edit-location-timezone-box"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">4</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="timezone-label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Timezone:</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="location-name-label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Location Name:</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkEntry" id="edit-location-latitude-entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="edit-location-latitude-combo"> + <property name="visible">True</property> + <property name="model">liststore2</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext2"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label240"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><i>(optional)</i></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label239"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes"><i>(optional)</i></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">3</property> + <property name="right_attach">4</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="edit-location-longitude-combo"> + <property name="visible">True</property> + <property name="model">liststore1</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="edit-location-longitude-entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">•</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label238"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">L_ongitude:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">edit-location-longitude-entry</property> + </object> + <packing> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox35"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkLabel" id="label237"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">L_atitude:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">edit-location-latitude-entry</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + </packing> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="right_attach">3</property> + <property name="y_options"></property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area3"> + <property name="visible">True</property> + <child> + <object class="GtkButton" id="edit-location-cancel-button"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="edit-location-ok-button"> + <property name="label">gtk-ok</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">edit-location-cancel-button</action-widget> + <action-widget response="-5">edit-location-ok-button</action-widget> + </action-widgets> + </object> + <object class="GtkDialog" id="set-time-window"> + <property name="border_width">5</property> + <property name="title" translatable="yes">Time & Date</property> + <property name="resizable">False</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox2"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="yscale">0</property> + <property name="top_padding">7</property> + <property name="bottom_padding">6</property> + <property name="left_padding">7</property> + <property name="right_padding">7</property> + <child> + <object class="GtkHBox" id="time_settings_box"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <child> + <object class="GtkCalendar" id="calendar"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="year">2009</property> + <property name="month">5</property> + <property name="day">3</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkTable" id="table1"> + <property name="visible">True</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkHBox" id="hbox61"> + <property name="visible">True</property> + <child> + <object class="GtkSpinButton" id="hours_spin"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="adjustment">adjustment3</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + <property name="wrap">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="minutes_spin"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="adjustment">adjustment2</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + <property name="wrap">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="seconds_spin"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="adjustment">adjustment1</property> + <property name="climb_rate">1</property> + <property name="numeric">True</property> + <property name="wrap">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="current_time_label"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label">23:59:59</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label236"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Time:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">hours_spin</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label235"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Current Time:</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area2"> + <property name="visible">True</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="cancel-set-time-button"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="set-time-button"> + <property name="label" translatable="yes">_Set System Time</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="0">cancel-set-time-button</action-widget> + <action-widget response="0">set-time-button</action-widget> + </action-widgets> + </object> + <object class="GtkListStore" id="liststore1"> + <columns> + <!-- column-name item --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">East</col> + </row> + <row> + <col id="0" translatable="yes">West</col> + </row> + </data> + </object> + <object class="GtkListStore" id="liststore2"> + <columns> + <!-- column-name item --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">North</col> + </row> + <row> + <col id="0" translatable="yes">South</col> + </row> + </data> + </object> + <object class="GtkDialog" id="prefs-window"> + <property name="border_width">5</property> + <property name="title" translatable="yes">Clock Preferences</property> + <property name="resizable">False</property> + <property name="window_position">center</property> + <property name="type_hint">dialog</property> + <property name="has_separator">False</property> + <child internal-child="vbox"> + <object class="GtkVBox" id="dialog-vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child> + <object class="GtkNotebook" id="notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="border_width">5</property> + <child> + <object class="GtkVBox" id="vbox17"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkVBox" id="clock-options"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label210"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Clock Format</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment32"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <object class="GtkHBox" id="hbox49"> + <property name="visible">True</property> + <property name="spacing">13</property> + <child> + <object class="GtkRadioButton" id="12hr_radio"> + <property name="label" translatable="yes">_12 hour format</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="24hr_radio"> + <property name="label" translatable="yes">_24 hour format</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + <property name="group">12hr_radio</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox29"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label229"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Panel Display</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment33"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <object class="GtkVBox" id="vbox30"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="date_check"> + <property name="label" translatable="yes">Show the _date</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="seconds_check"> + <property name="label" translatable="yes">Show seco_nds</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="weather_check"> + <property name="label" translatable="yes">Show _weather</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="temperature_check"> + <property name="label" translatable="yes">Show _temperature</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label209"> + <property name="visible">True</property> + <property name="label" translatable="yes">General</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox24"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkHBox" id="hbox54"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow10"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="cities_list"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> + <property name="hover_expand">True</property> + </object> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVButtonBox" id="vbuttonbox2"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <property name="layout_style">start</property> + <child> + <object class="GtkButton" id="prefs-locations-add-button"> + <property name="label">gtk-add</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="prefs-locations-edit-button"> + <property name="label">gtk-edit</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="prefs-locations-remove-button"> + <property name="label">gtk-remove</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label220"> + <property name="visible">True</property> + <property name="label" translatable="yes">Locations</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="vbox27"> + <property name="visible">True</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkVBox" id="vbox28"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label224"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Display</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment34"> + <property name="visible">True</property> + <property name="left_padding">12</property> + <child> + <object class="GtkTable" id="table25"> + <property name="visible">True</property> + <property name="n_rows">4</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">6</property> + <child> + <object class="GtkComboBox" id="visibility_combo"/> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label232"> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Visibility unit:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">visibility_combo</property> + </object> + <packing> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="pressure_combo"/> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label231"> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Pressure unit:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">pressure_combo</property> + </object> + <packing> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="wind_speed_combo"> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="temperature_combo"> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label228"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Wind speed unit:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">wind_speed_combo</property> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label227"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Temperature unit:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">temperature_combo</property> + </object> + <packing> + <property name="x_options">GTK_FILL</property> + <property name="y_options"></property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label223"> + <property name="visible">True</property> + <property name="label" translatable="yes">Weather</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child internal-child="action_area"> + <object class="GtkHButtonBox" id="dialog-action_area1"> + <property name="visible">True</property> + <child> + <object class="GtkButton" id="prefs-help-button"> + <property name="label">gtk-help</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="time-settings-button"> + <property name="label" translatable="yes">Time _Settings</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="prefs-close-button"> + <property name="label">gtk-close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="has_default">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-11">prefs-help-button</action-widget> + <action-widget response="0">time-settings-button</action-widget> + <action-widget response="-7">prefs-close-button</action-widget> + </action-widgets> + </object> + <object class="GtkAdjustment" id="adjustment1"> + <property name="value">59</property> + <property name="upper">59</property> + <property name="step_increment">1</property> + <property name="page_increment">30</property> + </object> + <object class="GtkAdjustment" id="adjustment2"> + <property name="value">59</property> + <property name="upper">59</property> + <property name="step_increment">1</property> + <property name="page_increment">30</property> + </object> + <object class="GtkAdjustment" id="adjustment3"> + <property name="value">23</property> + <property name="upper">23</property> + <property name="step_increment">1</property> + <property name="page_increment">12</property> + </object> +</interface> diff --git a/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in b/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in new file mode 100644 index 00000000..31ccda1f --- /dev/null +++ b/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in @@ -0,0 +1,18 @@ +[Applet Factory] +Id=ClockAppletFactory +InProcess=@IN_PROCESS@ +Location=@LOCATION@ +_Name=Clock Applet Factory +_Description=Factory for clock applet + +[ClockApplet] +_Name=Clock +_Description=Get the current time and date +Icon=mate-panel-clock +MateComponentId=OAFIID:MATE_ClockApplet; +X-MATE-Bugzilla-Bugzilla=MATE +X-MATE-Bugzilla-Product=mate-panel +X-MATE-Bugzilla-Component=clock +X-MATE-Bugzilla-Version=@VERSION@ +X-MATE-Bugzilla-OtherBinaries=clock-applet + diff --git a/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in b/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in new file mode 100644 index 00000000..bb866606 --- /dev/null +++ b/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=org.mate.panel.applet.ClockAppletFactory +Exec=@LOCATION@ diff --git a/applets/clock/pixmaps/Makefile.am b/applets/clock/pixmaps/Makefile.am new file mode 100644 index 00000000..3e9f5077 --- /dev/null +++ b/applets/clock/pixmaps/Makefile.am @@ -0,0 +1,21 @@ +icondir = $(datadir)/mate-panel/pixmaps +icon_DATA = \ + clock-calendar-icon.png \ + clock-face-large.svg \ + clock-face-small.svg \ + clock-face-small-morning.svg \ + clock-face-small-day.svg \ + clock-face-small-evening.svg \ + clock-face-small-night.svg \ + clock-map.png \ + clock-map-location-marker.png \ + clock-map-location-current.png \ + clock-map-location-hilight.png + +EXTRA_DIST = \ + clock-map.svg \ + $(icon_DATA) + +MAINTAINERCLEANFILES = Makefile.in + +-include $(top_srcdir)/git.mk diff --git a/applets/clock/pixmaps/Makefile.in b/applets/clock/pixmaps/Makefile.in new file mode 100644 index 00000000..11e6f2ff --- /dev/null +++ b/applets/clock/pixmaps/Makefile.in @@ -0,0 +1,537 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = applets/clock/pixmaps +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(icondir)" +DATA = $(icon_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLOCK_CFLAGS = @CLOCK_CFLAGS@ +CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@ +CLOCK_LIBS = @CLOCK_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISABLE_DEPRECATED = @DISABLE_DEPRECATED@ +DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ +DLLTOOL = @DLLTOOL@ +DOC_USER_FORMATS = @DOC_USER_FORMATS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@ +EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FISH_CFLAGS = @FISH_CFLAGS@ +FISH_LIBS = @FISH_LIBS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GIO_QUERYMODULES = @GIO_QUERYMODULES@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HELP_DIR = @HELP_DIR@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@ +INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@ +INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@ +INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@ +INTROSPECTION_LIBS = @INTROSPECTION_LIBS@ +INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@ +INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@ +INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@ +LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@ +LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@ +LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@ +LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@ +MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@ +MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@ +MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@ +MATECONFTOOL = @MATECONFTOOL@ +MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@ +MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@ +MATECORBA_IDL = @MATECORBA_IDL@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@ +NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@ +NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMF_DIR = @OMF_DIR@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PANEL_CFLAGS = @PANEL_CFLAGS@ +PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@ +PANEL_LIBS = @PANEL_LIBS@ +PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@ +PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +REBUILD = @REBUILD@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TZ_CFLAGS = @TZ_CFLAGS@ +TZ_LIBS = @TZ_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARN_CFLAGS = @WARN_CFLAGS@ +WNCKLET_CFLAGS = @WNCKLET_CFLAGS@ +WNCKLET_LIBS = @WNCKLET_LIBS@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +XRANDR_CFLAGS = @XRANDR_CFLAGS@ +XRANDR_LIBS = @XRANDR_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +appletsdir = @appletsdir@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulesdir = @modulesdir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +icondir = $(datadir)/mate-panel/pixmaps +icon_DATA = \ + clock-calendar-icon.png \ + clock-face-large.svg \ + clock-face-small.svg \ + clock-face-small-morning.svg \ + clock-face-small-day.svg \ + clock-face-small-evening.svg \ + clock-face-small-night.svg \ + clock-map.png \ + clock-map-location-marker.png \ + clock-map-location-current.png \ + clock-map-location-hilight.png + +EXTRA_DIST = \ + clock-map.svg \ + $(icon_DATA) + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/clock/pixmaps/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu applets/clock/pixmaps/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-iconDATA: $(icon_DATA) + @$(NORMAL_INSTALL) + test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)" + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ + done + +uninstall-iconDATA: + @$(NORMAL_UNINSTALL) + @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(icondir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(icondir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(icondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-iconDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-iconDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-iconDATA install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-iconDATA + + +-include $(top_srcdir)/git.mk + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/applets/clock/pixmaps/clock-calendar-icon.png b/applets/clock/pixmaps/clock-calendar-icon.png Binary files differnew file mode 100644 index 00000000..cfab7200 --- /dev/null +++ b/applets/clock/pixmaps/clock-calendar-icon.png diff --git a/applets/clock/pixmaps/clock-face-large.svg b/applets/clock/pixmaps/clock-face-large.svg new file mode 100644 index 00000000..09b3224f --- /dev/null +++ b/applets/clock/pixmaps/clock-face-large.svg @@ -0,0 +1,291 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="50" + height="50" + id="svg5416" + sodipodi:version="0.32" + inkscape:version="0.43" + version="1.0" + sodipodi:docbase="/home/garrett/Desktop" + sodipodi:docname="clock-face-large.svg"> + <defs + id="defs5418"> + <linearGradient + id="linearGradient10653"> + <stop + id="stop10655" + offset="0.0000000" + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" /> + <stop + id="stop10657" + offset="1.0000000" + style="stop-color:#9193af;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + id="stop42176" + offset="0.0000000" + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" /> + <stop + id="stop42178" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + id="stop2147" + offset="0.0000000" + style="stop-color:#fffffd;stop-opacity:1.0000000;" /> + <stop + id="stop2149" + offset="1" + style="stop-color:#d9d9d8;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + style="stop-color:#9497b3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop37937" /> + <stop + style="stop-color:#4c4059;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop37939" /> + </linearGradient> + <linearGradient + id="linearGradient3816" + inkscape:collect="always"> + <stop + id="stop3818" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3820" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5593" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5595" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5597" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient5599" + gradientUnits="userSpaceOnUse" + cx="11.3292" + cy="10.58397" + fx="11.3292" + fy="10.58397" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5601" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5603" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient5605" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="10.446983" + inkscape:cx="24.509202" + inkscape:cy="28.161554" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1600" + inkscape:window-height="1152" + inkscape:window-x="0" + inkscape:window-y="0" /> + <metadata + id="metadata5421"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <path + d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4415" + style="opacity:1;color:#000000;fill:url(#radialGradient5605);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(2.30892,0,0,1.098631,-46.84483,19.60015)" /> + <path + transform="matrix(1.548421,0,0,1.548421,-0.161834,-1.184899)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4417" + style="fill:url(#radialGradient5593);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.17789125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(1.294287,0,0,1.294287,3.865446,3.010334)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4419" + style="fill:url(#radialGradient5595);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5597);stroke-width:1.19954503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5599);stroke-width:1.24198496;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path4421" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + transform="matrix(1.468514,0,0,1.468514,1.136597,7.079533e-2)" /> + <path + transform="matrix(1.294287,0,0,1.294287,3.865446,3.010334)" + d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4429" + style="opacity:0.53921569;fill:url(#radialGradient5601);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5603);stroke-width:1.19954503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" + sodipodi:type="arc" /> + <g + id="g4760" + transform="matrix(0.966895,0,0,0.966895,0.827632,0.827631)"> + <path + id="text4433" + d="M 23.395162,9.0668143 L 23.395162,12.043662 L 23.913899,12.043662 L 23.913899,7.8642859 L 23.572004,7.8642859 C 23.389268,8.5068127 23.271372,8.5952346 22.469687,8.6954452 L 22.469687,9.0668143 L 23.395162,9.0668143 M 27.500839,11.530819 L 25.302099,11.530819 C 25.355151,11.188924 25.543785,10.970817 26.056627,10.670186 L 26.646102,10.351869 C 27.229681,10.033553 27.530313,9.6032358 27.530313,9.0903933 C 27.530313,8.7426035 27.38884,8.4183919 27.141261,8.1943917 C 26.893681,7.9703915 26.587153,7.8642859 26.192206,7.8642859 C 25.661679,7.8642859 25.266731,8.0529181 25.036836,8.4066026 C 24.889466,8.6306028 24.824624,8.8899723 24.812835,9.3143937 L 25.331573,9.3143937 C 25.349257,9.0314461 25.384625,8.860498 25.455362,8.724919 C 25.590941,8.4714451 25.8621,8.3181814 26.174521,8.3181814 C 26.646101,8.3181814 26.999786,8.6541824 26.999786,9.1021828 C 26.999786,9.4322883 26.805259,9.7152367 26.43389,9.927447 L 25.891573,10.233974 C 25.019152,10.729133 24.765676,11.124082 24.718519,12.043662 L 27.500839,12.043662 L 27.500839,11.530819" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4437" + d="M 16.212011,11.007326 L 16.212011,13.984173 L 16.730749,13.984173 L 16.730749,9.8047976 L 16.388853,9.8047976 C 16.206116,10.447324 16.08822,10.535746 15.286536,10.635957 L 15.286536,11.007326 L 16.212011,11.007326 M 18.861687,11.007326 L 18.861687,13.984173 L 19.380424,13.984173 L 19.380424,9.8047976 L 19.038529,9.8047976 C 18.855792,10.447324 18.737896,10.535746 17.936211,10.635957 L 17.936211,11.007326 L 18.861687,11.007326" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4441" + d="M 10.655018,16.363726 L 10.655018,19.340573 L 11.173756,19.340573 L 11.173756,15.161197 L 10.831861,15.161197 C 10.649124,15.803724 10.531228,15.892146 9.7295429,15.992356 L 9.7295429,16.363726 L 10.655018,16.363726 M 13.39901,15.161197 C 13.009957,15.161197 12.656272,15.332145 12.438166,15.620987 C 12.167008,15.986461 12.031429,16.546463 12.031429,17.318675 C 12.031429,18.727518 12.503009,19.476152 13.39901,19.476152 C 14.283221,19.476152 14.766591,18.727518 14.766591,17.354043 C 14.766591,16.540569 14.636907,15.998251 14.359854,15.620987 C 14.141748,15.32625 13.793958,15.161197 13.39901,15.161197 M 13.39901,15.620987 C 13.95901,15.620987 14.236064,16.186884 14.236064,17.306885 C 14.236064,18.491728 13.964905,19.045836 13.38722,19.045836 C 12.83901,19.045836 12.561956,18.468149 12.561956,17.324569 C 12.561956,16.18099 12.83901,15.620987 13.39901,15.620987" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4445" + d="M 8.7336924,25.958803 C 8.833903,26.642593 9.2819044,27.049331 9.9185369,27.049331 C 10.378326,27.049331 10.796854,26.825331 11.038539,26.453962 C 11.303802,26.047225 11.421697,25.534381 11.421697,24.773959 C 11.421697,24.072485 11.315592,23.624483 11.068012,23.253114 C 10.838117,22.917114 10.472642,22.734376 10.012853,22.734376 C 9.2170623,22.734376 8.6452711,23.323852 8.6452711,24.143221 C 8.6452711,24.921327 9.1757991,25.469539 9.9303258,25.469539 C 10.325274,25.469539 10.614117,25.328065 10.885275,25.003854 C 10.87938,26.023644 10.549274,26.589541 9.9539049,26.589541 C 9.5884311,26.589541 9.3349564,26.359645 9.25243,25.958803 L 8.7336924,25.958803 M 10.006958,23.188272 C 10.490327,23.188272 10.855801,23.589115 10.855801,24.131431 C 10.855801,24.644274 10.496221,25.009749 9.9892739,25.009749 C 9.4882205,25.009749 9.1757983,24.661958 9.1757983,24.101958 C 9.1757983,23.571431 9.5294836,23.188272 10.006958,23.188272" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4449" + d="M 12.931858,32.152782 C 13.362174,31.893414 13.503648,31.681202 13.503648,31.286254 C 13.503648,30.631938 12.990804,30.172147 12.248067,30.172147 C 11.511224,30.172147 10.992486,30.631938 10.992486,31.286254 C 10.992486,31.675307 11.13396,31.887519 11.558382,32.152782 C 11.080908,32.382677 10.845117,32.730468 10.845117,33.190258 C 10.845117,33.956574 11.422803,34.487102 12.248067,34.487102 C 13.073331,34.487102 13.651017,33.956574 13.651017,33.196153 C 13.651017,32.730468 13.415226,32.382677 12.931858,32.152782 M 12.248067,30.631937 C 12.690173,30.631937 12.973121,30.891307 12.973121,31.298044 C 12.973121,31.687097 12.684278,31.946466 12.248067,31.946466 C 11.811856,31.946466 11.523013,31.687097 11.523013,31.292149 C 11.523013,30.891307 11.811856,30.631937 12.248067,30.631937 M 12.248067,32.382677 C 12.766804,32.382677 13.12049,32.712784 13.12049,33.202047 C 13.12049,33.697206 12.766804,34.027312 12.236277,34.027312 C 11.72933,34.027312 11.375644,33.691311 11.375644,33.202047 C 11.375644,32.712784 11.72933,32.382677 12.248067,32.382677" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4453" + d="M 18.730535,35.691354 L 15.936425,35.691354 L 15.936425,36.204197 L 18.194113,36.204197 C 17.197902,37.62483 16.791163,38.497255 16.478742,39.87073 L 17.032848,39.87073 C 17.262743,38.532624 17.787376,37.383145 18.730535,36.127565 L 18.730535,35.691354" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4457" + d="M 26.296845,38.911288 C 26.196634,38.227498 25.748632,37.82076 25.112,37.82076 C 24.65221,37.82076 24.239577,38.044761 23.991998,38.41613 C 23.73263,38.822867 23.614734,39.335711 23.614734,40.096133 C 23.614734,40.797607 23.72084,41.245609 23.968419,41.616977 C 24.19242,41.952978 24.557895,42.135715 25.017684,42.135715 C 25.813474,42.135715 26.385266,41.54624 26.385266,40.726871 C 26.385266,39.948765 25.854738,39.400552 25.106106,39.400552 C 24.693474,39.400552 24.369262,39.559711 24.145262,39.866237 C 24.151156,38.846447 24.481263,38.28055 25.076632,38.28055 C 25.442106,38.28055 25.69558,38.510446 25.778107,38.911288 L 26.296845,38.911288 M 25.041263,39.860343 C 25.542316,39.860343 25.854738,40.208133 25.854738,40.768134 C 25.854738,41.292766 25.501053,41.675925 25.023579,41.675925 C 24.54021,41.675925 24.174735,41.275082 24.174735,40.73866 C 24.174735,40.219923 24.528421,39.860343 25.041263,39.860343" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4461" + d="M 33.602455,35.88379 L 31.444977,35.88379 L 31.132555,38.159163 L 31.61003,38.159163 C 31.851714,37.870321 32.052136,37.77011 32.376347,37.77011 C 32.936348,37.77011 33.290033,38.153269 33.290033,38.772217 C 33.290033,39.37348 32.942242,39.738955 32.376347,39.738955 C 31.922452,39.738955 31.645398,39.509059 31.521609,39.03748 L 31.002871,39.03748 C 31.073608,39.379375 31.132556,39.544429 31.256345,39.697692 C 31.492135,40.016008 31.916557,40.198745 32.388137,40.198745 C 33.231085,40.198745 33.82056,39.585691 33.82056,38.70148 C 33.82056,37.876216 33.272348,37.310319 32.470663,37.310319 C 32.175926,37.310319 31.940136,37.386951 31.698451,37.563793 L 31.863504,36.396633 L 33.602455,36.396633 L 33.602455,35.88379" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4465" + d="M 38.288591,33.62013 L 38.288591,34.622237 L 38.807329,34.622237 L 38.807329,33.62013 L 39.426278,33.62013 L 39.426278,33.154445 L 38.807329,33.154445 L 38.807329,30.442861 L 38.424171,30.442861 L 36.526062,33.071918 L 36.526062,33.62013 L 38.288591,33.62013 M 38.288591,33.154445 L 36.979958,33.154445 L 38.288591,31.327073 L 38.288591,33.154445" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4469" + d="M 39.674726,25.214253 L 39.739568,25.214253 L 39.957674,25.208358 C 40.529464,25.208358 40.824202,25.467727 40.824202,25.96878 C 40.824202,26.493412 40.49999,26.805834 39.957674,26.805834 C 39.391779,26.805834 39.114725,26.522886 39.079356,25.915728 L 38.560619,25.915728 C 38.584198,26.251728 38.643145,26.469834 38.743356,26.658466 C 38.955566,27.059308 39.3682,27.265625 39.939989,27.265625 C 40.800622,27.265625 41.354729,26.752781 41.354729,25.962886 C 41.354729,25.432359 41.148412,25.137621 40.647359,24.966673 C 41.036412,24.81341 41.230939,24.518672 41.230939,24.100145 C 41.230939,23.380987 40.753464,22.95067 39.957674,22.95067 C 39.114726,22.95067 38.666724,23.410461 38.64904,24.300567 L 39.167778,24.300567 C 39.173672,24.047093 39.197251,23.905619 39.262094,23.775934 C 39.379988,23.546039 39.639358,23.404565 39.963568,23.404565 C 40.423358,23.404565 40.700412,23.675724 40.700412,24.11783 C 40.700412,24.412567 40.594306,24.58941 40.364411,24.683725 C 40.222937,24.742673 40.0402,24.766252 39.674726,24.772147 L 39.674726,25.214253" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4473" + d="M 39.352593,19.045902 L 37.153852,19.045902 C 37.206905,18.704007 37.395538,18.485901 37.90838,18.185269 L 38.497855,17.866953 C 39.081434,17.548636 39.382067,17.118319 39.382067,16.605477 C 39.382067,16.257687 39.240593,15.933475 38.993014,15.709475 C 38.745434,15.485475 38.438907,15.379369 38.043959,15.379369 C 37.513433,15.379369 37.118484,15.568001 36.888589,15.921686 C 36.74122,16.145686 36.676378,16.405056 36.664588,16.829477 L 37.183326,16.829477 C 37.20101,16.546529 37.236379,16.375581 37.307116,16.240002 C 37.442695,15.986528 37.713854,15.833265 38.026275,15.833265 C 38.497854,15.833265 38.85154,16.169266 38.85154,16.617266 C 38.85154,16.947372 38.657013,17.23032 38.285644,17.442531 L 37.743327,17.749058 C 36.870905,18.244216 36.61743,18.639165 36.570272,19.558745 L 39.352593,19.558745 L 39.352593,19.045902" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + <path + id="text4477" + d="M 32.615084,11.132164 L 32.615084,14.109011 L 33.133822,14.109011 L 33.133822,9.929635 L 32.791927,9.929635 C 32.60919,10.572162 32.491294,10.660584 31.689609,10.760795 L 31.689609,11.132164 L 32.615084,11.132164" + style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" /> + </g> + <path + sodipodi:type="arc" + style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4423" + sodipodi:cx="119.38776" + sodipodi:cy="118.2449" + sodipodi:rx="11.22449" + sodipodi:ry="11.22449" + d="M 130.61225 118.2449 A 11.22449 11.22449 0 1 1 108.16327,118.2449 A 11.22449 11.22449 0 1 1 130.61225 118.2449 z" + transform="matrix(0.162679,0,0,0.162679,5.578045,5.763981)" /> + </g> +</svg> diff --git a/applets/clock/pixmaps/clock-face-small-day.svg b/applets/clock/pixmaps/clock-face-small-day.svg new file mode 100644 index 00000000..bd4b5b2e --- /dev/null +++ b/applets/clock/pixmaps/clock-face-small-day.svg @@ -0,0 +1,290 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="36" + height="36" + id="svg5416" + sodipodi:version="0.32" + inkscape:version="0.45+devel" + version="1.0" + sodipodi:docbase="/home/garrett/Desktop" + sodipodi:docname="clock-face-small-2.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5418"> + <linearGradient + id="linearGradient10653"> + <stop + id="stop10655" + offset="0.0000000" + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" /> + <stop + id="stop10657" + offset="1.0000000" + style="stop-color:#9193af;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + id="stop42176" + offset="0.0000000" + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" /> + <stop + id="stop42178" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + id="stop2147" + offset="0.0000000" + style="stop-color:#fffffd;stop-opacity:1.0000000;" /> + <stop + id="stop2149" + offset="1" + style="stop-color:#d9d9d8;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + style="stop-color:#9497b3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop37937" /> + <stop + style="stop-color:#4c4059;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop37939" /> + </linearGradient> + <linearGradient + id="linearGradient3816" + inkscape:collect="always"> + <stop + id="stop3818" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3820" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient5847" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5849" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5851" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5853" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient5855" + gradientUnits="userSpaceOnUse" + cx="11.3292" + cy="10.58397" + fx="11.3292" + fy="10.58397" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5857" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5859" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="26.388889" + inkscape:cx="18" + inkscape:cy="18" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1600" + inkscape:window-height="1154" + inkscape:window-x="0" + inkscape:window-y="0" + width="36px" + height="36px" /> + <metadata + id="metadata5421"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + style="display:inline"> + <path + d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4415" + style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" /> + <path + transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4417" + style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4419" + style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path4421" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4429" + style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" + sodipodi:type="arc" /> + <path + id="path5543" + d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z" + style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <g + id="g5802" + style="fill:#888a85;fill-opacity:1" + transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)"> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z" + id="path5545" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z" + id="path5557" /> + <path + id="path5649" + d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5651" + d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z" + id="path5655" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z" + id="path5657" /> + <path + id="path5661" + d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5663" + d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z" + id="path5667" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z" + id="path5669" /> + <path + id="path5673" + d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5675" + d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + </g> + </g> +</svg> diff --git a/applets/clock/pixmaps/clock-face-small-evening.svg b/applets/clock/pixmaps/clock-face-small-evening.svg new file mode 100644 index 00000000..17a9840b --- /dev/null +++ b/applets/clock/pixmaps/clock-face-small-evening.svg @@ -0,0 +1,290 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="36" + height="36" + id="svg5416" + sodipodi:version="0.32" + inkscape:version="0.45.1" + version="1.0" + sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps" + sodipodi:docname="intlclock-face-small-morning.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5418"> + <linearGradient + id="linearGradient10653"> + <stop + id="stop10655" + offset="0.0000000" + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" /> + <stop + id="stop10657" + offset="1.0000000" + style="stop-color:#9193af;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + id="stop42176" + offset="0" + style="stop-color:#434343;stop-opacity:0.53535354;" /> + <stop + id="stop42178" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + id="stop2147" + offset="0.0000000" + style="stop-color:#fffffd;stop-opacity:1.0000000;" /> + <stop + id="stop2149" + offset="1" + style="stop-color:#d9d9d8;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + style="stop-color:#9497b3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop37937" /> + <stop + style="stop-color:#4c4059;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop37939" /> + </linearGradient> + <linearGradient + id="linearGradient3816" + inkscape:collect="always"> + <stop + id="stop3818" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3820" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient5847" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5849" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5851" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5853" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient5855" + gradientUnits="userSpaceOnUse" + cx="11.3292" + cy="10.58397" + fx="11.3292" + fy="10.58397" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="radialGradient5857" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5859" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="26.388889" + inkscape:cx="18" + inkscape:cy="39.221053" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1600" + inkscape:window-height="1115" + inkscape:window-x="0" + inkscape:window-y="31" + width="36px" + height="36px" /> + <metadata + id="metadata5421"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + style="display:inline"> + <path + d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4415" + style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" /> + <path + transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4417" + style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4419" + style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path4421" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4429" + style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" + sodipodi:type="arc" /> + <path + id="path5543" + d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z" + style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <g + id="g5802" + style="fill:#888a85;fill-opacity:1" + transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)"> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z" + id="path5545" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z" + id="path5557" /> + <path + id="path5649" + d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5651" + d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z" + id="path5655" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z" + id="path5657" /> + <path + id="path5661" + d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5663" + d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z" + id="path5667" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z" + id="path5669" /> + <path + id="path5673" + d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5675" + d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + </g> + </g> +</svg> diff --git a/applets/clock/pixmaps/clock-face-small-morning.svg b/applets/clock/pixmaps/clock-face-small-morning.svg new file mode 100644 index 00000000..17a9840b --- /dev/null +++ b/applets/clock/pixmaps/clock-face-small-morning.svg @@ -0,0 +1,290 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="36" + height="36" + id="svg5416" + sodipodi:version="0.32" + inkscape:version="0.45.1" + version="1.0" + sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps" + sodipodi:docname="intlclock-face-small-morning.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5418"> + <linearGradient + id="linearGradient10653"> + <stop + id="stop10655" + offset="0.0000000" + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" /> + <stop + id="stop10657" + offset="1.0000000" + style="stop-color:#9193af;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + id="stop42176" + offset="0" + style="stop-color:#434343;stop-opacity:0.53535354;" /> + <stop + id="stop42178" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + id="stop2147" + offset="0.0000000" + style="stop-color:#fffffd;stop-opacity:1.0000000;" /> + <stop + id="stop2149" + offset="1" + style="stop-color:#d9d9d8;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + style="stop-color:#9497b3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop37937" /> + <stop + style="stop-color:#4c4059;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop37939" /> + </linearGradient> + <linearGradient + id="linearGradient3816" + inkscape:collect="always"> + <stop + id="stop3818" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3820" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient5847" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5849" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5851" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5853" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient5855" + gradientUnits="userSpaceOnUse" + cx="11.3292" + cy="10.58397" + fx="11.3292" + fy="10.58397" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="radialGradient5857" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5859" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="26.388889" + inkscape:cx="18" + inkscape:cy="39.221053" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1600" + inkscape:window-height="1115" + inkscape:window-x="0" + inkscape:window-y="31" + width="36px" + height="36px" /> + <metadata + id="metadata5421"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + style="display:inline"> + <path + d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4415" + style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" /> + <path + transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4417" + style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4419" + style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path4421" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4429" + style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" + sodipodi:type="arc" /> + <path + id="path5543" + d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z" + style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <g + id="g5802" + style="fill:#888a85;fill-opacity:1" + transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)"> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z" + id="path5545" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z" + id="path5557" /> + <path + id="path5649" + d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5651" + d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z" + id="path5655" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z" + id="path5657" /> + <path + id="path5661" + d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5663" + d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z" + id="path5667" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z" + id="path5669" /> + <path + id="path5673" + d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5675" + d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + </g> + </g> +</svg> diff --git a/applets/clock/pixmaps/clock-face-small-night.svg b/applets/clock/pixmaps/clock-face-small-night.svg new file mode 100644 index 00000000..d5a7d8e5 --- /dev/null +++ b/applets/clock/pixmaps/clock-face-small-night.svg @@ -0,0 +1,291 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="36" + height="36" + id="svg5416" + sodipodi:version="0.32" + inkscape:version="0.45.1" + version="1.0" + sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps" + sodipodi:docname="intlclock-face-dark-small.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5418"> + <linearGradient + id="linearGradient10653"> + <stop + id="stop10655" + offset="0.0000000" + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" /> + <stop + id="stop10657" + offset="1.0000000" + style="stop-color:#9193af;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + id="stop42176" + offset="0.0000000" + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" /> + <stop + id="stop42178" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + id="stop2147" + offset="0.0000000" + style="stop-color:#fffffd;stop-opacity:1.0000000;" /> + <stop + id="stop2149" + offset="1" + style="stop-color:#d9d9d8;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + style="stop-color:#27293c;stop-opacity:1;" + offset="0" + id="stop37937" /> + <stop + style="stop-color:#d6cae3;stop-opacity:1;" + offset="1" + id="stop37939" /> + </linearGradient> + <linearGradient + id="linearGradient3816" + inkscape:collect="always"> + <stop + id="stop3818" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3820" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient5847" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5849" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5851" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5853" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient5855" + gradientUnits="userSpaceOnUse" + cx="11.3292" + cy="10.58397" + fx="11.3292" + fy="10.58397" + r="15.532059" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="linearGradient5859" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="26.388889" + inkscape:cx="18" + inkscape:cy="18" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1600" + inkscape:window-height="1115" + inkscape:window-x="0" + inkscape:window-y="31" + width="36px" + height="36px" + showguides="true" + inkscape:guide-bbox="true" /> + <metadata + id="metadata5421"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + style="display:inline"> + <path + d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4415" + style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" /> + <path + transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4417" + style="fill:url(#radialGradient5849);fill-opacity:1.0;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4419" + style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path4421" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4429" + style="opacity:0.53921569;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" + sodipodi:type="arc" /> + <path + id="path5543" + d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z" + style="fill:#c3c9c9;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <g + id="g5802" + style="fill:#eaece7;fill-opacity:1" + transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)"> + <path + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z" + id="path5545" /> + <path + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z" + id="path5557" /> + <path + id="path5649" + d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z" + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5651" + d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z" + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z" + id="path5655" /> + <path + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z" + id="path5657" /> + <path + id="path5661" + d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z" + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5663" + d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z" + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z" + id="path5667" /> + <path + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z" + id="path5669" /> + <path + id="path5673" + d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z" + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5675" + d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z" + style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + </g> + <path + sodipodi:type="arc" + style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10.30000019;stroke-miterlimit:3.9000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path6095" + sodipodi:cx="34.673683" + sodipodi:cy="29.804211" + sodipodi:rx="0" + sodipodi:ry="2.103158" + d="M 34.673683 29.804211 A 0 2.103158 0 1 1 34.673683,29.804211 A 0 2.103158 0 1 1 34.673683 29.804211 z" /> + </g> +</svg> diff --git a/applets/clock/pixmaps/clock-face-small.svg b/applets/clock/pixmaps/clock-face-small.svg new file mode 100644 index 00000000..bd4b5b2e --- /dev/null +++ b/applets/clock/pixmaps/clock-face-small.svg @@ -0,0 +1,290 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="36" + height="36" + id="svg5416" + sodipodi:version="0.32" + inkscape:version="0.45+devel" + version="1.0" + sodipodi:docbase="/home/garrett/Desktop" + sodipodi:docname="clock-face-small-2.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs5418"> + <linearGradient + id="linearGradient10653"> + <stop + id="stop10655" + offset="0.0000000" + style="stop-color:#f3f4ff;stop-opacity:1.0000000;" /> + <stop + id="stop10657" + offset="1.0000000" + style="stop-color:#9193af;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient42174"> + <stop + id="stop42176" + offset="0.0000000" + style="stop-color:#a0a0a0;stop-opacity:1.0000000;" /> + <stop + id="stop42178" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient2145"> + <stop + id="stop2147" + offset="0.0000000" + style="stop-color:#fffffd;stop-opacity:1.0000000;" /> + <stop + id="stop2149" + offset="1" + style="stop-color:#d9d9d8;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient37935"> + <stop + style="stop-color:#9497b3;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop37937" /> + <stop + style="stop-color:#4c4059;stop-opacity:1.0000000;" + offset="1.0000000" + id="stop37939" /> + </linearGradient> + <linearGradient + id="linearGradient3816" + inkscape:collect="always"> + <stop + id="stop3818" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3820" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3816" + id="radialGradient5847" + gradientUnits="userSpaceOnUse" + cx="31.112698" + cy="19.008621" + fx="31.112698" + fy="19.008621" + r="8.6620579" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient37935" + id="radialGradient5849" + gradientUnits="userSpaceOnUse" + cx="8.7468252" + cy="6.8283234" + fx="8.7468252" + fy="6.8283234" + r="29.889715" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5851" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5853" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient10653" + id="radialGradient5855" + gradientUnits="userSpaceOnUse" + cx="11.3292" + cy="10.58397" + fx="11.3292" + fy="10.58397" + r="15.532059" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2145" + id="radialGradient5857" + gradientUnits="userSpaceOnUse" + cx="11.901996" + cy="10.045444" + fx="11.901996" + fy="10.045444" + r="29.292715" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient42174" + id="linearGradient5859" + gradientUnits="userSpaceOnUse" + x1="6.342216" + y1="7.7893324" + x2="22.218424" + y2="25.884274" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="26.388889" + inkscape:cx="18" + inkscape:cy="18" + inkscape:document-units="px" + inkscape:current-layer="layer1" + inkscape:window-width="1600" + inkscape:window-height="1154" + inkscape:window-x="0" + inkscape:window-y="0" + width="36px" + height="36px" /> + <metadata + id="metadata5421"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + style="display:inline"> + <path + d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z" + sodipodi:ry="8.6620579" + sodipodi:rx="8.6620579" + sodipodi:cy="19.008621" + sodipodi:cx="31.112698" + id="path4415" + style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + sodipodi:type="arc" + transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" /> + <path + transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4417" + style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4419" + style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:type="arc" /> + <path + sodipodi:type="arc" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" + id="path4421" + sodipodi:cx="16.25" + sodipodi:cy="16.910715" + sodipodi:rx="14.910714" + sodipodi:ry="14.910714" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" /> + <path + transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)" + d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z" + sodipodi:ry="14.910714" + sodipodi:rx="14.910714" + sodipodi:cy="16.910715" + sodipodi:cx="16.25" + id="path4429" + style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" + sodipodi:type="arc" /> + <path + id="path5543" + d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z" + style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <g + id="g5802" + style="fill:#888a85;fill-opacity:1" + transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)"> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z" + id="path5545" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z" + id="path5557" /> + <path + id="path5649" + d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5651" + d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z" + id="path5655" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z" + id="path5657" /> + <path + id="path5661" + d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5663" + d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z" + id="path5667" /> + <path + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" + d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z" + id="path5669" /> + <path + id="path5673" + d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + <path + id="path5675" + d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z" + style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" /> + </g> + </g> +</svg> diff --git a/applets/clock/pixmaps/clock-map-location-current.png b/applets/clock/pixmaps/clock-map-location-current.png Binary files differnew file mode 100644 index 00000000..5c505d11 --- /dev/null +++ b/applets/clock/pixmaps/clock-map-location-current.png diff --git a/applets/clock/pixmaps/clock-map-location-hilight.png b/applets/clock/pixmaps/clock-map-location-hilight.png Binary files differnew file mode 100644 index 00000000..d7de5b78 --- /dev/null +++ b/applets/clock/pixmaps/clock-map-location-hilight.png diff --git a/applets/clock/pixmaps/clock-map-location-marker.png b/applets/clock/pixmaps/clock-map-location-marker.png Binary files differnew file mode 100644 index 00000000..48d2184f --- /dev/null +++ b/applets/clock/pixmaps/clock-map-location-marker.png diff --git a/applets/clock/pixmaps/clock-map.png b/applets/clock/pixmaps/clock-map.png Binary files differnew file mode 100644 index 00000000..31e1a777 --- /dev/null +++ b/applets/clock/pixmaps/clock-map.png diff --git a/applets/clock/pixmaps/clock-map.svg b/applets/clock/pixmaps/clock-map.svg new file mode 100644 index 00000000..d910af1c --- /dev/null +++ b/applets/clock/pixmaps/clock-map.svg @@ -0,0 +1,755 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="960" + height="480" + viewBox="0 0 468 234" + preserveAspectRatio="xMidYMid meet" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.45+devel" + sodipodi:docname="earth-2-simple.svg" + sodipodi:docbase="/home/garrett/Desktop" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs167"> + <linearGradient + id="linearGradient6105"> + <stop + id="stop6107" + offset="0" + style="stop-color:#b1cbe6;stop-opacity:1;" /> + <stop + id="stop6109" + offset="1" + style="stop-color:#ccddef;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6105" + id="linearGradient5933" + gradientUnits="userSpaceOnUse" + x1="250.769" + y1="37.809563" + x2="250.76901" + y2="194.13469" + gradientTransform="matrix(1.0010416,0,0,1.0020833,-0.2437371,-0.2437448)" /> + <filter + inkscape:collect="always" + id="filter7072"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="288.4" + id="feGaussianBlur7074" /> + </filter> + </defs> + <sodipodi:namedview + inkscape:window-height="1154" + inkscape:window-width="1600" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + inkscape:zoom="1" + inkscape:cx="495.72419" + inkscape:cy="189.71763" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:current-layer="layer3" /> + <metadata + id="metadata4"> +Created by potrace 1.7, written by Peter Selinger 2001-2005 +<rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>The Earth</dc:title> + <dc:creator> + <cc:Agent> + <dc:title>Garrett LeSage</dc:title> + </cc:Agent> + </dc:creator> + <dc:description>A vectorized, cleaned up, tango-inspired map of the earth based off of the Evolution map.</dc:description> + </cc:Work> +</rdf:RDF> +</metadata> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="Sea"> + <rect + style="opacity:1;fill:url(#linearGradient5933);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect4773" + width="468.48749" + height="234.4875" + x="-0.24374618" + y="-0.24374475" /> + </g> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="Land outline"> + <g + transform="matrix(6.1000977e-4,0,0,-6.1064452e-4,-0.24375,234.24375)" + id="g5768" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7072);opacity:0.75"> + <path + d="M 0,357500 L 0,331000 L 450,331003 C 698,331005 1123,331241 1395,331528 C 2302,332484 2614,332605 3562,332364 C 4142,332217 4565,332211 4861,332345 C 5753,332748 7593,332400 8946,331572 C 9737,331088 10453,330800 10865,330800 C 11227,330800 11698,330668 11912,330506 C 12125,330345 12475,330210 12689,330206 C 12903,330203 13331,329958 13640,329661 L 14202,329123 L 15114,330061 C 15616,330578 16145,331000 16289,331000 C 16433,331000 16662,331133 16797,331296 C 17187,331766 18123,332159 18632,332066 C 19222,331959 20200,332833 20200,333468 C 20200,334118 19827,334400 18967,334400 C 18456,334400 18153,334512 18024,334750 C 17702,335344 16464,335902 16114,335612 C 15785,335338 15400,335484 15400,335881 C 15400,336022 15220,336301 15000,336500 C 14780,336699 14600,336989 14600,337144 C 14600,337829 13575,339587 12801,340231 C 12015,340883 11978,340961 12146,341611 C 12386,342545 13670,342713 14598,341933 C 15276,341362 16765,341139 18800,341302 C 19515,341360 20712,341399 21459,341389 C 23473,341362 24911,342835 24091,344085 C 23791,344544 23805,344567 24641,344969 C 26590,345908 26985,345817 28565,344075 C 29195,343380 38688,343427 39640,344130 C 39991,344388 40420,344600 40594,344600 C 40769,344600 41113,344742 41360,344915 C 41935,345317 46754,345357 47382,344965 C 47709,344761 47843,344777 48155,345059 C 48731,345581 49035,345482 50068,344433 C 51214,343269 51011,342538 49784,343411 C 49176,343844 49135,343848 48572,343515 C 47992,343173 46000,342948 46000,343226 C 46000,343956 44454,344252 44046,343600 C 43903,343371 43580,343200 43290,343200 C 43012,343200 42450,343032 42042,342828 C 41605,342608 40809,342441 40106,342421 C 39227,342396 38801,342283 38493,341993 C 38263,341777 37880,341600 37643,341600 C 37395,341600 37022,341343 36763,340993 C 36451,340571 35990,340292 35247,340076 C 34660,339905 33949,339646 33667,339500 C 33385,339354 32602,339171 31927,339093 C 30657,338947 29600,338397 29600,337881 C 29600,337443 30594,337122 31230,337355 C 31676,337519 31839,337470 32267,337042 C 32639,336670 32967,336541 33496,336561 C 33973,336579 34256,336486 34333,336287 C 34517,335806 35807,335357 36633,335485 C 37482,335617 39059,334755 38955,334215 C 38787,333341 35672,333196 34353,334001 C 33504,334518 33105,334502 31929,333906 C 31157,333514 30778,333438 30078,333534 C 29322,333638 29131,333587 28735,333177 C 28482,332915 28109,332606 27908,332491 C 26940,331940 29604,329452 30707,329875 C 30877,329940 31185,329888 31391,329759 C 31681,329578 31987,329585 32733,329790 C 33655,330043 34680,330093 36367,329966 C 36963,329922 37279,330031 37782,330455 C 38583,331128 38839,331132 39932,330492 C 41386,329640 41053,328763 38975,327977 C 37142,327283 36747,327200 35282,327200 L 33861,327200 L 32803,326121 C 32220,325527 31464,324962 31122,324865 C 29952,324531 30775,322200 32063,322200 C 32230,322200 32723,321795 33158,321300 C 33724,320658 34103,320400 34482,320400 C 34775,320400 35241,320251 35519,320069 C 35990,319761 36073,319761 36719,320069 C 37854,320610 38609,319986 39078,318118 C 39271,317346 40028,317110 41471,317371 C 42306,317523 42913,317521 43589,317365 C 44283,317204 44878,317207 45818,317375 C 47153,317614 47996,317167 47999,316218 C 48001,315768 46256,314291 45028,313703 C 42687,312584 42539,312434 43062,311718 C 43457,311178 44489,311426 45931,312405 C 46672,312908 47328,313199 47721,313200 C 48105,313200 48547,313390 48881,313700 C 49178,313975 49582,314200 49779,314200 C 49977,314200 50291,314369 50478,314576 C 50665,314783 51160,315007 51578,315073 C 51997,315140 52680,315466 53097,315797 C 53586,316186 54084,316400 54501,316400 C 55534,316400 56168,317040 56239,318156 C 56295,319021 56361,319130 57032,319458 C 57435,319655 58018,320150 58327,320558 C 59709,322380 61000,322464 61000,320733 C 61000,319325 64753,318950 66431,320191 C 66735,320416 67028,320600 67083,320600 C 67506,320600 68302,321813 68396,322600 C 68515,323607 68423,323584 70398,323093 C 71272,322875 71982,322535 72575,322049 C 73059,321653 73645,321306 73877,321279 C 74110,321251 74705,321127 75200,321003 C 76868,320584 78091,320460 79891,320526 C 81491,320586 81730,320547 82132,320170 C 82473,319849 82732,319776 83199,319870 C 83545,319939 83980,319891 84189,319761 C 84474,319583 84826,319587 85687,319780 C 86809,320031 86813,320030 87513,319416 C 87898,319077 88335,318800 88482,318800 C 88630,318800 88863,318665 89000,318500 C 89137,318335 89381,318200 89542,318200 C 89704,318200 90000,317998 90200,317750 C 90675,317164 92538,317101 93145,317650 C 93634,318093 94174,318099 94341,317664 C 94426,317444 94320,317230 94035,317040 C 93440,316645 93489,316053 94209,314918 L 94818,313957 L 95726,314093 C 96449,314202 96684,314162 96877,313898 C 97010,313715 97427,313503 97803,313426 C 98373,313310 98509,313177 98621,312627 C 98695,312265 98941,311839 99167,311680 C 99394,311522 99780,311034 100027,310595 C 100355,310010 100664,309745 101187,309600 C 102227,309312 102389,309346 102600,309900 C 102999,310950 105600,309236 105600,307923 C 105600,307203 107050,305747 108117,305394 C 108493,305270 108800,305044 108800,304891 C 108800,304738 109205,304157 109700,303600 C 110195,303043 110600,302507 110600,302409 C 110600,302312 110866,302173 111191,302102 C 111909,301944 112167,301317 111718,300820 C 111080,300115 111300,299200 112107,299200 C 112679,299200 112977,299033 113661,298330 C 114331,297640 114697,297431 115427,297321 C 116847,297108 118908,295088 119075,293747 C 119140,293222 119339,292510 119518,292165 C 119984,291265 120011,285968 119553,285451 C 118983,284806 118688,282901 119068,282321 C 119248,282046 119359,281704 119314,281560 C 118915,280280 119015,278012 119497,277440 C 119774,277111 120000,276665 120000,276448 C 120000,276231 120180,275825 120400,275545 C 120620,275266 120800,274953 120800,274850 C 120800,274747 121477,273955 122304,273090 C 123319,272027 123873,271270 124011,270758 C 124124,270341 124299,270000 124401,270000 C 124504,270000 124714,269757 124870,269460 C 125182,268865 126051,267832 127350,266514 C 127818,266040 128200,265540 128200,265404 C 128200,265230 128403,265194 128872,265282 C 129343,265370 129618,265320 129789,265114 C 129923,264952 130453,264758 130966,264682 C 131488,264605 132150,264336 132465,264072 C 132776,263812 133112,263600 133212,263600 C 133311,263600 133454,263353 133530,263050 C 133740,262206 134556,260768 135002,260456 C 135282,260260 135367,260039 135286,259717 C 135216,259438 135291,259138 135476,258953 C 135643,258785 135840,258410 135913,258119 C 135986,257828 136205,257504 136400,257400 C 136595,257296 136809,256993 136875,256728 C 136942,256462 137335,255958 137748,255608 C 138162,255259 138680,254814 138900,254621 C 139120,254428 139593,254100 139950,253892 C 140628,253498 140758,253048 140373,252431 C 139959,251769 140338,249849 140962,249445 C 141254,249255 141660,248935 141864,248733 C 142123,248476 142389,248404 142746,248494 C 143620,248713 144556,247615 144718,246181 C 144844,245069 145825,243800 146559,243800 C 146659,243800 146984,243575 147281,243300 C 147578,243025 147945,242800 148097,242800 C 148249,242800 148565,242530 148800,242200 C 149227,241600 150225,241355 150491,241785 C 150691,242109 150148,243005 149680,243123 C 149393,243195 149038,243611 148704,244268 C 148415,244836 147813,245705 147366,246200 C 146919,246695 146301,247640 145994,248300 C 145686,248960 145157,249809 144817,250186 C 144478,250563 144200,250992 144200,251138 C 144200,251284 144011,251561 143779,251752 C 143548,251943 143138,252444 142868,252864 C 142597,253285 142112,253721 141788,253834 C 141465,253947 141200,254153 141200,254293 C 141200,254432 141026,254768 140812,255039 C 140599,255310 140363,255778 140287,256080 C 140212,256381 139981,256733 139775,256862 C 138931,257389 139982,259000 141169,259000 C 142060,259000 143000,258132 143000,257309 C 143000,256949 143164,256439 143365,256177 C 143566,255915 144034,255160 144406,254500 C 145059,253340 145642,252724 146488,252296 C 146710,252184 146984,251914 147096,251696 C 147404,251097 148303,250274 149260,249713 C 150343,249078 150916,248306 151138,247183 C 151276,246484 151436,246242 151906,246020 C 152233,245867 152815,245507 153200,245220 C 153585,244934 154339,244475 154876,244200 C 155550,243855 155938,243497 156131,243045 C 156284,242685 156753,242055 157173,241645 C 157593,241235 157993,240668 158063,240385 C 158133,240102 158436,239517 158736,239085 C 159230,238375 159280,238142 159259,236640 C 159240,235209 159290,234947 159619,234742 C 159836,234606 160000,234279 160000,233979 C 160000,233412 161201,232400 161874,232400 C 162067,232400 162444,232141 162710,231825 C 163240,231195 164901,230320 166000,230093 C 166385,230014 166878,229825 167095,229674 C 167311,229524 167747,229400 168063,229400 C 168379,229400 168866,229220 169145,229000 C 169425,228780 169824,228600 170031,228600 C 170239,228600 170799,228240 171277,227800 C 171754,227360 172285,227000 172457,227000 C 172629,227000 173040,226772 173372,226493 C 173825,226111 174104,226018 174498,226117 C 174889,226216 175146,226133 175509,225792 C 176224,225119 178959,224959 179554,225554 C 180886,226886 184761,226235 186000,224471 C 186275,224080 186660,223611 186855,223430 C 187050,223248 187420,222898 187678,222650 C 187935,222403 188227,222200 188327,222200 C 188426,222200 188837,221976 189240,221702 C 189767,221344 190131,221236 190541,221318 C 190960,221402 191208,221323 191486,221016 C 191696,220784 192109,220600 192421,220600 C 192739,220600 193211,220385 193517,220101 C 193997,219657 194170,219617 195112,219727 C 196463,219886 197125,219715 197445,219124 C 197768,218528 200932,215800 201301,215800 C 201754,215800 201854,215412 201529,214915 C 200945,214025 201704,212303 202594,212499 C 202976,212583 203227,212501 203493,212208 C 203696,211983 204025,211800 204224,211800 C 204423,211800 204676,211632 204785,211427 C 204895,211223 205244,210947 205561,210816 C 205887,210681 206260,210299 206419,209939 C 206689,209324 206753,209296 208111,209200 C 209406,209108 209588,209038 210311,208352 C 210745,207940 211259,207603 211453,207602 C 211647,207601 211990,207488 212215,207350 C 212712,207047 213195,207553 213207,208388 C 213242,210833 216022,210680 217266,208164 C 217665,207359 218067,206565 218162,206400 C 219047,204847 219154,204303 218786,203245 C 218611,202744 218636,202530 218921,202096 C 219255,201586 219254,201532 218904,200882 C 218555,200233 218554,200182 218887,199815 C 219429,199216 218513,197600 217631,197600 C 217206,197600 216000,196403 216000,195981 C 216000,195597 215577,195030 214152,193501 C 213401,192696 212959,192033 212875,191585 C 212803,191208 212637,190765 212506,190600 C 211501,189341 211197,187979 211747,187195 C 213035,185357 213098,184486 212010,183555 C 211042,182727 210703,181955 211034,181337 C 211163,181097 211255,180397 211238,179781 L 211207,178662 L 212823,177089 C 213727,176210 214669,175072 214959,174508 C 215245,173954 215586,173434 215716,173353 C 215847,173272 216015,172794 216091,172291 C 216166,171788 216357,171327 216514,171267 C 216693,171198 216800,170871 216800,170390 C 216800,169835 216917,169541 217223,169326 C 217718,168980 218400,167919 218400,167497 C 218400,167335 218580,167091 218800,166954 C 219042,166803 219200,166487 219200,166157 C 219200,165794 219368,165499 219696,165284 C 220434,164801 220985,163796 220862,163159 C 220790,162791 220892,162446 221178,162082 C 221410,161787 221600,161426 221600,161279 C 221600,160623 225067,157577 226111,157315 C 226433,157234 226742,157097 226798,157010 C 226854,156922 227583,156532 228418,156142 C 230649,155101 233600,152651 233600,151840 C 233600,151560 233726,151189 233880,151016 C 234276,150570 234614,149204 234423,148821 C 234335,148645 234288,147524 234317,146331 C 234363,144482 234314,144069 233986,143531 C 233775,143184 233601,142538 233601,142095 C 233600,141651 233456,141084 233281,140833 C 233033,140480 232973,139963 233015,138539 C 233044,137527 232997,136362 232911,135948 C 232803,135430 232834,135100 233009,134889 C 233201,134657 233207,134527 233032,134352 C 232904,134224 232800,133888 232800,133604 C 232800,133321 232614,132930 232387,132736 C 232009,132411 231979,132194 232028,130097 C 232077,127978 232049,127778 231641,127343 C 231398,127085 231197,126700 231193,126487 C 231189,126274 231063,125878 230913,125607 C 230673,125173 230684,125056 231004,124649 C 231291,124285 231347,123961 231264,123142 C 231170,122207 231212,122050 231679,121615 C 232339,121001 232346,120276 231702,119403 C 231421,119022 231149,118310 231077,117767 C 231007,117239 230826,116704 230675,116579 C 230524,116454 230400,116097 230400,115787 C 230400,115477 230303,115163 230183,115090 C 230064,115016 229797,114560 229590,114077 C 229383,113594 228796,112793 228287,112297 C 227407,111442 227366,111354 227474,110548 C 227537,110082 227667,109115 227762,108400 C 227857,107685 228001,106951 228082,106768 C 228181,106543 227997,106124 227512,105468 C 227117,104936 226657,104185 226488,103800 C 226320,103415 226083,102902 225963,102660 C 225800,102333 225807,102065 225993,101617 C 226205,101105 226194,100966 225921,100693 C 225536,100308 225509,99796 225850,99349 C 226166,98935 227112,98695 227290,98984 C 227499,99323 227764,99240 228097,98733 C 228555,98033 228161,97079 227232,96641 C 226435,96265 226275,95915 226091,94151 C 225996,93239 225851,92881 225386,92417 C 224684,91715 224640,91276 225250,91089 C 226494,90706 226710,89713 225699,89024 C 225314,88763 225000,88425 225000,88274 C 225000,88123 224817,88000 224594,88000 C 224127,88000 223848,87472 224153,87167 C 224296,87024 224482,87082 224751,87351 C 225240,87840 226200,88111 226200,87761 C 226200,87626 225953,87318 225651,87077 C 225111,86646 225108,86633 225478,86225 C 225945,85708 225836,84117 225306,83729 C 224689,83278 224973,82288 225700,82355 C 226373,82417 227664,80277 227841,78805 C 227874,78527 228103,78209 228364,78080 C 229203,77663 229501,77043 229085,76583 C 228846,76319 228796,76124 228931,75989 C 229192,75728 229800,75960 229800,76321 C 229800,76616 230042,76691 230267,76466 C 230341,76393 230255,76171 230076,75974 C 229599,75447 229865,74997 230644,75013 C 232292,75048 233401,74766 233522,74283 C 233710,73534 234140,73284 234569,73672 C 235093,74146 235365,74077 235437,73450 C 235523,72702 236383,72584 236990,73236 C 237261,73527 237470,73617 237559,73483 C 238048,72747 241251,72613 241570,73314 C 241748,73705 241884,73751 242588,73656 C 243641,73515 243726,74059 242716,74481 C 242339,74638 241880,74997 241696,75278 C 241491,75591 241096,75839 240677,75917 C 239894,76064 238901,76909 238609,77677 C 238488,77995 238257,78200 238019,78200 C 237443,78200 237037,78702 237147,79278 C 237207,79592 237085,79999 236821,80370 C 236335,81053 236269,81907 236690,82068 C 236849,82129 237075,82522 237192,82940 C 237363,83546 237575,83781 238242,84100 C 238898,84414 239216,84758 239714,85694 C 240211,86627 240483,86922 240960,87046 C 242727,87504 244166,90003 242850,90328 C 242548,90403 241985,90674 241600,90932 C 241215,91189 240563,91626 240150,91902 C 238956,92704 239096,93258 240673,93973 C 241373,94291 242008,94651 242085,94775 C 242161,94899 242614,95000 243091,95000 C 244168,95000 245320,95920 245134,96631 C 245055,96933 245166,97173 245511,97444 C 245795,97668 246000,98037 246000,98326 C 246000,98734 246192,98907 247082,99300 C 248757,100041 248814,100667 247275,101412 C 246138,101963 245810,102580 246276,103292 C 246715,103961 247611,103965 248482,103300 C 249433,102575 249993,102654 250960,103650 C 251413,104118 251923,104616 252092,104758 C 252445,105054 252495,105849 252195,106409 C 251753,107236 252323,107597 254098,107613 C 255596,107627 256988,107689 257537,107767 C 257667,107785 257832,107984 257903,108210 C 258016,108565 258143,108603 258867,108495 C 260180,108299 260795,108673 262785,110880 C 263755,111956 263908,113534 263113,114270 C 262712,114642 262569,114981 262540,115633 L 262500,116500 L 265400,116502 C 268552,116503 269611,116877 269917,118096 C 269978,118340 270308,118666 270649,118820 C 270991,118974 271367,119267 271485,119471 C 271603,119675 271937,120101 272228,120418 C 272518,120735 272810,121212 272877,121478 C 273083,122299 274364,124068 275061,124495 C 276160,125167 276729,125684 277059,126307 C 277232,126633 277997,127548 278759,128340 C 279870,129493 280172,129943 280276,130598 C 280352,131071 280542,131467 280728,131538 C 280995,131641 281028,131871 280923,132894 C 280765,134428 281051,136003 281641,136851 C 282323,137834 283250,138800 283511,138800 C 283639,138800 284153,139160 284653,139600 C 285357,140220 285725,140400 286289,140400 C 286689,140400 287283,140580 287608,140800 C 287934,141020 288451,141369 288759,141576 C 289419,142019 291098,142313 292500,142231 C 293619,142166 296400,143731 296400,144426 C 296400,144608 296535,144809 296700,144872 C 296865,144936 297000,145201 297000,145463 C 297000,145724 297180,146101 297400,146300 C 297620,146499 297800,146823 297800,147019 C 297800,147216 297885,147429 297989,147493 C 298264,147663 299400,149383 299400,149628 C 299400,149742 299603,150000 299850,150200 C 300125,150423 300310,150805 300325,151182 C 300339,151522 300361,152115 300375,152500 C 300391,152951 300499,153200 300677,153200 C 301041,153200 301187,153812 301056,154786 C 300975,155395 301047,155697 301375,156114 C 301870,156743 301930,157644 301500,158000 C 301119,158316 301115,158880 301491,159192 C 301707,159372 301771,159833 301741,160980 C 301701,162482 301719,162546 302350,163179 C 302708,163537 303000,163919 303000,164026 C 303000,164133 303270,164315 303600,164430 C 304070,164594 304200,164758 304200,165189 C 304200,165491 304378,165899 304595,166095 C 304812,166292 305182,166851 305418,167337 C 305653,167823 306083,168374 306373,168560 C 307070,169010 309000,170906 309000,171142 C 309000,171244 309225,171524 309500,171763 C 309817,172038 310000,172408 310000,172774 C 310000,173091 310125,173455 310278,173582 C 310828,174038 310885,175587 310377,176273 C 310050,176716 309917,177179 309906,177919 C 309879,179687 308335,181393 307023,181105 C 306697,181033 306237,181109 305888,181291 C 305564,181460 305139,181598 304941,181599 C 304744,181599 304069,182112 303441,182738 C 302814,183365 301895,184091 301400,184352 C 300905,184613 300383,184978 300241,185163 C 300028,185441 299616,185500 297909,185500 C 296072,185500 295766,185551 295226,185950 C 294711,186330 294363,186400 292990,186400 C 291668,186400 291264,186476 290832,186803 C 290539,187025 290120,187341 289900,187505 C 289680,187669 289217,188028 288871,188302 C 288525,188576 288044,188800 287803,188800 C 287561,188800 287134,188980 286855,189200 C 286575,189420 286147,189600 285904,189600 C 285661,189600 285296,189783 285094,190007 C 284776,190358 284506,190409 283134,190380 C 281741,190350 281502,190397 281221,190758 C 281019,191018 280554,191221 279967,191305 C 278340,191541 277377,193062 278308,193925 C 278869,194445 278720,195154 278009,195340 C 277452,195485 276200,197115 276200,197694 C 276200,197979 276065,198264 275900,198328 C 275716,198398 275600,198701 275600,199109 C 275600,199914 273612,202200 272911,202200 C 272671,202200 272411,202391 272297,202650 C 272185,202906 271884,203129 271600,203168 C 271325,203205 270916,203405 270692,203613 C 270438,203848 270022,203981 269591,203965 C 268961,203941 268094,204150 266841,204626 C 266065,204920 265212,204821 264594,204364 L 264003,203927 L 263539,204364 C 263283,204604 262934,204800 262762,204800 C 262590,204800 262342,204929 262211,205087 C 262080,205245 261731,205429 261436,205496 C 260702,205663 259640,206664 259478,207342 C 259242,208332 257313,209600 256044,209600 C 254898,209600 254431,210583 254351,213162 C 254320,214166 254217,214800 254085,214800 C 253770,214800 253051,213964 252968,213500 C 252860,212899 252062,212875 251523,213456 C 249850,215261 246800,215417 246800,213697 L 246800,213269 L 244750,213753 C 242165,214364 240590,214516 240019,214210 C 239642,214009 239503,214054 239001,214538 C 236558,216900 234812,217461 233580,216281 C 232812,215545 232201,215758 232197,216763 C 232193,217616 232069,217851 231450,218177 C 231001,218413 230200,218194 230200,217834 C 230200,217437 228595,216000 228152,216000 C 227885,216000 227472,215770 227222,215482 C 226801,214998 226693,214973 225599,215100 C 224231,215259 223218,214501 223206,213311 C 223198,212483 222295,211253 221581,211096 C 221262,211026 220888,210812 220750,210621 C 220222,209888 219138,210011 218411,210887 C 218268,211059 217983,211200 217777,211200 C 217572,211200 217291,211380 217154,211600 C 216812,212146 215037,212144 213828,211596 C 213349,211378 212758,211200 212516,211200 C 212274,211200 211902,211068 211688,210906 C 210866,210284 210147,210554 208445,212124 C 207925,212604 207439,212997 207364,212998 C 206564,213010 205515,216304 206018,217222 C 206284,217707 206526,219232 206715,221609 C 206825,222988 205898,224800 205083,224800 C 204918,224800 204540,224979 204242,225198 C 203757,225554 203342,225601 200300,225637 C 196394,225684 195247,226160 196511,227209 C 197117,227712 197230,228162 196906,228788 C 196403,229761 196688,231280 197557,232257 C 197764,232489 197858,232919 197829,233491 C 197793,234170 197881,234460 198215,234771 C 199556,236021 198485,238400 196581,238400 C 195820,238400 195548,238311 195354,238000 C 195151,237676 194887,237600 193964,237600 C 193337,237600 192762,237501 192687,237380 C 192612,237258 192259,237037 191902,236888 C 191239,236611 190871,235768 191126,235105 C 191189,234941 191029,234547 190770,234231 C 190512,233914 190165,233452 190000,233203 C 189190,231980 189117,231937 187782,231900 C 187077,231881 186185,231724 185800,231552 C 184394,230924 182576,230891 181938,231482 C 181631,231767 181167,232000 180908,232000 C 180349,232000 178670,233882 178759,234408 C 178790,234593 178587,234893 178308,235076 C 178029,235259 177800,235534 177800,235687 C 177800,236022 176791,237600 176577,237600 C 176493,237600 176365,238000 176291,238488 C 176218,238976 175988,239530 175779,239719 C 175290,240161 175298,240708 175803,241349 C 176181,241830 176185,241885 175872,242231 C 175561,242574 175561,242625 175869,242966 C 176081,243200 176200,243679 176200,244297 C 176200,245011 176326,245428 176686,245899 C 177149,246507 177164,246617 177012,248291 C 176839,250185 177050,251372 177590,251540 C 178364,251781 178825,252112 179246,252730 C 179496,253097 179864,253398 180064,253399 C 180264,253399 180996,253805 181690,254300 C 183047,255269 183542,255365 185199,254983 C 186005,254797 186131,254819 186431,255188 C 186961,255844 188772,255442 189754,254450 C 190243,253957 190508,253889 190705,254208 C 190776,254323 191010,254360 191226,254292 C 191761,254122 192222,254543 192087,255079 C 191940,255667 193072,256115 193906,255798 C 194376,255619 194533,255655 194934,256031 C 195557,256617 199748,256690 200371,256126 C 200569,255947 201052,255800 201443,255800 C 201981,255800 202234,255678 202482,255300 C 202891,254675 203609,254649 204542,255226 L 205231,255652 L 205808,255226 C 206125,254992 206470,254800 206576,254800 C 207080,254800 207668,253365 207431,252711 C 207118,251845 207140,251066 207481,250935 C 207636,250876 207821,250560 207892,250234 C 207964,249908 208198,249483 208411,249290 C 208625,249096 208800,248852 208800,248748 C 208800,248643 209003,248310 209250,248007 C 209498,247704 209835,247259 210000,247019 C 210525,246253 211513,245790 212148,246012 C 213556,246503 214471,248845 213502,249480 C 213134,249721 213015,249934 213100,250200 C 213166,250408 213036,250937 212810,251381 C 212584,251823 212399,252300 212398,252442 C 212397,252584 212175,253150 211904,253700 C 211634,254250 211410,254980 211406,255323 C 211403,255666 211209,256189 210975,256486 C 210572,256998 210567,257063 210864,257763 C 211036,258168 211227,258680 211288,258900 C 211440,259449 213238,261400 213592,261400 C 213998,261400 215381,262380 216069,263155 C 216449,263584 216770,263773 216995,263702 C 217197,263637 217536,263782 217819,264054 C 218084,264307 218525,264627 218800,264765 C 221972,266356 222988,267803 222410,269911 C 221817,272072 221848,272324 222731,272533 C 223512,272718 224237,273491 224277,274181 C 224289,274408 224863,275173 225550,275880 C 226348,276701 226802,277334 226805,277633 C 226811,278159 227937,278800 228858,278800 C 229147,278800 229565,278994 229786,279231 C 230171,279644 231293,279850 233033,279826 C 233886,279814 234825,281849 234097,282129 C 233138,282497 234325,284400 235513,284400 C 235672,284400 235998,284625 236237,284900 C 236476,285175 236777,285400 236905,285400 C 237034,285400 237355,285588 237619,285817 C 237996,286144 238263,286209 238850,286115 C 239521,286008 239713,286087 240675,286871 C 242405,288280 245243,288353 243600,286946 C 243050,286476 243042,285099 243587,284807 C 244569,284281 246444,285154 247465,286611 C 247727,286985 247978,287045 249405,287078 C 250691,287107 251097,287189 251294,287458 C 251434,287650 251809,287800 252147,287800 C 254041,287800 256707,290204 255890,291175 C 255411,291745 254600,292034 254600,291636 C 254600,290678 251669,290113 250796,290903 C 250515,291158 250216,291222 249700,291139 C 248957,291018 247172,291756 246656,292397 C 246319,292817 246341,293872 246707,294747 C 247641,296982 244104,298914 242400,297100 C 241635,296285 241000,296421 241000,297400 C 241000,298079 241063,298200 241419,298200 C 241650,298200 242078,298371 242371,298579 C 243020,299042 246290,299130 246800,298698 C 246965,298559 247415,298378 247800,298297 C 248185,298215 248678,298025 248895,297874 C 249111,297724 249726,297600 250260,297600 L 251232,297600 L 251100,298200 C 250943,298915 250708,298868 254200,298811 L 256900,298766 L 257750,299426 C 258218,299789 258600,300156 258600,300243 C 258600,300329 258829,300400 259110,300400 C 259396,300400 259822,300619 260082,300900 C 260675,301539 261328,301536 261927,300890 C 262555,300212 262526,300058 261707,299716 C 261226,299515 260973,299254 260878,298863 C 260730,298253 260164,297348 259511,296679 C 259285,296448 258766,295901 258359,295465 L 257617,294671 L 258129,293951 L 258642,293231 L 261771,293222 L 264900,293213 L 265521,292507 C 266252,291676 266226,291680 267342,292220 C 268438,292751 269035,292612 269573,291701 C 269800,291316 270112,291000 270266,291000 C 270655,291000 271600,291773 271600,292090 C 271600,292234 271803,292487 272050,292653 L 272500,292955 L 272078,293531 C 271846,293848 271595,294300 271520,294536 C 271446,294771 271253,295073 271092,295206 C 270932,295340 270800,295609 270800,295805 C 270800,296468 269594,297600 268888,297600 C 268536,297600 268137,297735 268000,297900 C 267840,298093 267397,298200 266762,298200 C 264978,298200 264316,299333 265500,300363 C 266081,300868 266103,300988 265706,301512 C 265328,302012 265328,303388 265706,303888 C 266273,304637 264567,307200 263503,307200 C 263221,307200 262599,307625 261885,308306 C 260725,309412 260069,309746 259494,309526 C 259096,309373 256630,310302 256091,310808 C 255862,311024 255542,311200 255380,311200 C 254947,311200 253861,312710 253708,313526 C 253600,314101 252958,314842 250251,317516 C 246561,321160 246279,321314 245391,320165 C 244436,318931 242921,317600 242470,317600 C 242224,317600 241899,317424 241748,317208 C 241276,316534 239994,316465 239415,317083 C 239148,317367 238770,317600 238573,317600 C 237385,317600 235800,319434 235800,320808 C 235800,321658 234792,322400 233638,322400 C 232713,322400 232449,322476 232246,322800 C 232109,323020 231912,323200 231808,323200 C 231577,323200 229855,324349 229693,324611 C 229629,324715 229315,324800 228995,324800 C 228619,324800 228339,324941 228200,325200 C 227897,325766 226338,325766 225854,325200 C 225417,324690 225105,324695 224581,325219 C 224200,325600 224021,325626 222604,325500 C 221553,325407 221003,325434 220912,325581 C 220588,326104 219057,325826 218293,325107 L 217558,324413 L 217698,323021 C 217797,322033 217949,321527 218219,321283 C 218830,320730 218722,319714 217997,319198 C 216502,318133 216913,316848 219148,315602 C 219614,315342 220054,314944 220126,314718 C 220198,314492 220436,314065 220656,313767 C 221120,313139 221020,312120 220449,311664 C 219740,311097 218601,310400 218386,310400 C 218263,310400 217933,310219 217651,309998 C 217370,309776 216795,309540 216374,309473 C 215033,309258 214625,307292 215636,305914 C 217038,304002 215631,301547 213447,302095 C 212907,302231 211409,303389 211404,303676 C 211402,303773 211018,304234 210550,304701 C 208973,306278 208987,306252 209125,307253 C 209416,309379 208045,310326 204600,310376 C 203047,310399 202601,310477 202158,310802 C 201793,311070 201300,311200 200646,311200 C 200103,311200 199506,311329 199288,311494 C 199075,311655 198710,311790 198477,311794 C 198244,311797 197839,311967 197577,312172 C 196572,312956 194468,313825 193911,313685 C 193511,313585 193279,313655 192992,313962 C 192549,314438 191107,314713 190150,314503 C 188400,314120 186800,314757 186800,315837 C 186800,316547 185574,317552 184267,317915 C 182640,318365 181967,319151 182473,320009 C 182653,320313 182800,320673 182800,320808 C 182800,321363 186786,325590 187314,325595 C 187938,325602 189671,326213 189912,326512 C 190029,326656 190374,326836 190678,326912 C 190983,326989 191326,327259 191442,327512 C 191739,328165 192424,328365 194633,328446 L 196566,328517 L 197591,329509 C 198154,330054 198667,330705 198731,330955 C 198866,331488 199366,331800 200087,331800 C 200661,331800 200770,331390 200300,331000 C 200135,330863 200000,330596 200000,330406 C 200000,330216 199816,329849 199590,329589 C 198879,328768 199115,327734 200049,327584 C 200461,327518 200956,327326 201149,327158 C 201462,326886 202353,326591 202900,326580 C 203624,326564 204761,327076 205410,327710 C 206292,328571 208420,328806 209172,328125 C 209370,327946 209609,327800 209705,327800 C 209800,327800 210137,327553 210453,327250 L 211028,326700 L 211608,327400 C 212426,328385 212195,328979 210988,328994 C 209650,329010 209093,330602 210287,330996 C 210832,331176 211084,331179 211289,331009 C 211461,330866 211924,330828 212532,330906 C 213064,330974 214040,330942 214700,330834 C 215657,330679 215964,330696 216216,330919 C 216783,331424 217302,331242 217978,330301 C 218364,329763 218840,329350 219162,329273 C 219458,329203 219803,329064 219929,328966 C 220168,328778 221414,329249 222038,329763 C 222329,330002 222468,329996 223019,329720 C 223822,329320 225199,329306 225712,329694 C 226257,330106 226875,330069 227300,329600 C 227499,329380 227821,329200 228016,329200 C 228210,329200 228782,328885 229286,328500 C 229791,328115 230376,327800 230586,327800 C 230797,327800 231273,327445 231645,327010 C 232463,326054 233167,325758 234222,325927 C 234969,326046 235619,325855 236800,325167 C 239232,323750 242808,324685 240788,326209 C 240541,326395 240405,326647 240483,326773 C 240713,327145 241369,327031 241612,326577 C 241798,326230 241964,326174 242536,326267 C 242920,326329 243721,326290 244316,326180 C 245366,325986 245422,325999 246194,326619 L 246989,327258 L 246644,327854 C 246455,328183 245993,328687 245618,328976 C 245243,329264 244568,329825 244118,330223 C 243668,330620 242873,331133 242350,331362 C 241704,331644 241400,331897 241400,332151 C 241400,332667 242173,333453 242541,333312 C 243066,333110 243975,332313 244107,331937 C 244299,331392 245403,330200 245716,330200 C 245866,330200 246125,329937 246291,329617 C 246689,328849 247682,328527 249700,328512 C 251425,328499 251722,328623 253629,330151 C 254075,330510 254679,330859 254971,330927 C 255745,331108 256770,332152 257337,333336 L 257833,334371 L 257388,334973 C 257002,335496 256945,335815 256957,337389 L 256971,339202 L 256235,339909 C 255831,340298 255259,340667 254964,340730 C 254669,340793 254219,341067 253964,341340 L 253500,341835 L 254050,342275 C 255206,343200 253459,345600 251629,345600 C 251477,345600 250834,345915 250200,346300 C 248877,347103 248500,347160 248200,346600 C 248082,346380 247857,346200 247700,346200 C 247542,346200 247095,346048 246706,345863 C 246034,345542 245985,345543 245730,345893 C 245440,346290 245000,346162 245000,345681 C 245000,345284 243057,345515 242530,345975 C 242185,346277 242130,346259 241691,345709 C 241228,345128 241214,345125 240806,345494 C 240400,345862 240380,345861 239804,345435 C 239132,344937 238940,344909 238424,345231 C 238148,345403 237574,345408 236172,345249 C 234813,345094 234013,345096 233295,345256 C 232748,345378 231805,345461 231200,345441 C 230277,345410 230047,345475 229769,345843 C 229506,346190 229215,346287 228369,346308 C 227781,346323 227045,346440 226734,346569 C 226187,346794 225424,346852 223286,346827 C 222245,346815 221960,346991 220750,348394 C 220145,349096 218880,348704 219021,347858 C 219089,347448 218980,347189 218788,347307 C 218671,347380 218630,347682 218697,347984 C 218763,348285 218720,348785 218601,349096 L 218386,349662 L 215562,349533 C 213462,349438 212651,349327 212403,349102 C 211940,348684 211543,348724 211233,349222 C 211036,349537 210834,349617 210435,349537 C 210141,349479 209744,349545 209554,349684 C 209311,349863 208927,349892 208254,349781 C 207729,349695 206799,349618 206186,349612 C 205256,349602 205001,349518 204638,349101 C 204226,348626 204167,348615 203452,348872 C 202062,349372 201274,349600 200933,349600 C 200747,349600 200426,349705 200220,349834 C 199528,350266 195891,349689 195019,349008 C 193658,347945 191400,348116 191400,349281 C 191400,350658 193328,351035 200038,350969 C 205144,350920 205606,350944 205975,351277 C 206309,351580 206484,351604 207037,351428 C 208511,350957 211062,350920 212045,351355 C 213616,352050 213593,353761 212016,353510 C 210896,353331 210576,353664 211233,354322 C 211819,354910 213920,355082 214511,354591 C 214727,354412 214992,354457 215684,354792 C 216362,355121 216671,355176 216961,355021 C 217261,354860 217488,354922 218011,355308 C 218378,355579 218766,355800 218873,355800 C 218981,355800 219234,355950 219436,356132 C 219846,356504 220398,356835 221326,357268 C 221670,357428 222012,357658 222087,357780 C 222162,357901 222383,358000 222577,358000 C 222771,358000 223142,358225 223400,358500 C 223972,359109 224192,359121 224882,358579 C 225435,358144 225656,358144 227300,358579 C 228892,359000 230233,358858 230880,358198 C 231215,357856 231763,357556 232180,357486 C 233421,357278 233561,357199 233773,356592 C 234001,355938 234584,355799 235000,356300 C 235375,356752 235662,356663 236054,355976 C 236319,355511 236509,355382 236816,355462 C 237102,355537 237385,355388 237762,354965 C 238579,354048 238880,353948 239460,354404 C 239737,354622 240151,354800 240382,354800 C 240819,354800 240944,354513 240600,354300 C 240490,354232 240400,354047 240400,353888 C 240400,353422 242034,353512 242672,354014 C 243034,354299 243336,354384 243640,354287 C 244286,354082 247842,354042 248236,354235 C 248569,354397 249200,353981 249200,353598 C 249200,353212 250830,353451 251385,353918 C 251862,354319 252041,354360 252605,354199 C 252969,354094 253481,354063 253744,354129 C 254079,354213 254363,354117 254692,353807 C 255025,353495 255360,353383 255838,353424 C 256237,353459 256715,353342 257002,353141 C 257270,352954 257831,352800 258249,352800 C 258854,352800 259045,352707 259183,352350 C 259278,352103 259693,351630 260104,351300 C 260516,350970 261156,350401 261526,350036 C 262005,349564 262312,349409 262591,349497 C 262861,349583 263063,349493 263240,349211 C 263388,348973 263708,348800 264001,348800 C 264325,348800 264576,348645 264703,348364 C 264811,348124 265170,347832 265500,347714 C 266527,347348 267194,346779 267362,346127 C 267490,345628 267643,345487 268112,345434 C 268435,345398 268886,345195 269113,344984 C 269607,344525 270801,344437 271849,344783 C 272721,345071 273000,344954 273000,344300 C 273000,343715 273322,343486 273701,343801 C 274017,344063 275400,343726 275400,343386 C 275400,343286 275657,342955 275972,342652 C 276287,342348 276694,341808 276876,341452 C 277059,341095 277431,340658 277704,340479 C 278354,340053 278333,339816 277650,339862 C 277150,339897 277104,339843 277148,339271 C 277209,338470 277033,338406 274738,338381 C 273281,338365 272799,338284 272373,337981 C 272079,337771 271756,337600 271657,337600 C 270936,337600 270364,336424 270473,335169 C 270534,334471 270592,333724 270601,333509 C 270630,332873 270980,332606 271617,332733 C 272127,332835 272202,332791 272216,332375 C 272225,332114 272446,331540 272708,331100 C 272969,330660 273359,329929 273573,329476 C 273840,328913 274131,328610 274494,328519 C 274815,328439 275119,328163 275263,327822 C 275538,327169 276615,326200 277067,326200 C 277238,326200 277961,325705 278674,325100 C 279387,324495 280095,324000 280248,324000 C 280400,324000 280790,323723 281113,323384 C 282117,322331 283620,321736 284607,322002 C 285523,322249 285882,322099 287051,320982 C 287385,320662 287815,320400 288005,320400 C 288195,320400 288458,320271 288589,320113 C 288955,319673 289882,319549 290785,319819 C 291429,320012 291774,320011 292429,319815 C 293791,319407 294517,320283 294452,322255 C 294385,324296 294740,325589 295477,325986 C 295797,326159 296201,326458 296374,326650 C 296547,326843 296781,327004 296894,327009 C 297125,327020 298519,328926 298465,329158 C 298446,329240 298369,329553 298294,329854 C 298195,330248 298232,330400 298428,330401 C 298578,330402 298940,330528 299234,330681 C 299527,330834 300157,331024 300634,331102 C 301110,331181 301590,331317 301700,331404 C 301810,331491 303065,331652 304488,331762 C 306463,331914 307132,332037 307310,332280 C 307439,332456 307626,332600 307725,332600 C 307825,332600 308220,332768 308604,332974 C 308988,333180 309686,333413 310155,333492 C 310624,333572 311135,333763 311290,333918 C 311445,334073 311833,334200 312154,334200 C 312570,334200 312797,334333 312949,334668 C 313067,334926 313486,335290 313881,335478 C 314277,335665 314600,335901 314600,336002 C 314600,336103 314889,336515 315243,336918 L 315885,337650 L 317193,337505 C 317912,337425 318680,337372 318900,337386 C 319120,337400 320078,337432 321029,337456 C 322351,337490 322849,337582 323145,337850 C 323413,338093 323864,338200 324621,338200 C 325328,338200 325884,338321 326202,338544 C 326472,338733 327144,338910 327696,338938 C 330755,339092 331048,339136 331233,339466 C 331336,339650 331601,339800 331823,339800 C 333886,339800 332971,341873 330665,342424 C 330134,342551 329581,342687 329435,342727 C 328927,342865 329298,343474 330000,343655 C 330385,343755 330800,343918 330922,344019 C 331247,344287 332787,343547 333651,342708 C 334618,341769 336056,341819 337132,342830 C 337813,343470 337723,343929 336825,344387 C 335627,344998 335439,345893 336394,346437 C 337225,346909 337404,347742 336779,348223 C 336256,348625 335495,348716 335300,348400 C 335232,348290 334777,348200 334288,348200 C 333675,348200 333280,348080 333011,347811 C 332797,347597 332280,347362 331861,347289 C 331443,347215 330901,347030 330657,346878 C 330169,346572 329400,346504 329400,346768 C 329400,346860 329890,347175 330489,347468 C 331087,347761 331633,348091 331700,348201 C 331768,348310 332088,348400 332412,348400 C 332735,348400 333180,348580 333400,348800 C 334003,349403 337509,349403 337700,348800 C 337834,348377 338292,348263 338500,348600 C 338568,348710 338900,348800 339239,348800 C 340416,348800 342316,351049 342487,352646 L 342625,353934 L 341729,354617 C 340093,355864 340358,356956 342215,356620 C 344179,356265 344095,356257 344160,356816 C 344274,357795 343605,358298 342233,358267 C 341057,358240 341020,358255 340813,358849 C 340507,359728 340548,360000 340988,360000 C 341202,360000 341435,360096 341508,360212 C 341580,360329 341855,360507 342119,360607 C 342740,360843 342843,362527 342250,362736 C 342058,362804 341585,362993 341200,363156 L 340500,363454 L 341284,363631 C 343385,364106 343047,365600 340838,365600 C 339281,365600 338590,365398 338351,364872 C 338133,364394 337275,364230 336516,364521 C 336017,364713 336081,366430 336600,366754 C 337107,367070 337112,367637 336611,368090 C 336397,368283 336195,368635 336161,368871 C 336102,369284 336019,369298 333867,369242 C 332476,369207 331585,369263 331505,369392 C 331341,369658 330288,369661 329795,369397 C 329378,369174 329168,369428 328924,370450 L 328792,371000 L 330869,371000 C 332643,371000 333020,371058 333455,371400 C 334092,371901 334299,371901 334802,371398 C 335207,370993 338541,370946 340515,371316 C 340951,371398 341341,371308 341818,371017 C 342329,370706 342836,370601 343838,370601 C 344574,370600 345232,370510 345300,370400 C 345368,370290 345742,370200 346130,370200 C 346534,370200 347055,370029 347345,369800 C 347676,369540 348157,369400 348717,369400 C 349198,369400 349651,369287 349740,369146 C 350051,368651 350921,368473 352700,368542 C 353690,368580 354703,368610 354950,368609 C 355927,368605 356381,368611 358546,368655 C 360641,368697 360813,368731 361116,369163 C 361295,369418 361566,369579 361717,369521 C 361869,369463 362366,369547 362822,369708 C 363780,370046 364600,370088 364600,369800 C 364600,369690 364372,369600 364094,369600 C 363518,369600 363199,369050 363621,368783 C 364061,368504 364988,368570 365584,368922 C 366241,369310 367257,368890 368606,367671 L 369394,366959 L 372047,367000 C 376611,367070 382479,366787 382653,366487 C 382770,366286 383725,366218 386753,366199 C 392993,366157 393850,366195 394367,366529 C 394838,366834 395503,366827 398657,366487 C 399381,366409 399912,366444 400077,366581 C 400255,366728 402499,366803 407009,366811 C 412766,366821 413752,366867 414223,367145 C 414713,367435 414814,367437 415234,367162 C 415636,366898 417019,366857 425300,366864 C 433853,366871 434969,366836 435530,366541 C 436065,366260 436855,366212 440761,366220 C 443291,366226 445758,366171 446245,366098 C 446731,366025 447482,366060 447914,366175 C 448416,366309 448987,366319 449494,366203 C 450158,366052 450402,366092 450976,366447 C 451663,366872 451676,366872 466905,366826 C 482661,366779 483787,366828 484190,367581 C 484347,367875 484822,367902 488633,367832 C 493804,367736 493371,367732 495200,367902 C 496025,367979 499715,368075 503400,368114 C 508711,368171 510266,368248 510900,368484 C 511829,368830 512639,368881 512910,368610 C 513030,368490 513992,368486 515496,368600 C 517556,368755 517938,368737 518235,368468 C 518518,368212 519230,368151 522207,368128 L 525835,368100 L 526437,367350 C 526768,366938 527163,366600 527315,366600 C 527467,366600 527736,366379 527913,366108 C 528091,365837 528430,365557 528668,365485 C 528906,365413 529298,365173 529539,364953 C 529850,364668 530127,364588 530487,364679 C 530766,364749 531167,364699 531378,364567 C 531684,364376 531855,364390 532233,364637 C 532625,364895 532920,364912 533982,364741 C 534906,364592 535428,364598 535865,364763 C 536221,364898 536558,364919 536685,364815 C 536974,364577 539370,364590 539518,364830 C 539589,364944 539748,364926 539918,364785 C 540083,364648 540458,364602 540817,364673 C 541156,364741 541603,364705 541812,364594 C 542078,364451 542306,364463 542579,364633 C 542872,364816 543035,364820 543244,364646 C 543631,364326 544323,364552 544695,365121 C 545091,365725 545540,365730 546008,365136 C 546452,364570 548866,364474 549495,364996 C 549693,365160 550344,365309 550974,365335 C 551593,365361 552505,365532 553000,365716 C 554027,366098 556738,366225 563300,366197 C 565610,366187 567590,366186 567700,366194 C 567810,366202 568530,366206 569300,366203 C 570070,366199 571015,366203 571400,366212 C 574742,366285 575534,366332 575760,366474 C 575907,366566 576298,366514 576660,366355 C 577187,366123 578062,366103 581600,366243 C 587032,366458 592033,366290 592260,365885 C 592348,365728 592697,365600 593036,365600 C 593374,365600 594138,365322 594732,364981 C 595757,364395 595839,364380 596300,364681 C 597037,365165 597519,365080 597793,364418 L 598034,363835 L 599667,363907 C 601694,363995 604709,364355 605477,364601 C 605842,364718 606190,364712 606427,364586 C 606684,364448 606936,364459 607238,364620 C 607695,364865 611233,364557 612100,364197 C 612789,363911 614117,363838 614517,364063 C 616402,365128 620294,364222 620095,362766 C 619941,361643 620293,361317 621900,361090 C 623098,360921 623406,360775 624676,359771 C 625213,359347 625779,359000 625933,359000 C 626088,359000 626454,358843 626748,358650 C 627141,358393 627693,358300 628834,358300 C 630223,358300 630410,358254 630619,357865 C 630906,357329 631668,357115 632227,357414 C 632460,357539 632925,357581 633273,357508 C 634259,357302 636378,357021 637800,356907 C 640198,356714 640690,356592 641392,356013 C 641997,355513 642058,355383 641876,354971 C 641320,353707 643349,352583 643997,353795 C 644159,354096 644397,354203 644860,354180 C 645541,354148 646595,354386 647900,354868 C 648537,355103 649188,355132 651100,355011 C 652420,354928 653681,354926 653902,355006 C 654123,355087 654944,355108 655726,355052 C 656999,354961 657216,355000 657791,355425 C 658776,356153 663434,356149 664024,355420 C 664389,354969 664427,354962 664788,355289 C 665021,355500 665577,355655 666233,355692 C 666820,355725 667619,355816 668009,355895 C 668645,356024 668743,355985 668957,355515 L 669196,354991 L 671913,355039 C 673407,355065 674674,355157 674727,355243 C 674986,355662 675621,355257 677134,353705 C 678044,352773 679009,351955 679279,351887 C 679549,351820 679926,351592 680116,351382 C 680589,350860 681237,350903 681881,351500 C 682709,352268 684652,352045 684217,351233 C 683611,350099 684127,348600 685124,348600 C 685592,348600 685800,348507 685800,348300 C 685800,347932 685555,347965 688848,347888 L 691597,347823 L 692698,348873 C 693903,350022 693992,350340 693417,351467 C 692857,352564 692612,352800 692026,352801 C 691298,352803 690179,353147 689700,353517 C 689210,353896 689960,354703 690611,354496 C 690806,354434 691024,354477 691095,354592 C 691307,354935 695935,354852 697206,354482 C 697808,354307 698525,354168 698800,354173 C 706740,354321 707676,354219 707561,353221 L 707500,352700 L 704524,352692 C 702471,352687 701395,352764 701052,352942 C 700253,353356 699823,353265 699677,352650 C 699474,351795 699024,351386 698446,351531 C 698172,351600 697985,351576 698030,351478 C 698717,349995 698779,349970 701370,350140 C 702918,350242 703298,350210 703479,349964 C 703896,349399 713649,349059 714286,349589 C 714479,349749 714708,349748 715126,349586 C 715442,349464 716420,349338 717300,349307 C 718284,349273 719127,349129 719491,348933 C 719930,348697 720379,348646 721238,348735 C 721904,348805 722900,348749 723591,348602 C 724509,348407 724921,348401 725347,348578 C 726006,348851 725448,348834 733676,348824 C 740704,348814 742028,348658 742298,347805 C 742535,347060 742915,346955 743528,347464 C 744408,348197 746400,348359 746400,347699 C 746400,346963 745973,346998 755196,346984 C 758309,346980 759156,346921 759412,346689 C 759588,346530 759927,346400 760166,346400 C 760405,346400 760600,346311 760600,346202 C 760600,346093 761049,345486 761599,344852 C 762148,344218 762733,343543 762899,343350 C 763064,343158 763200,342690 763200,342312 C 763200,341933 763290,341568 763400,341500 C 764205,341002 762994,340834 762038,341311 C 761221,341719 752754,341508 751900,341058 C 751680,340943 751209,340892 750853,340946 C 749710,341120 749240,340880 748972,339986 C 748650,338911 747611,338393 746769,338888 C 746477,339060 746131,339200 746001,339200 C 745870,339200 745534,339380 745255,339600 C 744975,339820 744615,340000 744455,340000 C 744294,340000 743954,340165 743698,340366 C 743264,340707 742686,340730 734977,340715 L 726720,340699 L 725810,341620 C 725310,342126 724785,342688 724644,342868 C 724504,343048 724144,343245 723844,343305 C 723545,343365 722895,343547 722400,343708 C 721007,344163 717995,344101 717147,343601 C 716162,343020 709463,342901 708852,343453 C 708503,343769 708391,343777 707802,343529 C 707248,343296 707059,343295 706621,343520 C 706334,343668 705594,343841 704976,343905 C 703959,344011 703808,344091 703376,344749 C 702841,345567 702081,345866 700984,345691 C 700472,345609 700195,345665 700010,345888 C 699685,346279 698625,346282 698112,345894 C 697898,345732 697558,345600 697355,345600 C 697152,345600 696533,345370 695978,345089 C 694854,344520 694400,344647 694400,345531 C 694400,345815 694257,346056 694050,346120 C 693858,346179 693308,346405 692828,346622 C 692141,346932 691822,346975 691328,346824 C 690983,346718 689367,346592 687738,346545 L 684776,346457 L 684029,345729 C 683619,345328 683174,345000 683040,345000 C 682907,345000 682602,344775 682363,344500 C 682124,344225 681778,344000 681595,344000 C 681411,344000 681054,343820 680800,343600 C 680268,343138 680211,343130 679484,343406 C 679107,343550 678742,343546 678280,343393 C 677609,343172 676607,343620 676140,344350 C 675919,344695 675412,344664 675271,344297 C 675123,343911 672744,344104 672045,344557 C 671638,344821 671550,344817 671215,344514 C 670935,344260 670657,344209 670117,344310 C 668952,344529 666824,344224 666374,343774 C 665569,342969 662282,342899 661190,343665 C 660926,343849 660544,344000 660340,344000 C 659310,344000 658484,345666 659106,346488 C 659722,347302 659131,348200 657980,348200 C 657688,348200 657337,348335 657200,348500 C 656852,348919 656329,348874 655887,348386 C 655493,347950 654408,347981 653848,348444 C 653710,348558 653188,348606 652688,348549 C 652069,348479 651461,348567 650787,348823 C 649472,349323 649373,349307 648860,348516 C 648522,347993 648200,347782 647460,347600 C 645865,347207 643544,347031 643155,347274 C 642891,347440 642664,347406 642202,347133 C 641510,346724 640490,346940 639652,347674 C 639249,348026 639127,348040 638431,347810 C 637532,347513 636911,347659 636309,348309 C 635919,348730 635656,348782 633390,348888 C 632021,348952 630765,349012 630600,349022 C 630435,349032 629760,348944 629100,348827 C 627660,348572 625784,348787 625308,349264 C 624794,349778 622666,349732 622094,349194 C 621680,348805 621000,348822 621000,349221 C 621000,349581 620107,349325 618719,348566 C 618509,348451 617789,348328 617119,348292 C 616448,348257 615394,348090 614776,347923 C 613227,347504 611731,347834 611640,348615 C 611587,349074 611652,349133 612240,349149 C 613240,349176 614846,349494 615337,349761 C 615577,349893 616156,350000 616624,350000 C 617214,350000 617612,350129 617925,350423 C 618204,350685 618741,350885 619338,350947 C 620004,351017 620485,351214 620900,351587 C 621230,351883 621748,352230 622050,352358 C 622621,352600 622724,352895 622411,353389 C 622267,353616 622126,353631 621746,353457 C 621073,353151 620754,353417 620833,354222 L 620900,354900 L 619237,355038 C 618080,355134 617350,355308 616837,355611 C 616229,355970 615906,356026 614991,355930 C 613881,355815 612922,356013 611356,356682 C 610947,356857 610317,357003 609956,357006 C 609595,357010 609125,357145 608912,357306 C 608352,357729 605389,357708 604551,357275 C 604205,357096 603294,356912 602527,356867 C 601362,356798 601056,356703 600675,356292 C 600424,356021 600129,355800 600020,355800 C 599910,355800 599403,355519 598894,355175 C 598056,354609 597921,354575 597473,354815 C 597061,355035 596870,355034 596339,354811 C 595951,354647 594853,354533 593545,354521 L 591390,354500 L 590683,355249 C 589535,356466 588124,356350 586219,354882 C 585546,354363 585275,354255 585071,354424 C 584541,354864 581808,353986 581187,353176 C 580891,352790 580670,352769 576987,352779 C 572138,352792 570268,352206 569589,350460 C 569344,349831 568276,349622 565700,349697 C 564490,349733 563399,349679 563275,349577 C 563151,349476 562656,349395 562175,349397 C 558220,349419 557739,349386 557185,349059 C 555891,348295 556489,346937 558162,346839 L 559204,346779 L 558668,346076 C 558077,345301 557490,345276 556700,345992 C 555580,347007 551662,346603 550566,345359 C 550033,344754 550028,344753 548988,345003 L 547945,345253 L 547298,344483 C 546702,343773 546614,343732 546176,343966 C 544818,344690 544587,344851 544395,345210 C 543466,346946 541326,344783 542112,342903 C 542394,342228 542394,342125 542112,341813 C 541521,341160 541756,340137 542596,339702 C 543334,339320 543733,338351 543428,337682 C 543303,337406 543200,336976 543200,336726 C 543200,336294 541884,335200 541364,335200 C 541253,335200 540934,335020 540655,334800 C 540375,334580 539888,334400 539573,334400 C 539258,334400 538820,334220 538600,334000 C 538080,333480 537200,333461 537200,333969 C 537200,334432 537735,334907 538447,335076 C 538749,335148 539154,335450 539347,335748 C 539541,336047 539955,336519 540267,336799 L 540834,337308 L 540493,338160 C 540305,338628 539983,339102 539776,339213 C 539523,339348 539400,339633 539400,340086 C 539400,340524 539286,340801 539072,340883 C 538796,340989 538762,341215 538862,342288 C 538952,343245 538913,343624 538707,343795 C 538251,344173 538106,345565 538480,345978 C 539230,346807 538581,347400 536925,347400 C 536458,347400 535902,347532 535688,347694 C 535112,348129 533933,348079 533500,347600 C 533301,347380 532897,347200 532602,347200 C 532113,347200 530800,345945 530800,345477 C 530800,345066 530119,344626 529628,344720 C 528731,344892 527928,343667 528042,342299 C 528145,341056 528988,339839 529763,339814 C 530514,339791 531000,339428 531000,338889 C 531000,337830 529488,337839 527043,338912 C 526682,339070 526230,339200 526038,339200 C 525846,339200 525510,339325 525292,339478 C 525074,339631 524094,339823 523114,339905 C 521909,340005 521115,340182 520658,340452 C 520167,340741 519766,340821 519192,340744 C 518758,340686 517797,340714 517057,340805 C 515106,341047 514705,340916 514024,339809 C 513055,338234 511633,337808 510319,338700 C 509479,339270 508379,339357 507986,338884 C 507769,338621 507482,338593 506312,338718 C 504677,338892 504625,338890 503300,338602 C 502750,338483 502064,338389 501776,338394 C 501487,338399 501139,338267 501001,338101 C 500673,337705 500440,337721 499500,338200 C 498580,338669 498026,338700 497142,338330 C 496761,338171 496334,338125 496098,338216 C 495244,338550 493190,338421 492655,338000 C 492322,337738 491843,337600 491271,337600 C 490644,337600 490299,337487 490054,337200 C 489813,336919 489464,336800 488883,336800 C 488360,336800 487868,336654 487551,336404 C 487274,336186 486834,335915 486574,335801 C 486313,335687 485703,335370 485219,335097 C 484734,334823 484120,334600 483855,334600 C 483590,334600 483200,334507 482987,334393 C 482103,333920 481155,335978 482012,336508 C 483259,337278 482412,338400 480584,338400 C 478584,338400 477578,336260 478894,334807 C 479868,333730 477618,333124 475900,334000 C 474848,334536 473811,334317 472600,333302 C 472435,333164 471949,332988 471520,332911 C 470700,332764 469600,331857 469600,331330 C 469600,330883 468660,330222 468198,330343 C 467979,330400 467553,330282 467250,330080 C 466948,329879 466533,329741 466328,329773 C 466123,329806 465689,329578 465364,329266 C 464674,328608 462494,328480 461836,329060 C 461651,329222 461188,329422 460808,329503 C 459806,329716 458870,330551 458396,331655 C 457918,332766 457482,333000 455897,333000 C 455203,333000 454763,333096 454660,333271 C 454504,333536 453759,334000 453491,334000 C 453270,334000 453607,332927 453947,332550 C 454240,332224 454220,332200 453662,332200 C 453316,332200 452909,332031 452700,331800 C 452172,331217 451725,331274 451883,331904 C 452052,332578 451541,332770 450777,332318 C 450141,331943 449800,332033 449800,332579 C 449800,333145 450846,333923 451971,334193 C 452668,334360 453081,334583 453229,334871 C 453351,335107 453620,335488 453829,335717 C 454037,335946 454183,336351 454154,336616 C 454072,337348 454928,337415 455201,336698 C 455373,336244 455484,336187 455978,336295 C 456490,336408 456578,336352 456774,335788 C 456978,335202 457046,335164 457674,335282 C 458178,335376 458383,335332 458468,335111 C 458637,334671 459769,334262 461537,334000 C 462397,333873 463486,333641 463957,333485 C 465035,333127 469607,333087 469952,333432 C 470080,333560 470615,333813 471142,333994 C 472313,334398 472704,335926 471760,336412 C 471507,336542 471075,336852 470800,337100 C 470420,337443 469976,337576 468950,337653 C 468177,337711 467380,337898 467084,338092 C 466709,338338 466357,338394 465792,338299 C 465126,338186 464940,338242 464498,338684 C 464113,339069 463776,339200 463173,339200 C 462583,339200 462269,339318 462011,339636 C 461692,340030 461598,340048 461051,339821 C 460562,339619 460364,339619 460038,339823 C 459709,340028 459573,340026 459316,339813 C 459061,339602 458941,339600 458696,339803 C 458483,339980 458083,340011 457346,339908 C 455692,339675 454863,339803 453969,340428 C 453529,340737 453013,340805 450919,340835 C 449534,340854 448400,340911 448400,340961 C 448400,341012 448589,341358 448819,341731 C 449291,342495 449209,343000 448613,343000 C 448394,343000 448118,343180 448000,343400 C 447745,343877 447400,343926 447400,343485 C 447400,343225 447310,343242 446873,343585 C 446075,344213 443576,344192 443153,343554 C 442859,343111 442820,343108 438189,343154 C 433861,343196 433466,343170 432755,342800 C 432333,342580 431717,342400 431386,342400 C 431055,342400 430431,342220 430000,342000 C 429341,341664 428821,341600 426739,341600 C 424516,341600 424225,341559 423900,341200 C 423667,340943 423284,340800 422827,340800 C 422260,340800 421941,340629 421256,339957 C 420471,339187 420315,339117 419461,339154 C 418340,339203 417887,338867 417591,337768 C 417478,337346 417302,337000 417200,337000 C 417099,337000 416518,336595 415911,336100 C 415303,335605 414692,335200 414553,335199 C 414414,335199 414005,335019 413645,334799 C 413285,334580 412874,334400 412731,334400 C 412588,334400 412011,333825 411448,333122 C 410874,332406 410089,331681 409662,331472 C 408960,331129 408892,331022 408800,330104 L 408700,329107 L 407725,328945 C 407178,328854 406439,328545 406041,328241 C 405370,327729 403726,327241 402577,327213 C 402289,327206 401825,327020 401545,326800 C 401232,326554 400734,326400 400249,326400 C 399716,326400 399345,326271 399100,326000 C 398901,325780 398526,325600 398267,325600 C 398008,325600 397642,325420 397454,325200 C 397265,324980 396974,324797 396806,324794 C 395048,324760 394267,320693 395615,318591 C 395788,318321 395983,317954 396049,317776 C 396114,317597 396417,317389 396721,317312 C 397026,317236 397376,317035 397500,316866 C 397625,316695 398160,316513 398712,316454 C 399255,316396 399844,316224 400021,316070 C 400551,315609 402100,315853 403094,316553 C 403566,316886 404165,317223 404426,317304 C 404687,317384 405061,317618 405258,317825 C 406119,318727 408400,317848 408400,316614 C 408400,316384 408670,315914 409000,315569 C 409330,315223 409600,314815 409600,314661 C 409600,314507 409809,314183 410065,313940 C 411502,312581 411435,311766 409857,311368 C 409245,311214 408917,311006 408800,310700 C 408707,310455 408489,310200 408315,310134 C 407798,309935 407953,309632 408792,309204 C 409787,308697 409654,308660 410289,309620 C 410798,310388 410878,310433 411566,310322 C 413920,309944 413944,309944 414329,310327 C 415133,311125 416833,311830 417630,311695 C 418966,311469 419865,312380 419723,313816 C 419515,315929 420582,317679 422415,318228 C 424451,318838 424709,319972 423044,320998 C 421402,322009 421200,322198 421200,322728 C 421200,323008 421380,323466 421600,323745 C 421820,324025 422002,324444 422005,324677 C 422008,324939 422323,325328 422834,325700 C 423287,326030 424013,326593 424448,326950 C 425017,327418 425442,327601 425969,327603 C 426371,327605 426925,327737 427200,327898 C 427475,328058 427982,328324 428327,328488 C 428723,328676 429003,328990 429090,329343 C 429437,330754 432624,332947 433986,332712 C 434378,332645 435150,332520 435700,332435 C 437157,332209 437957,331610 437684,330950 C 437543,330611 435927,329600 435524,329600 C 435346,329600 435016,329416 434792,329192 C 434568,328968 434185,328698 433942,328592 C 433699,328487 433365,328316 433200,328212 C 433035,328109 432665,327975 432379,327915 C 430710,327568 429770,325811 430385,324190 C 430621,323571 430730,322921 430665,322523 C 430455,321231 433398,319378 435163,319689 C 435568,319761 436530,319889 437300,319975 C 438070,320060 438953,320236 439263,320365 C 439573,320494 440273,320600 440819,320600 C 441496,320600 441848,320691 441922,320886 C 442145,321466 444937,321364 445499,320757 C 446277,319914 446267,319623 445446,319253 C 445036,319067 444543,318787 444352,318629 C 443795,318170 441496,318304 440973,318827 C 440656,319144 440415,319210 439930,319110 C 439584,319039 438838,318989 438273,319000 C 437354,319018 435515,318553 434850,318134 C 434402,317852 434585,317242 435400,316300 C 436295,315266 436284,315301 435979,314426 C 435647,313473 435110,313271 434567,313895 C 434326,314173 433975,314400 433788,314400 C 433602,314400 433337,314535 433200,314700 C 432088,316039 428979,313391 429060,311173 C 429105,309935 428815,309400 428100,309400 C 427852,309400 427537,309265 427400,309100 C 427263,308935 427034,308800 426891,308800 C 426748,308800 426363,308575 426036,308300 C 425266,307652 424535,307646 424244,308284 C 423850,309148 419794,309139 419462,308273 C 419408,308134 418947,307957 418437,307880 C 417756,307778 417336,307563 416858,307070 C 416500,306702 416168,306400 416120,306400 C 415817,306400 414200,307220 414200,307374 C 414200,308246 411565,308946 410718,308300 C 410357,308025 409867,307800 409628,307800 C 409390,307800 409025,307694 408817,307564 C 407998,307053 406179,309402 406919,310016 C 407154,310211 407207,310479 407119,311028 C 407051,311449 407087,311830 407200,311900 C 407644,312174 407416,313540 406820,314179 C 406082,314969 405443,314975 404700,314200 C 404384,313870 403929,313600 403690,313600 C 403450,313600 403025,313420 402745,313200 C 402466,312980 402145,312800 402032,312800 C 401576,312800 401593,311949 402071,310750 C 403117,308128 402892,307000 401323,307000 C 400830,307000 400173,306898 399863,306773 C 399553,306648 398940,306473 398500,306385 C 396212,305925 395793,305738 394985,304815 C 393886,303560 393493,303159 392959,302746 C 392149,302120 391017,301600 390464,301600 C 389708,301600 387449,300207 387308,299653 C 387238,299378 386983,299156 386647,299076 C 386346,299005 385965,298834 385800,298697 C 385635,298560 385275,298380 385000,298299 C 384725,298217 384337,297979 384137,297770 C 383838,297456 383605,297412 382800,297519 C 381749,297658 380681,297207 379963,296320 C 379653,295937 379456,295909 377519,295971 L 375412,296038 L 375073,295329 C 374720,294587 374908,294000 375500,294000 C 375638,294000 375863,293865 376000,293700 C 376174,293490 376636,293400 377534,293400 C 378855,293400 380200,292587 380200,291789 C 380200,291641 380463,291245 380784,290910 C 382115,289519 382589,288153 382000,287400 C 381744,287073 381607,286584 381604,285986 C 381600,285136 381541,285032 380774,284530 L 379948,283989 L 379111,284395 C 378347,284764 377884,284800 373846,284800 C 370840,284800 369250,284877 368895,285039 C 368488,285224 368284,285224 367988,285039 C 367778,284907 367429,284800 367212,284800 C 366277,284800 365302,282531 365820,281562 C 365985,281254 365977,281030 365788,280677 C 365572,280273 365588,280145 365898,279802 C 366230,279435 366235,279370 365947,279050 C 365773,278858 365566,278430 365486,278100 C 365406,277770 365084,277172 364770,276771 C 363990,275774 364001,274865 364804,274096 C 365137,273777 365508,273185 365630,272780 C 366077,271287 366589,270901 368131,270893 C 369614,270886 370814,270300 371286,269352 C 371706,268510 372504,268240 373052,268755 C 373313,269000 373675,269200 373858,269200 C 374041,269200 374338,269425 374518,269700 C 374775,270092 375015,270200 375626,270200 C 376055,270200 376579,270309 376792,270441 C 377109,270640 377250,270617 377585,270313 C 378267,269697 379693,270012 380702,271002 C 381149,271441 381647,271801 381808,271802 C 382363,271806 383463,273161 383488,273871 C 383500,274236 383658,274759 383838,275033 C 384052,275360 384103,275631 383986,275816 C 383712,276249 383724,276271 384900,277456 C 385505,278066 386000,278694 386000,278852 C 386000,279409 386714,279834 387430,279702 C 387959,279604 388245,279686 388789,280089 C 389168,280370 389637,280600 389832,280600 C 390603,280600 391556,282676 390900,282928 C 390487,283086 390522,283788 390950,283921 C 391143,283980 391570,284145 391900,284287 C 392345,284478 392913,284500 394100,284372 C 397056,284055 399271,284240 399959,284863 C 400164,285049 400565,285200 400850,285200 C 401136,285200 401637,285425 401964,285700 C 403087,286645 405111,286337 406045,285078 C 407065,283704 408372,282415 408875,282288 C 409169,282215 409520,282007 409656,281827 C 410137,281187 411737,280268 413527,279604 C 413871,279476 414405,279107 414714,278785 C 415022,278463 415399,278200 415552,278200 C 415854,278200 417495,277306 418039,276845 C 418622,276352 418679,275495 418187,274620 C 417648,273661 417776,273200 418581,273200 C 420357,273200 421851,275433 420924,276702 C 420681,277034 420708,277172 421154,277846 C 421831,278869 420718,280600 419383,280600 C 419259,280600 418881,280833 418542,281118 C 418074,281512 417788,281608 417346,281519 C 416580,281366 415422,282278 413371,284650 C 412843,285260 412388,285600 412098,285600 C 410951,285600 410322,288263 411412,288503 C 411737,288574 412096,288805 412209,289016 C 412498,289556 412835,289495 413513,288781 C 413836,288441 414522,287947 415039,287684 C 415621,287387 416214,286862 416598,286302 C 416940,285806 417314,285400 417431,285400 C 417547,285400 417917,285169 418253,284886 C 418677,284529 419004,284408 419324,284488 C 419656,284572 419844,284492 419999,284202 C 420140,283939 420418,283800 420802,283800 C 421209,283800 421492,283646 421718,283300 C 421957,282936 422223,282800 422699,282800 C 423057,282800 423463,282665 423600,282500 C 423737,282335 424013,282200 424213,282200 C 425163,282200 425703,281323 425651,279866 C 425577,277817 427296,275392 428815,275402 C 428972,275403 429354,275110 429664,274752 C 429976,274392 430270,274199 430321,274322 C 430806,275476 431987,275332 432201,274093 C 432341,273287 433200,273279 433200,274084 C 433200,275664 434076,277961 434742,278128 C 435000,278193 435301,278416 435412,278623 C 435537,278857 435830,279000 436183,279000 C 436495,279000 436863,279135 437000,279300 C 437317,279682 437683,279682 438000,279300 C 438170,279096 438624,279000 439424,279000 C 440680,279000 440859,278810 440359,278008 C 440161,277692 440182,277552 440471,277232 C 440680,277001 440874,276367 440944,275684 C 441027,274884 441240,274265 441632,273684 C 441944,273221 442200,272740 442200,272614 C 442200,272061 444461,270258 445388,270072 C 445713,270007 446133,269784 446321,269577 C 446809,269037 447854,269098 448796,269721 C 449601,270254 452195,270293 452514,269778 C 453167,268721 455686,268531 456676,269464 C 457614,270349 459606,270417 460474,269593 C 461245,268861 461262,266225 460500,265563 C 460163,265270 460000,264921 460000,264495 C 460000,264146 459820,263654 459600,263400 C 459372,263137 459200,262652 459200,262269 C 459200,261901 459105,261600 458990,261600 C 458874,261600 458643,261308 458476,260950 C 457807,259519 457573,259252 456556,258769 C 455603,258315 454041,258163 452563,258380 C 452488,258391 452370,258580 452300,258800 C 452130,259334 451419,259316 450465,258753 C 449193,258002 444526,257951 443662,258678 C 443081,259167 442912,259200 440969,259200 C 439165,259200 438866,259248 438664,259572 C 438512,259815 438087,259990 437437,260076 C 436890,260149 436332,260341 436197,260504 C 436062,260667 435711,260800 435418,260800 C 434826,260800 433743,261301 432898,261965 C 432210,262507 431514,262519 430855,262000 C 430488,261712 430043,261600 429260,261600 C 428038,261600 427400,261345 427400,260856 C 427400,260674 427202,260315 426960,260058 C 426559,259631 426541,259514 426752,258745 C 427225,257018 425412,256272 423852,257550 C 422964,258278 422889,258300 421318,258305 C 419460,258311 418383,258794 416861,260305 C 416394,260768 415597,261290 415061,261482 C 414533,261671 413860,261956 413566,262115 C 413206,262310 412547,262387 411534,262352 C 410043,262300 410032,262304 409285,263050 C 408775,263559 408353,263800 407974,263800 C 406866,263800 406368,264712 407100,265400 C 407375,265658 407600,265959 407600,266069 C 407600,266179 407749,266433 407931,266634 C 408239,266975 408239,267025 407931,267366 C 407749,267567 407599,267949 407599,268216 C 407597,269223 407177,270139 406286,271083 L 405365,272058 L 404874,271529 C 404604,271238 404244,271000 404073,271000 C 403903,271000 403528,270815 403241,270589 C 402664,270135 401240,270207 400951,270704 C 400658,271210 398430,271298 397926,270824 C 397207,270149 396283,270063 395551,270605 C 394642,271277 392175,271429 391541,270852 C 391180,270522 390728,270431 389036,270343 C 387546,270266 386874,270148 386620,269918 C 386427,269743 386040,269600 385761,269600 C 385482,269600 385039,269433 384777,269229 C 384515,269025 383971,268797 383569,268724 C 383167,268650 382788,268457 382726,268295 C 382663,268133 382490,268000 382341,268000 C 382192,268000 381852,267764 381585,267475 L 381100,266950 L 378256,267069 C 375823,267171 375388,267143 375241,266880 C 375056,266549 373695,267165 373340,267741 C 373085,268155 372275,268044 371949,267550 C 371785,267303 371413,266862 371120,266571 C 370828,266281 370343,265678 370044,265232 C 369547,264493 367551,263210 366885,263203 C 366767,263201 366458,262975 366200,262700 C 365942,262425 365617,262200 365479,262200 C 365116,262200 364000,260465 364000,259900 C 364000,259636 363843,259331 363650,259223 C 363356,259058 363300,258729 363300,257151 C 363300,254988 362683,253600 361722,253600 C 361462,253600 361139,253467 361004,253305 C 360870,253143 360451,252953 360074,252882 C 359698,252811 359298,252584 359188,252377 C 359039,252100 358763,252000 358143,251999 C 357110,251998 356116,251178 355431,249763 C 355175,249235 354514,248433 353905,247913 C 353233,247339 352783,246777 352703,246411 C 352632,246090 352445,245720 352287,245589 C 352129,245458 352000,245101 352000,244797 C 352000,244382 351696,243945 350801,243071 C 349824,242116 349602,241780 349601,241250 C 349601,240893 349522,240600 349427,240600 C 349332,240600 348785,239836 348212,238901 L 347171,237203 L 347599,236601 C 347835,236271 348089,235999 348164,235999 C 348614,235994 349173,234656 349062,233846 C 348980,233237 349033,232892 349247,232646 C 349559,232287 349847,231322 349797,230800 C 349782,230635 349742,229777 349708,228894 C 349663,227688 349542,227115 349225,226594 C 348992,226212 348801,225755 348801,225579 C 348800,225402 348485,224845 348100,224341 C 347307,223303 347217,222645 347800,222146 C 348020,221958 348200,221678 348200,221523 C 348200,221369 348347,221186 348527,221117 C 348787,221018 348829,220816 348735,220126 C 348546,218753 348876,217937 349928,217170 C 350975,216408 351172,216219 353100,214133 C 355378,211668 356000,210879 356000,210458 C 356000,210036 358132,207200 358449,207200 C 358552,207200 359019,206805 359488,206323 C 359957,205841 360556,205379 360820,205297 C 361084,205215 361795,204758 362400,204282 C 364524,202609 365406,202000 365703,202000 C 365868,202000 366198,201775 366437,201500 C 366676,201225 367076,201000 367324,201000 C 367573,201000 367832,200910 367900,200800 C 368140,200412 369370,200571 369611,201021 C 369788,201351 369962,201418 370409,201328 C 370856,201239 371064,201318 371358,201692 C 371713,202143 371861,202171 374017,202193 C 375273,202205 376660,202223 377100,202231 C 378207,202253 379052,202005 379361,201569 C 379727,201052 380446,201110 381000,201700 C 381323,202044 381683,202200 382153,202200 C 382534,202200 383062,202377 383345,202600 C 383625,202820 383963,203000 384096,203000 C 384229,203000 384501,203180 384700,203400 C 384922,203646 385316,203800 385720,203800 C 386158,203800 386474,203938 386667,204214 C 386929,204588 387139,204624 388829,204590 C 389858,204569 391306,204654 392047,204779 C 393484,205022 394091,204860 394307,204177 C 394364,203999 394588,203692 394805,203495 C 395022,203299 395204,202994 395208,202819 C 395256,200878 398525,199955 401167,201137 C 403006,201959 405315,199759 405070,197417 C 404985,196598 405022,196115 405185,195918 C 405377,195687 405357,195520 405089,195111 C 404839,194730 404775,194310 404841,193504 C 404921,192549 404874,192362 404466,192008 C 404179,191759 404000,191381 404000,191026 C 404000,190709 403865,190337 403700,190200 C 402988,189609 405192,185819 407350,183923 C 407598,183706 407800,183420 407800,183288 C 407800,183157 407937,182935 408104,182796 C 408906,182131 410345,179624 410448,178714 C 410512,178149 410722,177596 410977,177325 C 411210,177077 411400,176687 411400,176459 C 411400,176230 411535,175991 411700,175928 C 411885,175857 412000,175553 412000,175136 C 412000,174764 412100,174173 412222,173822 C 412384,173359 412385,172953 412227,172342 C 412038,171610 412061,171430 412400,170964 C 412615,170670 412849,170066 412919,169624 C 412990,169181 413217,168665 413424,168478 C 414308,167678 413960,166248 412500,164692 C 411785,163930 411200,163184 411200,163035 C 411200,162885 411020,162534 410800,162255 C 410563,161954 410400,161443 410400,161004 C 410400,160541 410263,160138 410037,159934 C 409741,159666 409667,159251 409634,157665 C 409605,156276 409509,155631 409297,155396 C 408664,154698 409509,152173 411028,150223 C 411233,149961 411400,149530 411400,149267 C 411400,149003 411527,148739 411682,148679 C 412001,148557 413600,146302 413600,145975 C 413600,145859 413780,145534 414000,145255 C 414220,144975 414400,144536 414400,144280 C 414400,144019 414576,143720 414800,143600 C 415162,143406 415200,143181 415200,141205 C 415200,139961 415286,138970 415401,138900 C 415511,138831 415546,138555 415478,138285 C 415411,138015 415444,137683 415552,137547 C 415659,137411 415794,136867 415851,136338 C 415914,135744 416116,135203 416377,134925 C 416648,134636 416800,134212 416800,133744 C 416800,133130 417055,132696 418400,131024 C 419463,129703 420000,128864 420000,128525 C 420000,128220 420160,127928 420398,127801 C 420616,127684 420850,127370 420917,127102 C 420984,126835 421165,126512 421320,126384 C 421474,126256 421600,125870 421600,125526 C 421600,125050 421768,124766 422302,124340 C 423555,123340 423649,123059 423169,121756 C 422661,120376 422777,119741 423597,119401 C 423929,119264 424204,119050 424208,118926 C 424220,118607 425215,117500 425734,117230 C 426352,116907 427974,117163 428265,117629 C 428453,117930 428748,118000 429840,118000 C 430959,118000 431252,118072 431586,118431 C 432018,118895 435301,118881 436179,118411 C 436438,118273 436784,118297 437325,118491 C 438969,119083 440202,119400 440858,119400 C 441770,119400 442717,119748 443694,120442 C 444137,120757 444860,121247 445300,121530 C 445740,121814 446306,122238 446557,122473 C 446809,122708 447579,123395 448269,124000 C 449036,124672 449748,125528 450101,126200 C 450644,127234 451073,127857 452007,128967 C 452223,129224 452400,129550 452400,129693 C 452400,129835 452661,130059 452979,130191 C 453834,130546 454786,133211 454647,134861 C 454562,135862 454607,136077 454974,136419 C 455208,136637 455400,136902 455400,137008 C 455400,137114 455602,137200 455848,137200 C 456522,137200 459040,138511 459710,139211 C 460560,140097 460684,144756 459879,145502 C 459616,145746 459400,146081 459400,146246 C 459400,146411 459210,146788 458978,147083 C 458588,147579 458580,147647 458878,147975 C 459055,148171 459200,148437 459200,148567 C 459200,148826 463731,153400 463987,153400 C 464074,153400 464386,153589 464680,153820 C 465049,154111 465367,154201 465712,154115 C 466087,154021 466325,154114 466678,154495 C 466935,154773 467289,155000 467463,155000 C 467899,155000 469551,156140 469911,156689 C 470073,156936 470422,157237 470685,157357 C 470949,157477 471227,157770 471303,158008 C 471378,158246 471656,158760 471920,159149 C 472505,160010 472532,160531 472000,160700 C 471538,160847 471301,161573 471505,162217 C 471612,162553 471531,162750 471179,163016 C 470720,163362 470718,163378 471082,163781 C 471985,164777 471427,169600 470409,169600 C 470312,169600 470075,170027 469883,170550 C 469690,171073 469402,171654 469242,171842 C 469043,172077 468994,172403 469084,172886 C 469172,173354 469113,173787 468909,174183 C 468715,174557 468675,174823 468801,174900 C 469160,175122 469016,176395 468562,177008 C 468088,177650 467959,181020 468404,181168 C 468878,181326 469224,181878 469116,182307 C 469032,182641 469135,182842 469517,183093 C 469963,183385 470014,183526 469907,184165 C 469794,184838 471614,187000 472295,187000 C 472859,187000 474023,188196 473887,188635 C 473792,188938 474289,189486 477000,192065 C 477165,192222 477872,192946 478570,193675 C 479539,194685 479972,195000 480396,195000 C 480701,195000 481063,195135 481200,195300 C 481337,195465 481660,195600 481917,195600 C 482182,195600 482480,195775 482601,196002 C 482719,196223 483657,197235 484685,198252 C 485713,199268 486691,200370 486860,200700 C 487028,201030 487429,201593 487752,201952 C 488075,202310 488479,202895 488650,203252 C 490364,206818 490884,207821 491122,208018 C 491275,208145 491400,208428 491400,208646 C 491400,208864 491625,209219 491900,209436 C 492175,209652 492400,209921 492400,210033 C 492400,210145 492580,210466 492800,210745 C 493045,211057 493200,211557 493200,212034 C 493200,212463 493347,213039 493527,213313 C 493712,213596 493897,214405 493952,215175 L 494049,216537 L 493315,216991 C 492659,217396 492544,217413 492240,217147 C 492053,216983 491540,216737 491100,216601 C 490660,216464 489998,216225 489630,216070 C 489143,215864 488560,215823 487501,215919 C 486089,216047 486027,216034 485571,215509 C 485141,215014 485014,214978 484100,215091 C 483346,215184 482805,215109 481900,214786 C 479612,213970 479371,214001 477877,215312 C 476390,216618 476217,216903 476651,217337 C 476981,217667 476054,219400 475548,219400 C 475293,219400 472400,222350 472400,222609 C 472400,222703 471932,223014 471360,223301 C 470789,223588 470136,224002 469910,224220 C 469685,224438 469239,224823 468919,225074 C 468406,225479 468332,225675 468287,226750 C 468217,228426 466519,231177 465536,231207 C 464768,231231 464144,232992 464249,234839 C 464340,236435 464309,236682 463976,236967 C 463769,237144 463600,237457 463600,237663 C 463600,238121 463053,238851 461550,240397 C 460686,241286 460400,241725 460400,242160 C 460400,242811 459639,244361 459012,244988 C 458785,245215 458600,245577 458600,245793 C 458600,246009 458420,246282 458200,246400 C 457980,246518 457800,246771 457800,246963 C 457800,247154 457673,247492 457518,247714 C 456443,249249 456877,251800 458214,251800 C 458813,251800 460800,249683 460800,249043 C 460800,248685 461760,247189 462149,246940 C 462287,246852 462400,246529 462400,246221 C 462400,245914 462580,245499 462800,245300 C 463020,245101 463200,244769 463200,244562 C 463200,244106 464462,242800 464904,242800 C 465078,242800 465343,242506 465494,242146 C 465644,241786 465954,241322 466183,241115 C 466413,240908 466600,240499 466600,240207 C 466600,239915 466732,239502 466894,239288 C 467062,239066 467190,238456 467194,237862 C 467197,237291 467299,236762 467420,236687 C 467542,236612 467767,236249 467921,235880 C 468085,235488 468471,235073 468851,234881 C 470359,234118 471419,232980 472138,231350 C 472271,231048 472471,230800 472582,230800 C 472693,230800 473030,230373 473332,229850 C 473633,229328 473997,228828 474140,228740 C 474283,228652 474400,228239 474400,227821 C 474400,227316 474534,226941 474800,226700 C 475066,226459 475200,226084 475200,225581 C 475200,225164 475290,224768 475400,224700 C 475510,224632 475600,224309 475600,223982 C 475600,223655 475735,223064 475900,222669 C 476065,222274 476200,221793 476200,221600 C 476200,221407 476335,221137 476500,221000 C 476673,220857 476800,220421 476800,219973 C 476800,217907 480885,217917 481992,219985 C 482158,220296 482430,220353 483702,220345 C 484909,220337 485323,220415 485757,220735 C 486056,220954 486745,221195 487289,221269 C 487846,221344 488462,221577 488702,221801 C 488935,222021 489401,222200 489738,222200 C 490075,222200 490455,222325 490582,222478 C 490708,222631 491214,222857 491706,222981 C 492198,223104 492600,223294 492600,223403 C 492600,223511 492886,223600 493235,223600 C 493960,223600 495924,224845 496107,225421 C 496307,226051 497827,227026 498410,226898 C 498750,226823 499092,226914 499413,227164 C 499681,227373 500320,227606 500834,227682 C 501347,227758 501881,227956 502019,228123 C 502158,228290 502525,228558 502835,228718 C 503146,228879 503400,229133 503400,229283 C 503400,229434 503648,229618 503950,229693 C 504252,229768 504841,230183 505258,230615 C 505675,231048 506319,231528 506689,231682 C 507059,231837 507419,232143 507488,232363 C 507558,232583 507747,232814 507908,232875 C 508068,232937 508200,233222 508200,233508 C 508200,234090 509287,235799 509660,235802 C 510094,235807 512200,238020 512200,238473 C 512200,239858 510042,242550 509118,242317 C 508908,242264 508514,242396 508241,242610 C 507969,242825 507500,243000 507199,243000 C 506533,243000 505074,244483 504898,245338 C 504452,247510 503963,247441 501086,244799 C 500348,244122 499126,243748 497500,243701 C 496840,243682 496014,243597 495665,243511 C 495069,243365 495019,243396 494837,244028 C 494731,244398 494585,244841 494514,245014 C 494425,245231 494549,245404 494913,245569 C 495468,245822 495481,246697 494934,247045 C 494586,247266 492843,247231 492700,247000 C 492343,246423 491782,246801 491918,247527 C 492049,248223 491997,248311 490677,249631 C 488724,251585 488200,252188 488200,252486 C 488200,252629 488011,252987 487779,253281 C 487304,253885 487378,255005 487924,255451 C 488091,255588 488402,255857 488614,256050 C 489391,256755 490215,256411 491944,254660 C 492619,253976 492947,253494 492871,253296 C 492801,253114 492955,252803 493248,252531 C 493520,252279 493778,251982 493821,251871 C 493865,251760 494547,251249 495337,250736 C 496128,250223 496827,249719 496890,249617 C 496953,249514 497266,249373 497586,249303 C 497905,249233 498213,249055 498269,248908 C 498326,248760 498761,248575 499236,248496 C 499711,248417 500326,248237 500602,248096 C 501013,247886 501197,247887 501608,248103 C 501885,248248 502694,248469 503406,248594 C 505246,248917 505400,248980 505400,249420 C 505400,249906 505976,250159 506219,249779 C 506342,249587 506274,249415 505999,249226 C 505442,248842 505492,248080 506100,247682 C 506375,247501 506601,247252 506601,247127 C 506604,246684 507968,245925 508286,246189 C 508483,246352 508690,246366 508937,246234 C 509380,245998 512559,245597 512913,245733 C 513053,245786 513398,245679 513680,245495 C 514069,245240 514422,245191 515146,245291 C 515671,245363 516595,245413 517200,245402 C 518681,245374 519959,245752 520338,246330 C 520735,246936 521000,246929 521000,246312 C 521000,245780 521297,245472 521498,245797 C 521686,246101 522350,246042 522914,245672 C 523368,245375 523485,245373 524193,245651 C 524823,245898 525042,245909 525336,245708 C 525536,245572 525945,245400 526244,245328 C 526602,245241 527011,244850 527444,244183 C 527924,243442 528434,242983 529348,242469 C 530035,242083 530757,241564 530952,241316 C 531148,241067 531531,240746 531804,240602 C 532444,240264 532593,240026 532597,239337 C 532600,238695 532859,238141 533415,237585 C 533627,237373 533800,237117 533800,237015 C 533800,236807 535894,235800 536324,235800 C 536476,235800 536960,236160 537400,236600 C 538341,237541 538842,237601 539503,236850 C 540083,236191 540102,236044 539664,235560 C 539367,235232 539357,235072 539581,234200 C 539720,233656 539775,232941 539702,232611 C 539612,232199 539734,231550 540091,230545 C 540377,229739 540688,228385 540784,227536 C 540879,226688 541076,225849 541222,225673 C 541535,225296 541993,224046 541997,223557 C 541999,223368 542179,223118 542398,223001 C 542962,222699 543400,221753 543400,220835 C 543400,220055 543928,218652 544500,217912 C 544665,217698 544800,217371 544800,217185 C 544800,216998 545025,216699 545300,216518 C 545575,216338 545800,216027 545800,215826 C 545800,215626 545976,215303 546191,215109 C 546477,214849 546550,214600 546464,214172 C 546388,213791 546454,213470 546655,213245 C 546824,213055 547061,212530 547182,212078 C 547750,209943 550202,208558 551070,209883 C 551244,210148 551740,210521 552172,210712 C 552870,211020 553800,212264 553800,212890 C 553800,212970 553994,213193 554231,213385 C 554591,213676 554678,214003 554756,215359 C 554829,216612 554936,217061 555225,217323 C 555431,217509 555600,217881 555600,218149 C 555600,218418 555780,218866 556000,219145 C 556540,219832 556503,220447 555877,221190 C 555390,221770 555364,221900 555494,223114 L 555633,224415 L 556718,225027 C 557314,225364 557869,225748 557951,225882 C 558206,226297 559069,226800 559525,226800 C 559811,226800 560103,227041 560375,227503 C 560603,227890 561032,228298 561328,228410 C 561623,228523 562863,229638 564082,230889 C 565864,232716 566463,233207 567127,233383 C 567581,233504 568065,233737 568201,233901 C 568337,234066 568522,234200 568612,234200 C 569123,234200 570046,235389 569922,235885 C 569638,237016 571123,238122 572082,237493 C 572520,237207 572630,237208 573331,237505 C 573754,237684 574505,237905 575000,237995 C 576306,238233 578400,239045 579223,239633 C 579806,240050 580200,239693 580200,238746 C 580200,238270 580300,237780 580423,237657 C 580546,237534 580748,237259 580873,237045 C 581642,235729 582234,235035 582684,234922 C 582998,234843 583240,234608 583315,234312 C 583382,234046 583608,233674 583818,233484 C 584028,233294 584200,232936 584200,232689 C 584200,232442 584568,231759 585017,231170 L 585835,230100 L 585725,228300 C 585617,226521 585623,226492 586215,225800 L 586813,225100 L 587557,225525 C 587966,225759 588674,226013 589132,226090 C 589590,226167 590121,226403 590313,226615 C 591397,227812 593082,226167 592854,224137 C 592772,223409 592836,223117 593175,222686 C 593476,222304 593600,221862 593600,221175 C 593600,220420 593689,220148 594000,219954 C 594618,219568 594618,211859 594000,211300 C 593344,210706 593527,210243 595016,208735 C 595795,207946 596574,207030 596746,206700 C 596918,206370 597361,205731 597730,205279 C 598284,204601 598401,204289 598406,203479 C 598410,202941 598541,202330 598698,202123 C 598855,201916 599043,201331 599116,200823 C 599189,200315 599370,199761 599519,199591 C 599919,199132 600714,197579 600870,196950 C 600980,196512 601123,196400 601573,196400 C 601892,196400 602303,196218 602516,195983 C 603152,195279 604552,194427 605303,194286 C 606574,194048 607350,195440 606418,196284 C 606208,196474 605976,196870 605902,197165 C 605829,197459 605635,197848 605472,198030 C 605223,198306 605211,198559 605401,199607 C 605796,201785 602589,206400 600681,206400 C 599508,206400 598424,207730 598701,208831 C 598821,209309 598648,209599 597452,210919 C 597206,211191 596949,211632 596882,211899 C 596816,212165 596635,212488 596480,212616 C 596116,212918 596124,213288 596502,213601 C 596668,213739 596858,214193 596925,214610 C 596994,215046 597249,215544 597523,215783 C 598003,216200 598061,216516 598090,218900 C 598105,220101 599015,220150 600207,219016 C 600674,218572 601215,218159 601410,218097 C 601604,218035 601873,217853 602006,217692 C 602140,217532 602401,217400 602586,217400 C 602933,217400 604994,215218 605234,214598 C 605309,214405 605678,214192 606064,214120 C 606447,214048 606870,213857 607004,213695 C 607139,213533 607371,213400 607519,213400 C 607977,213400 608449,212272 608174,211833 C 607608,210927 608706,209736 609661,210221 C 610222,210505 611956,212347 612105,212816 C 612167,213012 612477,213229 612793,213298 C 613109,213368 613568,213599 613814,213812 C 614060,214026 614467,214200 614719,214200 C 614970,214200 615231,214288 615297,214395 C 615363,214502 615766,214683 616193,214798 C 616840,214972 616994,215116 617112,215654 C 617190,216009 617407,216407 617595,216539 C 618099,216892 617922,221790 617373,222691 C 617169,223026 617001,223550 617001,223856 C 617000,224439 614344,227264 613564,227512 C 613364,227575 613148,227839 613082,228099 C 613017,228358 612792,228726 612582,228916 C 612372,229106 612200,229472 612200,229728 C 612200,230050 611953,230358 611400,230724 C 609773,231800 610259,233502 612922,236050 L 614332,237400 L 615975,237400 C 618248,237400 618924,236789 618380,235229 C 618241,234829 617984,234553 617679,234477 C 616521,234186 615644,231984 616411,231290 C 617227,230552 620200,230699 620200,231478 C 620200,231623 620426,231985 620701,232283 C 621204,232825 621322,234984 620906,236026 C 620675,236604 621672,237464 622442,237351 C 622801,237299 623253,237355 623447,237476 C 623709,237639 623903,237632 624199,237447 C 624536,237237 624660,237260 624999,237599 C 625220,237820 625603,238000 625850,238001 C 626455,238002 629094,239042 629559,239463 C 629806,239687 630276,239800 630954,239800 C 631741,239800 632040,239890 632249,240189 C 632399,240402 632967,240807 633511,241087 C 634055,241367 634811,241913 635190,242298 C 635570,242684 636047,243000 636250,243000 C 636453,243000 636772,243270 636959,243601 C 637147,243931 637477,244258 637693,244328 C 638826,244693 640418,246640 640289,247503 L 640165,248331 L 641879,249916 C 642822,250787 643595,251606 643597,251736 C 643599,251866 643863,252160 644185,252389 C 644506,252618 644826,253065 644896,253382 C 644966,253699 645198,254117 645411,254310 C 645977,254822 645896,255143 645000,255947 C 644068,256784 643885,257817 644600,258200 C 645348,258601 644961,259569 643423,261142 C 642952,261624 642600,262177 642600,262435 C 642600,262682 642375,263113 642099,263392 C 639256,266275 639180,266391 639769,266950 C 641766,268846 642289,269281 642593,269303 C 642882,269324 643697,269889 645070,271020 C 645435,271321 644983,272000 644418,272000 C 644112,272000 643699,272180 643500,272400 C 642940,273019 641317,272965 640891,272314 C 640058,271043 638000,271335 638000,272724 C 638000,273222 637799,273400 636900,273700 C 636101,273966 636031,274863 636800,274968 C 637075,275006 637458,275178 637651,275350 C 638045,275702 638609,276040 639500,276457 C 639830,276612 640225,276889 640378,277074 C 640542,277271 640806,277361 641020,277294 C 641257,277218 641473,277323 641642,277595 C 642113,278354 643603,278940 643929,278494 C 644333,277941 644259,277471 643684,276938 C 642296,275650 643928,274645 645875,275588 C 646343,275815 647008,276000 647351,276000 C 647695,276000 648032,276090 648100,276200 C 648305,276531 650139,276447 650272,276100 C 650336,275935 650583,275800 650822,275800 C 651229,275800 651249,275732 651140,274680 C 650985,273174 651218,272600 651985,272600 C 652333,272600 652658,272461 652767,272266 C 652870,272082 653256,271789 653624,271615 C 654429,271235 654594,270673 654018,270270 C 653470,269886 653491,269561 654111,268823 C 654649,268184 654599,267780 653911,267209 C 653559,266917 653497,265765 653803,265194 C 654205,264444 655481,264313 656510,264916 C 657218,265331 657581,265423 658159,265334 C 659028,265200 659203,265315 660353,266776 C 661299,267978 661316,268034 660914,268657 C 660757,268901 660525,269682 660398,270392 C 660248,271231 660015,271832 659734,272105 C 658797,273013 657991,274065 657873,274535 C 657805,274806 657581,275133 657375,275262 C 656449,275841 657981,277400 659476,277400 C 659661,277400 659863,277532 659925,277692 C 659986,277853 660217,278042 660437,278112 C 660657,278181 660965,278522 661121,278869 C 661278,279216 661495,279658 661603,279850 C 661711,280043 661876,280358 661970,280550 C 662063,280743 662341,281003 662589,281128 C 662836,281253 663367,281665 663769,282042 C 664171,282420 664760,282902 665078,283114 C 665396,283326 665782,283590 665936,283700 C 666143,283847 666309,283779 666565,283442 C 667119,282715 669968,282627 670617,283318 C 670876,283594 671298,283800 671604,283800 C 671991,283800 672444,284116 673254,284950 C 676253,288041 677186,288918 678059,289469 C 678366,289662 678698,290032 678796,290290 C 678894,290548 679142,290881 679347,291030 C 679551,291178 679930,291660 680189,292100 C 680722,293006 681814,294113 682345,294284 C 683240,294574 683600,295597 683600,297849 C 683600,300436 683739,300841 685043,302050 C 686456,303360 687600,303324 687600,301969 C 687600,301667 687704,301190 687832,300909 C 688003,300535 688006,300272 687845,299919 C 687686,299569 687687,299240 687848,298713 C 688049,298059 688028,297957 687635,297682 C 687086,297297 687010,295541 687519,294979 C 687813,294654 687803,294532 687401,293463 C 686535,291166 686865,290293 688406,290802 C 689931,291305 690344,292191 689632,293429 C 689152,294262 689078,294998 689436,295356 C 689566,295486 689723,295976 689786,296446 C 689897,297277 689923,297303 690754,297414 C 692148,297600 692335,298865 691145,300055 C 690948,300252 690468,300911 690080,301518 C 689691,302126 689244,302672 689087,302733 C 688661,302896 688738,303369 689300,304036 C 690611,305595 688938,306811 687424,305400 C 686312,304363 686159,304386 685413,305707 C 685070,306316 684589,306891 684344,306984 C 684100,307078 683729,307344 683519,307577 C 683109,308032 681926,308166 681690,307783 C 681616,307664 681183,307395 680728,307186 C 680273,306976 679747,306694 679559,306559 C 679276,306355 679137,306389 678746,306757 C 678487,307001 678036,307200 677744,307200 C 677426,307200 677132,307354 677009,307584 C 676896,307795 676553,308022 676248,308090 C 675942,308157 675424,308434 675096,308705 L 674500,309198 L 674975,309602 C 675237,309824 675687,310063 675975,310134 C 676264,310205 676869,310564 677321,310932 C 677772,311299 678328,311600 678556,311600 C 678784,311600 679148,311825 679364,312100 C 679581,312375 679830,312600 679918,312600 C 680006,312600 680309,312821 680591,313091 C 681086,313566 682404,314376 683369,314799 C 683627,314912 684212,315301 684669,315663 C 685126,316026 685750,316429 686056,316559 C 686361,316690 686663,316932 686727,317098 C 686794,317274 687092,317400 687440,317400 C 687768,317400 688269,317583 688553,317806 C 688881,318064 689330,318200 689785,318180 C 690178,318163 690725,318239 691000,318349 C 692066,318778 694390,318871 694799,318501 C 695318,318031 701416,317982 701959,318444 C 702784,319145 704065,319603 704390,319313 C 704561,319160 705150,318970 705700,318891 C 706250,318811 706939,318578 707231,318373 C 707523,318168 707819,318000 707889,318000 C 707959,318000 708215,317813 708458,317585 C 708923,317147 710179,317168 710727,317622 C 710862,317735 711289,317866 711675,317914 C 712844,318059 713387,318359 713721,319045 C 714079,319780 715726,321200 716220,321200 C 716398,321200 716974,321530 717502,321933 C 719487,323448 720051,323640 722667,323689 L 725034,323733 L 725967,322669 C 727032,321455 727207,321414 728419,322097 C 728903,322371 729435,322653 729600,322723 C 731035,323337 732075,323926 732267,324233 C 732619,324796 734400,324763 734400,324194 C 734400,323970 734268,323737 734108,323675 C 733947,323614 733759,323386 733691,323170 C 733509,322599 732034,321600 731372,321600 C 731020,321600 730708,321448 730554,321200 C 730409,320969 730087,320800 729791,320800 C 729483,320800 728971,320519 728510,320097 C 728088,319710 727508,319336 727221,319266 C 726934,319196 726485,318973 726223,318770 C 725961,318566 725625,318400 725478,318400 C 725330,318400 725062,318175 724882,317900 C 724701,317625 724402,317400 724217,317400 C 724032,317400 723794,317315 723690,317210 C 723337,316858 721581,316000 721213,316000 C 721013,316000 720327,315595 719689,315100 C 719052,314605 718451,314200 718355,314200 C 718258,314200 718048,313885 717887,313500 C 717726,313115 717508,312800 717402,312800 C 717148,312800 716600,311725 716600,311226 C 716600,311010 716446,310564 716258,310237 C 715958,309715 715952,309599 716206,309293 C 716365,309101 716468,308740 716436,308491 C 716403,308242 716472,307979 716588,307907 C 716705,307835 716800,307270 716800,306651 C 716800,305826 716901,305415 717178,305113 C 717386,304886 717656,304224 717778,303643 C 718325,301027 719985,300551 721717,302513 C 723879,304961 724107,305199 724284,305200 C 724385,305200 724989,305737 725625,306394 C 726820,307626 727833,308200 728813,308200 C 729462,308200 729552,308310 730117,309800 C 730452,310684 730676,310968 731259,311248 C 732484,311836 732908,315248 731843,315954 C 731002,316513 731170,316833 733399,318918 C 734292,319753 734414,319808 735032,319646 C 735477,319530 735987,319558 736561,319730 C 737145,319904 738017,319949 739261,319869 C 740964,319759 741128,319781 741481,320175 C 741691,320409 741953,320600 742065,320600 C 742177,320600 742427,320744 742622,320920 C 743084,321338 743400,321122 743400,320388 C 743400,319556 744037,319595 744414,320450 C 744687,321070 745600,321508 745600,321018 C 745600,320205 747514,319874 748619,320497 C 749873,321204 750364,321400 750874,321400 C 751576,321400 753856,322213 754313,322627 C 754542,322834 755032,323003 755413,323007 C 755791,323011 756325,323143 756600,323300 C 756875,323457 757348,323589 757650,323593 C 757953,323597 758383,323783 758606,324006 C 758830,324230 759282,324466 759610,324532 C 759939,324598 760257,324730 760316,324826 C 760375,324922 760586,325000 760785,325000 C 760984,325000 761381,325185 761667,325410 C 762090,325743 762267,325778 762606,325597 C 762836,325474 763280,325430 763593,325498 C 763915,325569 764219,325532 764293,325412 C 764365,325295 764758,325200 765167,325200 C 767059,325200 767441,326802 765877,328178 C 764408,329472 764826,330191 767050,330197 L 768000,330200 L 768000,357100 L 768000,384000 L 384000,384000 L 0,384000 L 0,357500 z M 320860,371872 C 320948,371722 321158,371600 321327,371600 C 321899,371600 321473,371100 320848,371038 C 320380,370992 320170,371082 319998,371404 C 319858,371665 319652,371786 319467,371715 C 319301,371651 318927,371786 318636,372015 L 318108,372430 L 319404,372287 C 320150,372204 320768,372028 320860,371872 z M 327114,371984 C 327389,371681 327641,371598 328045,371679 C 328759,371822 328762,371499 328050,371158 C 327723,371002 327500,370733 327500,370497 C 327500,370032 327249,369807 326724,369803 C 326399,369800 326366,369905 326475,370588 C 326547,371041 326516,371428 326400,371500 C 326103,371684 326158,372400 326469,372400 C 326617,372400 326907,372213 327114,371984 z M 324877,371687 C 325186,370883 324033,369723 323040,369838 C 322171,369938 322248,371075 323129,371161 C 323475,371195 323916,371397 324110,371611 C 324536,372082 324719,372100 324877,371687 z M 307911,371583 C 307985,371463 307955,371275 307844,371164 C 307596,370916 306731,371327 306906,371610 C 307066,371869 307745,371850 307911,371583 z M 309600,371512 C 309600,371353 309516,371172 309414,371109 C 309176,370962 308937,371336 309100,371600 C 309284,371898 309600,371842 309600,371512 z M 317410,371288 C 317552,371117 317968,370852 318334,370699 C 319053,370398 319209,369923 318657,369711 C 318412,369617 318097,369820 317562,370417 C 316488,371617 315042,371700 314231,370610 C 313575,369729 313353,369567 313122,369798 C 312935,369985 313294,370666 313901,371272 C 314357,371728 317034,371741 317410,371288 z M 357634,371269 C 358047,370895 358121,370400 357763,370400 C 357488,370400 356600,371190 356600,371435 C 356600,371720 357252,371615 357634,371269 z M 360563,371250 C 360481,370823 359600,370643 359600,371053 C 359600,371435 359795,371600 360248,371600 C 360503,371600 360607,371484 360563,371250 z M 347533,371267 C 347460,371193 347340,371193 347267,371267 C 347193,371340 347253,371400 347400,371400 C 347547,371400 347607,371340 347533,371267 z M 306400,370721 C 306400,370314 305942,370200 304311,370200 C 303147,370200 302749,370118 302335,369792 C 301781,369356 297885,369175 296139,369505 C 295208,369681 295073,370566 296000,370422 C 297529,370185 300925,370324 301500,370647 C 302303,371098 306400,371160 306400,370721 z M 366900,370600 C 366968,370490 366889,370400 366724,370400 C 366559,370400 366368,370490 366300,370600 C 366232,370710 366311,370800 366476,370800 C 366641,370800 366832,370710 366900,370600 z M 371000,369629 C 371000,368976 369997,368392 369403,368698 C 368611,369108 368642,369285 369550,369539 C 370524,369812 371000,369842 371000,369629 z M 327300,367367 C 328842,367463 329267,366879 328150,366198 C 327702,365924 327143,365801 326350,365801 L 325200,365800 L 325200,366722 L 325200,367645 L 325950,367487 C 326363,367401 326970,367347 327300,367367 z M 330611,366671 L 330812,366142 L 331256,366553 C 332141,367373 333420,367088 334491,365833 C 335486,364667 335507,364349 334579,364534 C 334137,364623 333817,364540 333395,364228 C 332674,363695 332197,363687 331545,364200 C 331266,364420 330948,364600 330840,364600 C 330731,364600 330590,364736 330527,364903 C 330463,365070 330183,365292 329905,365398 C 329397,365591 329247,366169 329521,366884 C 329716,367392 330387,367261 330611,366671 z M 335733,363667 C 335660,363593 335600,363653 335600,363800 C 335600,363947 335660,364007 335733,363933 C 335807,363860 335807,363740 335733,363667 z M 234933,357867 C 234860,357793 234740,357793 234667,357867 C 234593,357940 234653,358000 234800,358000 C 234947,358000 235007,357940 234933,357867 z M 608600,356200 C 608600,356090 608460,356000 608288,356000 C 608117,356000 608032,356090 608100,356200 C 608168,356310 608308,356400 608412,356400 C 608515,356400 608600,356310 608600,356200 z M 118735,353050 C 119582,351987 119502,351464 118375,350683 C 117583,350134 117580,350127 117708,349106 C 117828,348141 117806,348067 117318,347845 C 116331,347395 116661,345200 117716,345200 C 117955,345200 118263,345065 118400,344900 C 118537,344735 118916,344600 119242,344600 C 119601,344600 119968,344436 120170,344187 C 120473,343814 120709,343776 122603,343797 C 123756,343809 125082,343820 125548,343819 C 126186,343819 126448,343916 126606,344211 C 126766,344510 127015,344599 127658,344586 C 128121,344577 129005,344631 129621,344707 C 130536,344819 130794,344784 131021,344513 C 131175,344330 131421,344073 131568,343940 C 131716,343808 132185,343363 132610,342950 C 133097,342478 133575,342200 133898,342200 C 134213,342200 134455,342064 134523,341850 C 134684,341335 134953,340783 135405,340037 C 136047,338977 135601,338647 134681,339500 C 134291,339861 133918,340000 133337,340000 C 132873,340000 132379,340138 132172,340326 C 131894,340577 131355,340657 129822,340676 C 128083,340697 127773,340754 127366,341130 C 126736,341711 121942,341738 121521,341163 C 121056,340527 120216,340486 119672,341073 C 119026,341770 117160,341851 116754,341200 C 116245,340386 115131,340655 113856,341900 C 112583,343143 110883,343502 110414,342626 C 110000,341852 109063,341649 105456,341552 C 103562,341501 101897,341369 101756,341259 C 100855,340552 99208,340568 98609,341289 C 98261,341708 98111,341684 97491,341109 C 97091,340738 96821,340646 96391,340732 C 95947,340821 95545,340665 94563,340023 C 93123,339082 92859,339039 92118,339621 C 91678,339968 91424,340019 90693,339909 C 89899,339790 89750,339833 89311,340307 C 88886,340766 88714,340821 88050,340708 C 87430,340604 87170,340666 86710,341028 C 86189,341438 85915,341479 83603,341494 C 81516,341507 80969,341574 80517,341870 C 80027,342191 79400,342234 74725,342265 C 70106,342296 69419,342342 68948,342650 C 68654,342843 68073,343003 67657,343006 C 66839,343013 65800,343731 65800,344290 C 65800,344720 66766,344693 67255,344250 C 67959,343613 73889,343559 74737,344182 C 75263,344569 75591,344598 79700,344624 C 83674,344650 84146,344689 84579,345028 C 84959,345326 85337,345393 86407,345352 C 87463,345311 87841,345376 88144,345650 C 88682,346136 93407,346174 93804,345695 C 94030,345423 94100,345429 94450,345745 C 94795,346058 95329,346104 98960,346137 C 102960,346173 103089,346187 103414,346618 C 103623,346895 103869,347016 104069,346940 C 104955,346600 106000,347563 106000,348719 C 106000,349442 106926,350186 107836,350194 C 108240,350197 108706,350335 108871,350500 C 109051,350680 109541,350800 110095,350800 C 110818,350800 111129,350911 111528,351310 C 111931,351713 112262,351829 113112,351863 C 113703,351887 114298,352018 114433,352153 C 114569,352289 114919,352400 115210,352400 C 115502,352400 116047,352617 116420,352883 C 117240,353465 118340,353545 118735,353050 z M 715745,353000 C 716149,352683 716557,352600 717715,352600 C 718519,352600 719232,352510 719300,352400 C 719701,351751 715899,351538 715321,352177 C 715133,352384 714714,352607 714390,352672 C 714046,352741 713800,352917 713800,353095 C 713800,353554 715123,353489 715745,353000 z M 122850,352103 C 123471,351557 123544,351243 123090,351068 C 122703,350920 121800,351736 121800,352235 C 121800,352732 122191,352683 122850,352103 z M 686703,350876 C 686490,350551 686227,350397 685953,350438 C 685304,350534 685315,350931 685972,351160 C 686297,351273 686635,351576 686724,351833 L 686885,352300 L 686958,351838 C 686998,351585 686883,351152 686703,350876 z M 689600,350200 C 689600,350090 689510,350000 689400,350000 C 689290,350000 689200,350090 689200,350200 C 689200,350310 689290,350400 689400,350400 C 689510,350400 689600,350310 689600,350200 z M 214200,348312 C 214200,347933 213914,347769 213518,347921 C 213011,348115 213141,348600 213700,348600 C 214002,348600 214200,348486 214200,348312 z M 224600,345112 C 224600,344733 224259,344534 223868,344685 C 223615,344782 223602,344862 223802,345102 C 224117,345482 224600,345488 224600,345112 z M 447733,342667 C 447660,342593 447600,342653 447600,342800 C 447600,342947 447660,343007 447733,342933 C 447807,342860 447807,342740 447733,342667 z M 211362,339595 C 212446,339072 212425,338800 211300,338800 C 210433,338800 210400,338822 210400,339400 C 210400,340113 210324,340097 211362,339595 z M 141800,338550 C 142099,338180 142371,338099 143332,338088 C 144111,338080 144686,337954 145059,337709 C 145711,337281 145704,336693 145047,336714 C 144801,336722 143831,336745 142891,336764 C 141304,336797 141146,336839 140677,337350 C 140399,337653 139996,338085 139781,338312 C 139279,338841 139457,339000 140551,339000 C 141227,339000 141522,338894 141800,338550 z M 153234,337869 C 154037,337143 153321,336358 152150,336680 C 151494,336861 150526,337719 150686,337978 C 150906,338333 152812,338252 153234,337869 z M 127991,333911 C 128660,333104 127467,331882 126510,332395 C 126050,332641 125952,332625 125536,332234 C 125282,331995 124887,331800 124659,331800 C 124430,331800 124191,331665 124128,331500 C 123980,331114 123400,331108 123400,331493 C 123400,331654 123580,331882 123800,332000 C 124033,332124 124200,332419 124200,332703 C 124200,333071 124337,333226 124750,333327 C 125053,333401 125614,333628 125997,333831 C 126833,334273 127662,334307 127991,333911 z M 214294,334010 C 214358,333906 214229,333722 214006,333603 C 213548,333358 213476,332809 213850,332421 C 214052,332211 214024,332175 213700,332232 C 213212,332319 213001,333751 213436,334027 C 213788,334250 214150,334243 214294,334010 z M 447237,325397 C 448008,325392 448382,325030 447916,324740 C 447705,324608 447199,324208 446792,323850 C 446385,323493 445865,323200 445638,323200 C 445410,323200 445168,323110 445100,323000 C 445032,322890 444802,322800 444588,322800 C 443836,322800 444121,323667 445100,324357 C 445669,324759 446000,325143 446000,325403 C 446000,325747 446063,325781 446387,325607 C 446600,325493 446982,325399 447237,325397 z M 437152,324023 C 437643,323358 437565,323200 436749,323200 C 436164,323200 435420,323837 435407,324350 C 435393,324879 436700,324634 437152,324023 z M 460684,324479 C 461044,324340 461119,323297 460784,323090 C 460508,322920 459324,324116 459495,324393 C 459638,324623 460200,324664 460684,324479 z M 451388,323423 C 451499,323216 451826,322987 452115,322914 C 453576,322547 454154,321593 453210,321105 C 451855,320405 449800,321017 449800,322122 C 449800,323216 450981,324184 451388,323423 z M 96533,315067 C 96460,314993 96400,315053 96400,315200 C 96400,315347 96460,315407 96533,315333 C 96607,315260 96607,315140 96533,315067 z M 98300,314800 C 98368,314690 98233,314600 98000,314600 C 97767,314600 97632,314690 97700,314800 C 97768,314910 97903,315000 98000,315000 C 98097,315000 98232,314910 98300,314800 z M 175620,305579 C 176260,304894 176297,304755 175992,304185 C 175736,303706 174400,304841 174400,305537 C 174400,306391 174847,306406 175620,305579 z M 121561,295450 C 121527,294928 121410,294500 121300,294500 C 121190,294500 121073,294928 121039,295450 C 120990,296215 121041,296400 121300,296400 C 121559,296400 121610,296215 121561,295450 z M 200174,294859 C 202784,293415 203313,292726 202426,291924 C 201795,291353 198525,291400 197539,291994 C 196638,292537 194269,292505 193645,291941 C 192947,291311 190800,291944 190800,292780 C 190800,293313 191181,293558 192414,293817 C 193011,293942 193648,294175 193829,294335 C 194010,294494 194757,294833 195490,295089 C 196222,295345 196878,295611 196947,295680 C 197240,295973 198944,295540 200174,294859 z M 465763,290814 C 465825,289949 464865,288600 464189,288600 C 464085,288600 464000,288250 464000,287821 C 464000,287031 464223,286800 464985,286800 C 465179,286800 465501,286620 465700,286400 C 465899,286180 466253,286000 466486,286000 C 466965,286000 467769,285501 468161,284960 C 468305,284762 468627,284600 468876,284600 C 469126,284600 469542,284375 469800,284100 C 470058,283825 470437,283600 470641,283600 C 471267,283600 473004,281759 472868,281240 C 472805,280998 472687,280800 472606,280800 C 472525,280800 472221,280580 471931,280311 L 471403,279822 L 466883,279894 C 462629,279962 462335,279991 461918,280383 C 461674,280612 461265,280800 461009,280800 C 460753,280800 460429,280958 460288,281150 C 460076,281439 459714,281500 458220,281500 C 456568,281500 456380,281540 456093,281950 C 455684,282534 455054,282523 454583,281924 C 454264,281518 454081,281463 453342,281546 C 452571,281633 452436,281585 452126,281112 C 451868,280718 451673,280613 451372,280709 C 451102,280795 450815,280696 450515,280414 C 449814,279756 446056,279644 445797,280274 C 445700,280508 445304,280925 444916,281200 C 444046,281817 443854,283487 444600,283954 C 444888,284133 445000,284420 445000,284976 C 445000,285753 448401,289575 450049,290650 C 450798,291138 451926,291112 452200,290600 C 452327,290362 452619,290200 452920,290200 C 453403,290200 454029,289633 454800,288495 C 455349,287685 456418,286943 457255,286790 C 458640,286537 460086,288582 459100,289400 C 458601,289814 458742,290200 459393,290200 C 459781,290200 460060,290338 460200,290600 C 460367,290912 460622,291001 461357,291004 C 461990,291007 462464,291139 462800,291405 C 463194,291717 463554,291790 464500,291751 L 465700,291700 L 465763,290814 z M 495094,291207 C 495440,290824 495418,290783 494319,289727 C 491433,286954 491346,286423 493446,284396 C 494242,283628 494962,283000 495046,283000 C 495131,283000 495200,282506 495200,281902 C 495200,281020 495279,280754 495600,280554 C 495936,280344 496000,280087 496000,278960 C 496000,277649 496019,277598 496800,276876 C 497694,276048 497788,275632 497200,275100 C 496687,274636 496674,273681 497177,273412 C 497384,273301 497615,272966 497690,272668 C 497765,272369 497970,272020 498146,271891 C 498595,271562 498321,271000 497711,271000 C 497435,271000 496915,270820 496555,270601 C 495650,270049 494095,270049 493800,270600 C 493682,270820 493495,271000 493385,271000 C 492971,271000 490685,272181 490300,272594 C 490080,272830 489698,273230 489450,273484 C 488893,274055 488876,274519 489400,274800 C 489692,274956 489800,275219 489800,275775 C 489800,276392 489894,276579 490300,276764 C 490910,277042 491061,278912 490491,279131 C 490322,279196 490015,279576 489810,279975 C 489605,280374 489246,280880 489013,281100 C 488780,281320 488344,281763 488045,282084 C 487745,282404 487298,282848 487050,283070 C 486802,283291 486600,283579 486600,283709 C 486600,283839 486420,284175 486200,284455 C 485980,284734 485800,285230 485800,285557 C 485800,285947 485649,286251 485362,286442 C 484778,286830 486476,288600 487431,288600 C 487802,288600 488097,288763 488308,289084 C 488482,289350 489014,289750 489489,289974 C 489965,290197 490654,290655 491021,290990 C 491880,291775 494456,291911 495094,291207 z M 201560,289160 C 201972,288748 201826,288198 201129,287537 C 200017,286482 199468,285013 199990,284490 C 200932,283547 199806,281064 198557,281329 C 195888,281895 197980,289388 200810,289398 C 201091,289399 201428,289292 201560,289160 z M 208350,288967 C 209088,288750 209347,288767 210309,289094 C 212433,289816 213638,288408 211786,287369 C 211271,287080 210691,286497 210277,285850 C 209480,284605 209035,284516 207976,285389 C 206532,286579 205905,289757 207200,289319 C 207365,289263 207883,289105 208350,288967 z M 514119,288679 L 514500,287957 L 514000,287631 C 513725,287452 513261,287056 512970,286753 C 512301,286056 510412,285937 509961,286563 C 509818,286763 509543,286985 509350,287057 C 508917,287218 508896,287573 509310,287731 C 509487,287800 509745,287690 509915,287475 C 510195,287120 510265,287160 511251,288250 C 512587,289727 513492,289862 514119,288679 z M 212360,282160 C 212731,281789 212658,281641 211850,281135 C 210343,280189 209114,280295 209238,281359 C 209342,282250 211672,282848 212360,282160 z M 445760,279067 C 445848,278470 445340,278168 444365,278238 C 443267,278317 443193,278801 444234,279094 C 444637,279207 445037,279369 445121,279454 C 445368,279701 445695,279503 445760,279067 z M 509600,247633 C 509600,247373 509362,247200 509169,247319 C 508962,247447 509140,247800 509412,247800 C 509515,247800 509600,247725 509600,247633 z M 455320,191520 C 455379,191365 455736,191181 456114,191111 C 456962,190951 457141,189797 456381,189390 C 456032,189203 455984,189048 456093,188468 C 456246,187654 455962,187200 455300,187200 C 455052,187200 454706,186998 454531,186750 L 454214,186300 L 453607,186953 C 452582,188056 452710,189481 453950,190771 C 454985,191848 455158,191942 455320,191520 z M 229400,101207 C 229400,100366 229146,100104 228200,99970 C 227768,99910 227709,99968 227764,100400 C 227799,100675 227835,101148 227843,101450 C 227871,102496 229400,102257 229400,101207 z" + id="path5770" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 348128,366700 C 348063,366531 347765,366400 347446,366400 C 346454,366400 345920,365051 346750,364642 C 347429,364307 350385,364598 350611,365021 C 350780,365336 351044,365400 352167,365400 C 354053,365400 354501,365858 353326,366584 C 352452,367124 348326,367216 348128,366700 z" + id="path5772" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 507933,365909 C 507701,365733 507313,365672 506878,365742 C 506391,365821 506081,365755 505815,365513 C 505459,365191 505392,365196 504612,365594 C 504158,365826 503685,365952 503560,365875 C 503436,365799 502745,365715 502025,365689 C 500883,365649 500663,365576 500301,365121 C 500008,364754 499695,364600 499242,364600 C 498428,364600 498389,364142 499137,363361 C 499862,362604 501049,362861 501950,363969 C 502168,364236 502200,364219 502200,363838 C 502200,363462 502310,363400 502987,363400 C 503420,363400 504023,363305 504326,363190 C 505268,362832 507590,362784 508219,363110 C 509020,363524 509383,363471 509598,362906 C 509966,361936 511410,362177 513025,363477 C 513313,363710 513831,364053 514175,364241 C 515670,365056 514635,365619 511604,365639 C 510196,365648 509354,365743 509057,365927 C 508513,366262 508397,366261 507933,365909 z" + id="path5774" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 521634,365425 C 521483,365329 521396,365007 521434,364678 C 521524,363889 522297,363756 522624,364474 C 523026,365354 522428,365928 521634,365425 z" + id="path5776" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 488824,365050 C 488679,364792 488263,364734 486573,364741 C 484110,364751 483469,364347 484177,363230 C 484376,362917 486704,362787 488347,362998 C 489283,363118 489441,363082 489840,362658 C 490397,362065 491075,362124 491167,362773 C 491226,363194 491312,363234 491927,363134 C 492695,363010 493030,363382 492609,363889 C 492425,364111 492445,364282 492697,364668 C 493120,365313 493033,365346 490851,365357 C 489364,365365 488966,365304 488824,365050 z" + id="path5778" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 587016,365119 C 586828,364892 586674,364856 586503,364998 C 586258,365201 584677,365144 583437,364888 C 583018,364801 582408,364380 581780,363742 L 580787,362732 L 581440,362058 C 582037,361442 582115,361414 582344,361727 C 582700,362214 585195,362243 585728,361767 C 585933,361584 586460,361369 586900,361291 C 587340,361212 587792,361075 587905,360987 C 588456,360554 590137,360549 590537,360978 L 590930,361400 L 592161,360900 C 593465,360371 594114,360288 594594,360592 C 594795,360719 595087,360655 595518,360389 C 596316,359896 596258,359887 597093,360621 C 598721,362050 596755,363964 594851,362803 C 594318,362478 594114,362448 593707,362633 C 593327,362807 593140,362799 592901,362601 C 592486,362256 592372,362412 592251,363487 C 592124,364616 591992,364724 590393,365004 C 587866,365448 587305,365467 587016,365119 z" + id="path5780" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 426597,363794 C 426434,363691 426108,363605 425873,363603 C 425638,363601 425188,363466 424873,363301 C 424558,363137 424119,363002 423897,363001 C 423675,363001 423169,362826 422773,362613 C 422129,362268 422006,362258 421633,362520 C 421327,362734 421118,362757 420857,362606 C 420661,362493 420251,362312 419946,362204 C 419642,362096 419312,361794 419212,361533 C 418971,360899 416371,361349 415554,362166 C 415115,362605 413937,362438 413196,361831 C 412367,361154 411028,361151 410851,361825 C 410686,362458 409796,362271 408835,361401 C 407793,360459 407731,359742 408682,359634 C 409002,359597 409462,359438 409704,359279 C 410092,359025 410175,359029 410414,359316 C 410932,359941 411570,360034 412190,359576 C 412652,359234 412869,359190 413330,359344 C 413906,359537 415416,358317 416087,357119 C 416491,356396 420730,356482 421426,357228 C 421764,357590 422163,357800 422511,357800 C 422814,357800 423357,358025 423718,358300 C 424078,358575 424462,358800 424571,358800 C 424680,358800 425037,359025 425365,359301 C 425692,359577 426239,359858 426580,359926 C 427279,360066 427405,360508 426800,360700 C 426263,360870 426296,361088 426900,361364 C 427175,361489 427400,361728 427400,361896 C 427400,362342 427952,362267 428100,361800 C 428241,361355 428792,361272 429160,361640 C 429347,361827 429453,361827 429640,361640 C 429772,361508 430209,361400 430610,361400 C 431012,361400 431631,361299 431986,361175 C 432449,361014 432764,361011 433100,361164 C 433458,361327 433623,361313 433795,361106 C 433985,360877 434106,360879 434560,361116 C 434857,361271 435254,361398 435443,361399 C 435632,361399 435882,361580 436000,361800 C 436284,362331 436645,362304 437364,361700 C 438025,361144 438733,361061 439297,361473 C 439910,361921 439369,362994 438527,363001 C 438182,363003 437450,363051 436900,363107 C 435243,363276 433250,363056 432761,362651 C 432209,362192 431064,362278 430625,362810 L 430221,363300 L 429379,362826 C 428560,362365 428529,362362 428219,362727 C 427474,363602 426896,363983 426597,363794 z M 417400,357800 C 417400,357690 417265,357600 417100,357600 C 416935,357600 416800,357690 416800,357800 C 416800,357910 416935,358000 417100,358000 C 417265,358000 417400,357910 417400,357800 z" + id="path5782" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 599418,360757 C 597679,359342 597936,358900 600500,358900 C 603541,358900 604532,359565 603503,360913 C 602667,362010 600874,361942 599418,360757 z" + id="path5784" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 428540,360474 C 428267,360200 428406,359973 428808,360036 C 429032,360071 429217,360190 429218,360300 C 429222,360543 428735,360668 428540,360474 z" + id="path5786" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 430056,359750 C 429196,358639 430569,356741 431768,357383 C 432377,357709 432591,357650 432800,357100 C 433049,356445 433715,356435 433878,357084 C 434006,357595 433860,358200 433608,358200 C 433526,358200 433216,358425 432919,358700 C 432622,358975 432269,359200 432134,359200 C 431999,359200 431735,359380 431546,359600 C 431162,360049 430350,360130 430056,359750 z" + id="path5788" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 526718,356645 C 526398,356602 525937,356437 525693,356277 C 525450,356118 524767,355931 524175,355862 C 523584,355793 522920,355623 522700,355484 C 522418,355305 520999,355210 517877,355162 C 515103,355119 513350,355013 513177,354876 C 513025,354757 512090,354550 511100,354416 C 509903,354254 509166,354050 508900,353807 C 508680,353606 507960,353289 507300,353103 C 505860,352696 504291,351921 503584,351267 C 503300,351005 502589,350615 502004,350402 C 500549,349870 498820,348804 498430,348200 C 497901,347381 496969,346585 496160,346261 C 494816,345723 495939,343741 497575,343764 C 498050,343770 498472,343654 498620,343476 C 499281,342679 502176,342448 503612,343077 C 503800,343159 504228,343007 504691,342693 C 505380,342226 505489,342204 505765,342479 C 506178,342893 505788,343800 505197,343800 C 504970,343800 504316,344255 503742,344811 L 502700,345822 L 503700,346707 C 504250,347193 504845,347594 505023,347596 C 505201,347598 505561,347761 505823,347958 C 506085,348155 506550,348424 506856,348556 C 507161,348688 507463,348932 507527,349098 C 507591,349264 507844,349400 508090,349400 C 508337,349400 508701,349580 508900,349800 C 509099,350020 509432,350200 509639,350200 C 509847,350200 510260,350376 510558,350591 C 510856,350806 511818,351167 512697,351393 C 513808,351680 514439,351962 514773,352322 C 515213,352796 515342,352828 516324,352706 C 517538,352554 518200,352696 518200,353107 C 518200,353336 518594,353371 520348,353294 C 522534,353199 523698,353392 524121,353921 C 524289,354131 524765,354178 526097,354115 C 527737,354037 528800,354236 528800,354620 C 528800,354705 529199,354835 529687,354908 C 530633,355050 530873,355339 530681,356104 C 530525,356728 528942,356944 526718,356645 z" + id="path5790" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 621486,355534 C 621243,354901 621778,354151 622407,354244 C 622742,354293 623098,354223 623211,354087 C 623467,353779 624134,353939 624290,354345 C 624477,354834 624033,355197 623401,355070 C 622963,354983 622787,355051 622611,355379 C 622361,355847 621644,355947 621486,355534 z" + id="path5792" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 623519,352821 C 623160,352425 623101,351885 623396,351703 C 623746,351486 624400,351997 624400,352486 C 624400,353093 623928,353273 623519,352821 z" + id="path5794" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 272400,342800 C 272400,342690 272490,342600 272600,342600 C 272710,342600 272800,342690 272800,342800 C 272800,342910 272710,343000 272600,343000 C 272490,343000 272400,342910 272400,342800 z" + id="path5796" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 274592,342690 C 274405,342465 274421,342379 274668,342285 C 275005,342155 275400,342320 275400,342590 C 275400,342905 274829,342976 274592,342690 z" + id="path5798" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 268850,342206 C 268237,341943 268269,341834 269281,340731 L 270163,339771 L 270932,340257 C 271783,340794 272383,341697 272086,341994 C 271810,342269 269370,342428 268850,342206 z" + id="path5800" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 348848,333293 C 348489,332651 347211,332363 346657,332798 C 346190,333165 345396,333086 344700,332603 C 344590,332527 343825,332482 343000,332504 C 342045,332530 341344,332448 341070,332281 C 340834,332136 339819,331955 338814,331880 C 336921,331737 336480,331529 337103,331073 C 337408,330850 337430,330726 337239,330306 C 336911,329585 337133,329200 337877,329200 C 338335,329200 338718,328999 339254,328479 C 339987,327767 340013,327759 341448,327829 C 342752,327893 342947,327853 343365,327435 C 343929,326871 345316,326976 345774,327617 C 345937,327844 346286,328000 346631,328000 C 346952,328000 347438,328147 347711,328326 C 348053,328550 348457,328618 349005,328545 C 349808,328437 350171,328506 352676,329241 C 354022,329636 355402,330310 355398,330570 C 355390,330943 353778,332373 353229,332494 C 352883,332570 352479,332805 352331,333016 C 352122,333314 351841,333395 351081,333375 C 350541,333361 349862,333414 349571,333494 C 349174,333602 348993,333552 348848,333293 z" + id="path5802" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 206048,326168 C 205406,325526 206090,324400 207123,324400 C 207889,324400 209062,325425 208953,326000 C 208878,326395 206418,326538 206048,326168 z" + id="path5804" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 28872,320700 C 28694,320235 28945,319800 29394,319800 C 29851,319800 29950,320370 29560,320760 C 29238,321082 29011,321062 28872,320700 z" + id="path5806" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 373639,316030 C 373342,315717 372932,315401 372728,315328 C 372445,315227 372377,315050 372444,314589 C 372493,314255 372458,313936 372367,313879 C 372170,313758 372168,312039 372364,311586 C 372616,311004 375127,308899 376306,308281 C 378065,307360 378393,306001 376896,305833 C 376201,305755 375681,305337 375254,304510 C 375086,304185 374825,303796 374674,303645 C 374233,303205 374344,302321 374900,301837 C 375503,301313 375529,300979 375005,300505 C 374612,300149 374612,300145 375019,299574 C 375494,298906 376262,298813 376855,299350 C 377246,299704 378112,299781 382700,299871 C 385537,299927 387600,301031 387600,302495 C 387600,302700 387743,303027 387918,303220 C 388363,303712 388114,304309 387343,304597 C 386142,305046 385301,305566 385073,306000 C 384772,306577 383576,307799 383311,307803 C 383066,307805 381380,309686 381026,310350 C 380894,310598 380496,310923 380143,311073 C 378844,311623 378633,312108 379365,312864 C 380508,314043 380169,315200 378679,315200 C 378011,315200 377666,315344 377000,315900 C 375863,316850 374465,316904 373639,316030 z" + id="path5808" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 55350,315184 C 54964,314959 54880,314298 55211,314093 C 55583,313863 56400,314187 56400,314564 C 56400,315239 55926,315519 55350,315184 z" + id="path5810" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 366475,309203 C 365829,308544 365125,308004 364911,308003 C 363820,307995 363037,306336 363750,305542 C 364085,305169 364081,305140 363650,304852 C 363403,304686 363200,304399 363200,304214 C 363200,304028 363068,303702 362906,303488 C 362466,302907 362536,302511 363204,301795 C 363923,301026 365265,301022 365774,301787 C 365947,302047 366265,302200 366631,302200 C 366952,302200 367447,302353 367732,302539 C 368017,302726 368549,302858 368915,302834 C 369422,302799 369636,302893 369814,303226 C 370020,303610 370398,303999 371360,304814 C 371541,304967 371580,305300 371488,305908 C 371381,306622 371435,306881 371779,307318 C 372526,308268 371870,309800 370716,309800 C 370459,309800 369926,309935 369531,310100 C 368216,310650 367765,310517 366475,309203 z" + id="path5812" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 27504,306804 C 27306,306586 26835,306350 26457,306279 C 25708,306138 25376,305668 25821,305378 C 26307,305061 28752,305736 29035,306265 C 29509,307152 28227,307603 27504,306804 z" + id="path5814" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 100933,307067 C 100376,306509 101674,304522 102335,304920 C 102911,305268 102930,306486 102366,306881 C 101899,307209 101170,307303 100933,307067 z" + id="path5816" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 5036,302550 C 5071,302303 5235,302100 5400,302100 C 5565,302100 5729,302303 5764,302550 C 5813,302896 5729,303000 5400,303000 C 5071,303000 4987,302896 5036,302550 z" + id="path5818" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 686888,288516 C 686569,288282 686497,287971 686480,286766 C 686454,284827 686458,284845 686017,284705 C 685806,284638 685542,284323 685431,284004 C 685270,283540 685075,283398 684465,283296 C 683238,283092 683200,283060 683200,282228 C 683200,281018 684137,280814 685169,281800 C 685618,282229 685993,282400 686486,282400 C 686866,282400 687232,282490 687300,282600 C 687503,282929 688113,282827 688500,282400 C 689007,281840 689903,281886 690437,282500 C 690676,282775 690968,283002 691086,283003 C 691204,283005 691512,283230 691771,283503 C 692290,284051 692622,284115 693169,283773 C 693688,283449 694723,283966 694639,284508 C 694550,285074 693847,285600 693179,285600 C 691821,285600 690170,286409 689042,287628 C 687916,288844 687545,288997 686888,288516 z" + id="path5820" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 403164,282500 C 402889,281897 403213,281000 403706,281000 C 404132,281000 405200,281566 405200,281792 C 405200,283002 403639,283544 403164,282500 z" + id="path5822" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 684210,279146 C 683870,278974 683633,278591 683438,277899 C 682487,274517 681877,273367 680584,272516 C 680153,272232 679461,271777 679047,271505 C 678465,271123 678131,271036 677585,271125 C 676758,271259 675816,270605 675295,269534 C 674479,267858 674417,267840 669328,267816 C 668904,267814 668454,267732 668328,267634 C 668203,267536 667832,267391 667503,267312 C 665333,266792 663597,263397 665673,263734 C 666269,263831 666410,263760 666897,263122 C 667421,262435 668119,262183 668482,262550 C 668563,262633 669141,262790 669765,262900 C 670801,263083 670932,263165 671266,263850 C 671756,264851 672203,264813 673291,263677 L 674176,262753 L 675427,264027 L 676678,265300 L 677933,265259 C 678716,265233 679397,265327 679744,265507 C 680050,265667 680397,265798 680515,265799 C 680633,265799 680942,266025 681200,266300 C 681458,266575 681823,266800 682010,266800 C 682198,266800 682468,266941 682611,267113 C 682762,267296 683043,267382 683287,267321 C 683938,267158 684800,268170 684800,269098 C 684800,269273 684995,269795 685233,270258 C 685471,270721 685685,271505 685709,272000 C 685750,272862 685967,273553 686400,274200 C 686510,274365 686690,274725 686800,275000 C 686909,275275 687110,275656 687247,275847 C 687447,276129 687431,276317 687161,276847 C 686977,277206 686773,277695 686705,277934 C 686347,279208 685319,279707 684210,279146 z" + id="path5824" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 402714,278886 C 402287,278459 402314,277023 402760,276444 C 403296,275747 404207,275756 404448,276461 C 404981,278014 403672,279844 402714,278886 z" + id="path5826" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 434118,274138 C 433593,273754 433885,273400 434726,273400 C 435339,273400 435420,273457 435364,273850 C 435287,274389 434660,274534 434118,274138 z" + id="path5828" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 412750,273439 C 411866,273382 411800,273341 411803,272839 C 411807,272089 411945,271943 413235,271318 C 413859,271016 414419,270640 414478,270484 C 414591,270191 415691,270094 416289,270323 C 417252,270693 417909,273380 417050,273435 C 416058,273499 413719,273501 412750,273439 z" + id="path5830" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 430967,272508 C 430648,271807 431193,271000 431987,271000 C 432638,271000 433600,271964 433600,272615 C 433600,273273 431273,273179 430967,272508 z" + id="path5832" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 454917,266367 C 454464,265915 454388,265732 454574,265546 C 454950,265170 455885,265782 455963,266456 C 456045,267159 455680,267128 454917,266367 z" + id="path5834" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 663300,263222 C 662457,263093 662115,262298 662530,261431 C 662617,261249 662691,260700 662694,260211 C 662708,258083 664603,258606 665339,260940 C 665651,261931 665651,262048 665340,262701 C 664986,263442 664899,263465 663300,263222 z" + id="path5836" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 641991,244650 C 641527,244128 641027,243418 640881,243074 C 640735,242730 640477,242395 640307,242331 C 639743,242114 640228,240840 641404,239450 C 641967,238785 644200,240474 644200,241564 C 644200,241838 644425,242357 644700,242718 C 646233,244727 643677,246550 641991,244650 z" + id="path5838" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 210066,241308 C 208341,240558 209769,238628 212075,238594 C 212309,238590 212675,238455 212888,238294 C 213102,238132 213572,238000 213933,238000 C 214295,238000 214885,237820 215245,237601 C 215605,237381 216021,237201 216169,237201 C 216316,237200 216984,236705 217653,236100 C 218321,235495 219010,234997 219184,234993 C 219358,234989 219759,234774 220075,234515 C 220529,234144 220812,234066 221412,234147 C 221993,234225 222303,234148 222714,233825 C 223720,233033 224414,233504 224392,234963 C 224378,235872 222203,237624 221131,237590 C 220331,237564 219177,238033 217985,238868 C 217725,239050 217365,239200 217186,239200 C 217008,239200 216699,239380 216500,239600 C 216301,239820 215896,240000 215600,240000 C 215304,240000 214899,240180 214700,240400 C 214501,240620 214104,240800 213817,240800 C 213513,240800 213192,240966 213046,241200 C 212743,241686 211074,241747 210066,241308 z" + id="path5840" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 205853,240656 C 205101,240562 204600,239960 204600,239149 C 204600,238312 205078,238271 206500,238985 C 209077,240280 208790,241021 205853,240656 z" + id="path5842" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 51801,234101 C 51484,233719 52027,232800 52570,232800 C 53065,232800 53879,233704 53732,234090 C 53574,234501 52139,234509 51801,234101 z" + id="path5844" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 231685,234117 C 231364,233892 231114,233879 230471,234050 C 228986,234447 228581,233654 229323,231801 C 229989,230136 232951,229406 234936,230418 C 235858,230888 236266,230897 236931,230461 C 237422,230139 237463,230141 237724,230499 C 238295,231280 237795,232600 236928,232600 C 236680,232600 236173,232825 235800,233100 C 235427,233375 235041,233600 234943,233600 C 234844,233600 234534,233780 234255,234000 C 233651,234475 232284,234537 231685,234117 z" + id="path5846" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 642865,231332 C 642005,230911 641600,230330 641600,229515 C 641600,229259 641457,228930 641283,228786 C 641066,228606 641002,228339 641081,227945 C 641165,227524 641068,227197 640722,226734 C 639813,225518 639837,224319 640793,223186 C 641592,222237 641616,222168 641633,220694 C 641646,219619 641740,219089 641956,218872 C 643141,217688 644703,218306 644160,219745 C 643719,220913 644182,221070 645732,220277 C 646458,219904 647194,219600 647365,219600 C 647537,219600 647923,219365 648223,219078 C 648898,218431 649200,218592 649200,219598 C 649200,220455 648909,220740 647148,221605 C 646624,221862 646052,222232 645876,222427 C 645649,222677 645385,222747 644978,222666 C 644379,222546 644231,222751 644630,223150 C 644803,223323 644778,223504 644530,223883 C 644024,224655 644123,225101 645100,226443 C 646282,228067 646324,228887 645280,229960 C 644884,230367 644432,230948 644275,231250 C 643949,231878 643979,231876 642865,231332 z" + id="path5848" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 218682,230126 C 218532,229735 218737,229400 219126,229400 C 219322,229400 219405,229552 219364,229834 C 219286,230362 218845,230551 218682,230126 z" + id="path5850" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 498800,218631 C 498800,218231 499389,217600 499762,217600 C 500036,217600 500294,218487 500107,218789 C 499869,219173 498800,219044 498800,218631 z" + id="path5852" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 649912,216545 C 650110,213843 648921,213585 647179,215951 C 646497,216877 645852,217001 645266,216319 C 644677,215634 644625,214405 645172,214064 C 645392,213926 645600,213480 645682,212968 C 646008,210932 648376,210613 649232,212490 C 649451,212972 650480,213600 651049,213600 C 651704,213600 652059,214405 652329,216503 C 652475,217630 651772,218400 650597,218400 L 649776,218400 L 649912,216545 z" + id="path5854" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 652210,212350 C 652097,212213 651545,211538 650985,210850 L 649966,209600 L 648592,209728 C 646444,209928 645600,209423 645600,207938 C 645600,206985 646121,206558 646584,207131 C 647473,208228 648417,207954 648919,206452 C 649818,203760 651428,202983 652548,204700 C 652998,205389 653450,205807 654004,206043 L 654808,206387 L 654774,208293 C 654750,209657 654661,210267 654459,210434 C 654304,210563 654046,210981 653886,211364 C 653439,212435 652658,212894 652210,212350 z" + id="path5856" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 555062,211047 C 554374,210192 554145,207629 554699,207000 C 554844,206835 555062,206328 555183,205873 C 555546,204509 557270,203809 557805,204809 C 557939,205060 558357,205548 558734,205892 C 559373,206478 559508,207200 558979,207200 C 558880,207200 558800,207502 558800,207872 C 558800,208259 558588,208857 558300,209281 C 558025,209686 557800,210156 557800,210324 C 557800,211633 555929,212126 555062,211047 z" + id="path5858" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 632589,205750 C 632322,205393 631877,204775 631601,204378 C 630972,203472 629825,202472 629300,202371 C 629076,202328 628746,201966 628549,201547 C 628310,201040 628064,200800 627785,200800 C 627106,200800 626640,200439 626500,199802 C 626428,199471 626289,199200 626191,199200 C 626094,199200 625706,198930 625331,198600 C 624907,198228 624427,198000 624066,198000 C 623027,198000 621729,197190 621502,196400 C 621145,195163 621094,195135 619443,195260 C 617340,195419 615455,192655 617011,191693 C 617127,191622 617446,191054 617720,190432 C 617994,189809 618439,189094 618709,188842 C 619028,188545 619200,188164 619200,187759 C 619200,186932 620094,185430 620657,185310 C 620901,185258 621616,185116 622247,184994 C 622877,184873 623442,184694 623502,184597 C 623562,184500 624364,184473 625283,184538 C 626823,184647 626985,184622 627322,184228 C 627524,183993 627881,183800 628117,183800 C 628352,183800 628876,183575 629281,183300 C 630488,182481 632600,183387 632600,184724 C 632600,184883 632743,185233 632919,185500 C 633146,185848 633200,186210 633106,186767 C 632982,187500 633024,187589 633815,188266 C 634996,189277 635400,190024 635400,191197 C 635400,192296 635779,192812 636950,193305 C 637760,193647 637758,193718 636901,195140 C 636516,195778 636201,196421 636201,196568 C 636200,196716 636020,197066 635800,197345 C 635078,198263 635256,199203 636350,200247 C 639230,202993 639392,203536 637484,204046 C 636815,204225 636393,204504 635958,205053 C 634779,206541 633395,206828 632589,205750 z" + id="path5860" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 588070,203094 C 587978,202855 588075,202623 588367,202387 C 588605,202194 588800,201900 588800,201734 C 588800,201568 589321,200907 589958,200266 C 590595,199625 591966,198155 593004,197000 C 594042,195845 594947,194855 595016,194800 C 595403,194489 595617,193694 595500,193002 C 595374,192253 595395,192219 596385,191571 C 597157,191066 597428,190754 597519,190269 C 597585,189919 597890,189407 598198,189133 C 598506,188859 598868,188289 599003,187867 C 599139,187445 599408,186920 599602,186700 C 599795,186480 600012,186107 600084,185871 C 600287,185199 604180,181436 604817,181296 C 605169,181219 605670,180787 606193,180109 C 607025,179030 607413,178810 608500,178800 C 609394,178791 609568,178591 609637,177496 C 609700,176505 609704,176500 610439,176439 C 610995,176392 611336,176198 611812,175655 L 612446,174934 L 614952,174872 C 616781,174826 617545,174732 617779,174522 C 617970,174350 618318,174276 618637,174338 C 618936,174396 619461,174299 619818,174121 C 620172,173944 620653,173800 620886,173800 C 621120,173800 621518,173655 621770,173478 C 622162,173204 622358,173192 623092,173398 C 623702,173569 624067,173578 624344,173430 C 624738,173219 628530,173063 628717,173250 C 629486,174019 628430,175081 627063,174914 C 626325,174823 626219,174861 626163,175235 C 626128,175468 625965,175727 625800,175810 C 625635,175893 624895,176244 624156,176590 C 623417,176936 622759,177305 622694,177410 C 622449,177805 620782,177620 620203,177133 C 619308,176380 618073,176534 616860,177550 C 615985,178282 615788,178359 614739,178371 C 613306,178388 612264,178571 611560,178927 C 611263,179077 610838,179200 610615,179200 C 610263,179200 610235,179267 610405,179713 C 610512,179995 610600,180794 610600,181489 C 610600,182395 610689,182825 610916,183013 C 611102,183168 611195,183468 611143,183743 C 611077,184088 611204,184318 611627,184619 C 612480,185226 612282,186593 611247,187244 C 610946,187434 610557,187694 610381,187823 C 610126,188012 609941,187968 609447,187603 C 608739,187080 608476,187200 607273,188600 C 606250,189790 606000,190263 606000,191005 C 606000,191910 605039,193268 604076,193725 C 603695,193906 603140,194311 602842,194627 C 602545,194942 602104,195200 601862,195200 C 601620,195200 601305,195368 601161,195573 C 601018,195778 600623,196007 600285,196081 C 599947,196156 599223,196640 598677,197158 C 597574,198204 596198,199200 595856,199200 C 595582,199200 594031,200930 593739,201561 C 593440,202207 591885,203210 591237,203175 C 590942,203159 590139,203214 589453,203298 C 588358,203432 588190,203408 588070,203094 z" + id="path5862" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 657263,196648 C 656385,196072 655514,190041 656225,189469 C 656925,188907 657368,188958 657718,189640 C 657904,190003 658120,190345 658198,190400 C 658614,190693 658807,191413 658582,191834 C 658381,192210 658420,192319 658875,192651 C 659486,193096 659512,193286 659077,194100 C 658901,194430 658699,195150 658628,195700 C 658497,196724 657953,197101 657263,196648 z" + id="path5864" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 649336,194591 C 649030,194153 645708,193979 643961,194309 C 642028,194674 639428,192852 640440,191840 C 640790,191490 641133,191545 641575,192019 C 641942,192413 642205,192442 645933,192501 C 648115,192535 650008,192572 650141,192582 C 650273,192592 650441,192916 650514,193302 C 650586,193688 650725,194054 650823,194114 C 650920,194174 651000,194398 651000,194612 C 651000,195174 649733,195158 649336,194591 z" + id="path5866" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 189327,191385 C 188683,190879 188652,190326 189245,189911 C 190170,189263 191000,189636 191000,190700 C 191000,191815 190259,192119 189327,191385 z" + id="path5868" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 662650,190868 C 661852,190545 664040,187800 665095,187800 C 665910,187800 667298,186246 667312,185319 C 667330,184108 668254,182708 668830,183016 C 669142,183183 669379,183183 669748,183014 C 670022,182890 670423,182844 670640,182913 C 670897,182994 671192,182889 671488,182611 C 671738,182376 672293,182131 672721,182065 C 673150,181999 673647,181819 673826,181663 C 674029,181488 674345,181429 674662,181508 C 675246,181655 677015,180855 677686,180139 C 677914,179897 678325,179519 678600,179299 C 680152,178060 680514,177017 679799,175845 C 679040,174600 679632,173798 681095,174089 C 681985,174267 683553,173620 684583,172650 C 685079,172183 685579,171792 685693,171783 C 685807,171774 686484,171725 687199,171674 C 687913,171624 688583,171497 688689,171391 C 688999,171081 689602,171172 689747,171550 C 689820,171743 690087,172215 690340,172600 C 691522,174399 692805,175046 694173,174532 C 694683,174341 695269,174146 695476,174099 C 695684,174051 696114,173717 696434,173356 C 698203,171357 699699,170000 700134,170000 C 700390,170000 700600,169921 700600,169824 C 700600,169495 701696,169233 703550,169119 C 705541,168996 705767,169141 705209,170183 C 704904,170754 702293,172800 701870,172800 C 701243,172800 699202,175457 699201,176276 C 699200,176483 699386,176954 699614,177323 C 700070,178061 700064,178773 699600,179017 C 698712,179484 697898,179800 697585,179800 C 697079,179800 696146,180643 695690,181512 C 695333,182193 691864,184200 691044,184200 C 690937,184200 690737,184335 690600,184500 C 690445,184687 690002,184801 689426,184802 C 688149,184806 686501,185275 685618,185887 C 684821,186440 684324,186513 683503,186201 C 682976,186001 681613,186493 681302,186997 C 681233,187109 680788,187200 680313,187200 C 679789,187200 679351,187318 679200,187500 C 678879,187887 677427,187883 676912,187494 C 676698,187332 676266,187200 675951,187200 C 675499,187200 675337,187078 675176,186616 C 675064,186295 674664,185823 674287,185566 C 673911,185310 673602,185033 673601,184950 C 673601,184868 673392,184800 673138,184800 C 672308,184800 671087,186831 671309,187842 C 671660,189440 667600,191905 666600,190700 C 666280,190315 665066,190316 664327,190701 C 663758,190998 663128,191061 662650,190868 z" + id="path5870" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 639272,189610 C 639207,189286 638984,188867 638777,188679 C 638511,188438 638400,188065 638400,187407 C 638400,186895 638268,186302 638106,186088 C 637651,185486 637745,184963 638451,184182 C 638808,183787 639299,183187 639543,182850 L 639986,182236 L 639579,181718 C 639064,181064 639152,180450 639833,179944 C 641250,178890 642450,180929 641594,182937 C 641340,183531 641354,183600 641811,183980 C 642534,184582 643000,184523 643000,183830 C 643000,183133 643377,182000 643609,182000 C 643702,182000 643896,181756 644039,181458 C 644183,181161 644495,180868 644734,180808 C 644973,180749 645362,180453 645599,180150 C 646147,179449 646419,179457 646962,180192 C 647481,180893 647558,182152 647093,182330 C 646709,182478 646000,183916 646000,184547 C 646000,184806 645782,185237 645515,185504 C 643919,187100 644337,188479 646466,188640 C 647685,188732 648042,188987 647951,189700 C 647882,190242 646526,190376 645993,189894 C 645715,189642 645430,189593 644832,189695 C 644235,189796 643844,189729 643244,189423 L 642449,189017 L 641674,189603 C 640570,190438 639438,190442 639272,189610 z" + id="path5872" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 595325,189093 C 594967,188160 595549,187263 596133,187848 C 596374,188088 596403,188292 596257,188730 C 596041,189377 595513,189583 595325,189093 z" + id="path5874" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 654446,185366 C 654076,184996 654150,184307 654605,183896 C 655149,183404 655445,183727 655364,184722 C 655297,185539 654898,185818 654446,185366 z" + id="path5876" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 708589,183136 C 708210,182771 707630,182154 707300,181765 C 706487,180807 704962,180135 704293,180440 C 703896,180620 703731,180600 703435,180332 C 703233,180148 702737,180000 702328,180000 C 700829,180000 701228,178443 702805,178138 C 703297,178043 703786,177883 703890,177782 C 704144,177538 704945,177550 705100,177800 C 705168,177910 705583,178000 706021,178000 C 706602,178000 706939,178128 707260,178472 C 707502,178732 707903,179008 708152,179086 C 708401,179164 708737,179486 708900,179800 C 709063,180114 709354,180423 709548,180485 C 710074,180655 711400,181936 711400,182274 C 711400,183621 709650,184158 708589,183136 z" + id="path5878" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 714600,179325 C 714600,178669 716253,176800 716834,176800 C 717474,176800 717550,177111 717174,178188 C 716861,179087 714600,180086 714600,179325 z" + id="path5880" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 719107,175612 C 718549,174709 720926,172112 721550,172943 C 722013,173561 721860,174766 721250,175303 C 720686,175800 719343,175993 719107,175612 z" + id="path5882" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 723343,175076 C 723073,174807 723200,174187 723550,174063 C 723743,173995 724060,173802 724255,173634 C 724738,173219 725047,173563 724965,174425 C 724901,175093 723802,175535 723343,175076 z" + id="path5884" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 653295,174131 C 652700,173726 651019,173364 650380,173504 C 649881,173614 649800,173563 649692,173064 C 649487,172123 649142,171580 648557,171278 C 647829,170901 647818,170173 648531,169611 C 649197,169087 649633,169208 650746,170226 C 651211,170652 651722,171000 651881,171000 C 652041,171000 652295,171123 652445,171274 C 652596,171424 652939,171611 653209,171690 C 655169,172258 655847,173136 654932,173924 C 654303,174464 653865,174520 653295,174131 z" + id="path5886" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 641607,173813 C 641348,173329 641337,172600 641590,172600 C 641694,172600 642022,172375 642319,172100 C 643124,171354 644200,171883 644200,173026 C 644200,173900 642009,174565 641607,173813 z" + id="path5888" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 633000,173300 C 632308,173051 632064,172644 632276,172092 C 632409,171744 633000,171931 633000,172321 C 633000,172709 633386,172668 634155,172199 C 634838,171783 635698,171673 635886,171978 C 635947,172076 636245,172216 636548,172289 C 638213,172691 638600,172840 638600,173081 C 638600,173616 634342,173783 633000,173300 z" + id="path5890" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 725445,172289 C 724856,171877 724866,171125 725463,170853 C 726694,170292 728699,171333 728314,172334 C 728166,172721 726013,172687 725445,172289 z" + id="path5892" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 639544,171277 C 639242,170975 639405,170225 639800,170100 C 640020,170030 640200,169899 640200,169808 C 640200,169517 640817,169395 641214,169608 C 641597,169812 641769,170877 641450,171065 C 641134,171252 639680,171414 639544,171277 z" + id="path5894" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 687750,168108 C 687396,167682 687200,167211 687200,166788 C 687200,166427 687071,165989 686914,165815 C 686757,165642 686584,164990 686531,164367 C 686463,163581 686307,163107 686019,162819 C 685572,162372 685598,159625 686055,159046 C 686194,158869 686156,158683 685928,158431 C 685712,158192 685600,157710 685600,157018 C 685600,154979 682907,153223 681926,154623 C 681584,155111 680521,155800 680110,155800 C 679955,155800 679652,156025 679436,156300 C 679197,156604 678839,156800 678523,156800 C 678220,156800 677899,156967 677754,157200 C 677611,157428 677287,157600 677000,157600 C 676713,157600 676389,157772 676246,158000 C 676109,158220 675811,158400 675585,158400 C 674750,158400 673800,159370 673800,160224 C 673800,160651 673871,161000 673957,161000 C 674043,161000 674286,161293 674496,161650 C 674706,162008 674995,162419 675139,162564 C 675282,162710 675400,162943 675400,163083 C 675400,163223 675580,163501 675800,163700 C 676570,164397 675782,166297 674800,166112 C 674525,166060 673892,165941 673393,165847 C 672894,165753 672369,165604 672226,165516 C 672061,165414 671760,165555 671397,165903 C 670942,166339 670692,166429 670163,166351 C 669645,166274 669404,166356 669060,166726 C 668340,167500 666866,167243 666422,166268 C 666128,165624 664849,165073 664359,165379 C 663834,165707 663442,165648 663306,165218 C 663239,165009 663057,164788 662901,164728 C 662746,164668 662424,164233 662187,163760 C 661950,163287 661529,162658 661252,162362 C 660922,162009 660784,161682 660854,161414 C 661310,159673 659205,159437 657297,161016 L 655777,162273 L 655208,161936 C 654895,161751 654464,161600 654250,161600 C 654037,161600 653699,161420 653500,161200 C 653301,160980 652978,160800 652783,160800 C 652588,160800 652305,160677 652155,160526 C 652004,160375 651592,160103 651240,159921 C 650882,159736 650600,159432 650600,159232 C 650600,158494 647792,156000 646961,156000 C 645713,156000 644800,155038 644800,153724 C 644800,152235 642767,149600 641619,149600 C 641386,149600 641042,149420 640854,149200 C 640570,148869 640264,148800 639083,148800 C 637994,148800 637540,148711 637177,148428 C 636667,148030 635755,147788 634560,147734 C 634154,147715 633708,147588 633570,147450 C 633433,147313 633117,147200 632870,147200 C 632622,147200 632348,147087 632260,146949 C 632010,146556 630657,145600 630352,145600 C 630200,145600 629902,145468 629688,145306 C 629475,145145 629132,145010 628927,145006 C 628465,144998 627200,143650 627200,143166 C 627200,142970 627020,142515 626801,142155 C 626581,141795 626401,141174 626401,140774 C 626400,140374 626265,139937 626100,139800 C 625735,139497 625712,139076 626050,138860 C 626188,138772 626508,138403 626763,138040 L 627226,137381 L 626813,136527 C 626284,135434 626291,134842 626841,134256 C 627136,133942 627289,133516 627302,132969 C 627315,132450 627447,132061 627661,131903 C 627848,131767 628000,131460 628000,131220 C 628000,130801 628389,130142 629346,128940 C 629731,128455 629775,128224 629672,127233 C 629564,126197 629602,126028 630076,125465 C 630364,125122 630600,124709 630600,124546 C 630600,124382 630729,124142 630887,124011 C 631642,123384 631444,121816 630417,120295 C 629443,118851 629885,117860 631750,117307 C 631998,117233 632200,117099 632200,117008 C 632200,115897 636876,116213 638189,117413 C 639163,118303 639346,118385 640900,118632 C 643423,119032 643749,119043 644229,118742 C 644932,118302 647137,118509 647422,119042 C 647833,119809 648478,120400 648905,120400 C 649143,120400 649491,120569 649678,120775 C 649864,120982 650323,121200 650697,121261 C 651071,121321 651637,121563 651955,121798 C 652460,122172 652837,122231 654944,122270 C 656621,122301 657455,122396 657681,122584 C 658189,123006 659512,123249 661800,123341 C 662955,123387 663986,123509 664090,123613 C 664397,123915 664842,123830 665325,123377 C 665608,123110 666131,122919 666738,122861 C 667758,122763 668993,122267 669261,121848 C 669350,121710 669733,121466 670113,121308 C 670820,121012 672985,118844 673244,118173 C 673418,117720 673547,117715 674915,118113 C 675922,118406 676800,119171 676800,119756 C 676800,119863 676929,120058 677087,120189 C 677554,120577 678044,119645 677887,118667 C 677767,117911 677796,117857 678731,117159 C 680397,115914 681767,114709 681784,114474 C 681793,114350 681935,114137 682100,114000 C 682297,113836 682400,113390 682400,112695 C 682400,110947 685103,108731 686817,109073 C 687220,109154 687595,109081 687939,108856 C 688826,108275 690999,108302 691888,108904 C 692750,109490 693844,109554 694353,109050 C 695818,107599 696963,107613 698474,109100 C 699088,109705 699677,110200 699781,110200 C 699886,110200 700100,110329 700258,110487 C 700481,110709 700804,110738 701709,110615 C 703873,110321 705295,111769 705171,114137 L 705100,115492 L 705850,115848 C 706412,116114 706600,116324 706600,116687 C 706600,116954 706721,117292 706868,117440 C 707352,117923 707565,118495 707462,119033 C 707383,119447 707500,119685 708003,120131 C 709533,121486 711029,124439 711535,127100 C 711597,127430 711778,127848 711936,128029 C 712557,128739 712532,131813 711898,132565 C 711352,133215 711345,133254 711450,135305 C 711549,137246 711528,137411 711128,137778 C 710893,137995 710130,138696 709434,139336 C 707027,141548 706614,142004 706735,142320 C 706893,142732 705698,143947 704979,144105 C 704445,144222 703453,145647 702675,147417 C 702427,147980 701493,148800 701100,148800 C 700965,148800 700632,148974 700361,149188 C 700090,149401 699646,149631 699375,149699 C 698175,150000 697000,151351 697000,152430 C 697000,153393 696458,154679 695650,155634 C 695440,155882 695402,156250 695504,157066 C 695628,158052 695599,158187 695221,158389 C 694962,158528 694800,158810 694800,159125 C 694800,159948 693848,160800 692928,160800 C 691585,160800 690620,162071 690747,163673 C 690835,164788 690796,164951 690322,165460 C 689944,165866 689800,166236 689800,166803 C 689800,167372 689694,167642 689414,167793 C 689201,167907 688970,168180 688900,168400 C 688722,168962 688388,168877 687750,168108 z" + id="path5896" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 662602,167303 C 662275,166909 662472,166450 663088,166169 C 663702,165889 664200,166218 664200,166903 C 664200,167599 663081,167879 662602,167303 z" + id="path5898" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 488746,164848 C 488446,164535 488200,164097 488200,163875 C 488200,163646 487810,163133 487300,162689 C 486759,162218 486400,161736 486400,161480 C 486400,161019 484802,159291 484200,159100 C 484000,159037 483786,158853 483725,158692 C 483663,158532 483444,158400 483237,158400 C 483031,158400 482699,158220 482500,158000 C 482245,157718 481884,157600 481279,157600 C 479732,157600 478199,155673 478176,153700 C 478158,152117 478498,150452 478925,150042 C 479522,149466 479519,149323 478900,148836 C 478625,148619 478400,148245 478400,148003 C 478400,147761 478220,147334 478000,147055 C 477780,146775 477600,146401 477599,146223 C 477599,146045 477417,145603 477196,145239 C 476626,144305 476653,139995 477232,139471 C 477434,139288 477600,139015 477600,138865 C 477600,137272 481381,135734 482800,136750 C 483069,136943 483742,137325 484295,137600 C 484862,137882 485400,138318 485530,138600 C 486433,140560 486600,140989 486600,141341 C 486600,141559 486780,141901 487000,142100 C 487297,142369 487400,142716 487400,143452 C 487400,144213 487514,144578 487893,145029 C 488269,145475 488359,145757 488269,146207 C 488203,146533 488238,146912 488345,147050 C 488671,147470 489200,149334 489200,150063 C 489200,150441 489335,150863 489500,151000 C 489665,151137 489800,151462 489800,151723 C 489800,151983 489980,152309 490200,152446 C 490528,152651 490600,152913 490600,153904 C 490600,154690 490712,155271 490922,155571 C 491122,155857 491202,156240 491133,156586 C 491070,156898 491126,157246 491261,157381 C 491717,157837 491633,163554 491165,163882 C 490952,164031 490709,164411 490626,164727 C 490404,165561 489486,165620 488746,164848 z" + id="path5900" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 739994,159386 C 739689,158650 739904,158135 740557,158038 C 741170,157946 741493,158652 741158,159351 C 740784,160131 740308,160145 739994,159386 z" + id="path5902" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 741733,157667 C 741456,157389 741616,156448 742000,156100 C 742220,155901 742400,155569 742400,155363 C 742400,154877 742917,154682 743319,155016 C 743708,155338 743535,156910 743051,157450 C 742740,157798 741988,157922 741733,157667 z" + id="path5904" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 766953,157401 C 766360,157222 765509,156436 764932,155535 C 764604,155021 764498,154982 763773,155105 C 761786,155440 761716,154096 763605,151850 C 764171,151178 765487,152112 766740,154073 C 767012,154498 767407,154891 767617,154947 C 767944,155032 768000,155234 768000,156323 C 768000,157680 767973,157708 766953,157401 z" + id="path5906" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 732995,150087 C 732562,148948 732773,148381 733920,147608 C 736027,146185 736734,146389 735804,148151 C 734630,150377 733422,151209 732995,150087 z" + id="path5908" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 753799,116698 C 753406,116225 754716,114510 756768,112812 C 757672,112064 757990,110593 757306,110330 C 757144,110268 756851,109913 756656,109542 C 756460,109170 756124,108533 755909,108125 C 755435,107225 755731,106512 756795,105988 C 757594,105595 757802,105260 757667,104584 C 757444,103471 758529,102432 759523,102807 C 760233,103075 760983,103953 760993,104527 C 760997,104762 761233,105107 761519,105294 C 761887,105535 762007,105752 761931,106043 C 761788,106587 762725,107752 763431,107907 C 764568,108157 765383,109537 764760,110160 C 764378,110542 762910,110453 762372,110016 C 761945,109669 761867,109662 761558,109940 C 761370,110109 760920,110310 760558,110387 C 759969,110512 759905,110592 759949,111152 C 759976,111496 759909,111833 759799,111900 C 759690,111968 759600,112249 759600,112525 C 759600,113101 757929,114883 756800,115511 C 756415,115725 755804,116147 755443,116450 C 754707,117066 754171,117147 753799,116698 z" + id="path5910" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 698855,103696 C 698616,103529 698166,103411 697855,103435 C 697543,103459 697178,103410 697043,103326 C 696907,103243 696183,103323 695433,103506 C 693119,104068 692548,103722 693493,102330 C 693772,101919 694000,101417 694000,101215 C 694000,100996 694242,100748 694600,100600 C 694930,100463 695200,100237 695200,100098 C 695200,99423 695909,98970 697138,98859 L 698369,98747 L 699303,99762 C 701640,102298 701286,105399 698855,103696 z" + id="path5912" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 751478,103268 C 751089,102845 750636,102230 750471,101900 C 749230,99406 749065,99208 748227,99203 C 747933,99201 747303,98783 746567,98101 C 745914,97497 745137,96944 744840,96873 C 743663,96591 741600,95083 741600,94504 C 741600,94366 741411,94014 741181,93721 C 740184,92454 745551,90836 746592,92090 C 746724,92249 747235,92575 747727,92813 C 748745,93306 749217,93916 749386,94957 C 749479,95530 749730,95856 750602,96540 C 756622,101262 757580,103530 753710,103893 L 752186,104035 L 751478,103268 z" + id="path5914" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 224300,93200 C 224137,92936 224376,92562 224614,92709 C 224857,92859 224855,93400 224612,93400 C 224508,93400 224368,93310 224300,93200 z" + id="path5916" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 531865,87061 C 530341,86764 531072,84599 532695,84601 C 534616,84603 535211,86198 533549,86892 C 532809,87202 532664,87216 531865,87061 z" + id="path5918" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 223440,86160 C 222858,85578 223662,83800 224508,83800 C 224996,83800 224912,85926 224413,86193 C 223914,86460 223734,86454 223440,86160 z" + id="path5920" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 255750,81803 C 255087,81107 255030,80305 255621,79989 C 256463,79538 259026,79647 259750,80164 C 261132,81150 260237,82049 258198,81723 C 257544,81618 257380,81664 257201,81999 C 256904,82554 256400,82485 255750,81803 z" + id="path5922" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 304872,74900 C 304671,74376 304962,74000 305569,74000 C 306227,74000 306702,74445 306529,74897 C 306372,75306 305029,75308 304872,74900 z" + id="path5924" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 600400,55870 C 600235,55815 599920,55691 599700,55594 C 599480,55497 598985,55281 598600,55113 C 598215,54945 597738,54694 597539,54554 C 597237,54341 597147,54356 596984,54642 C 596877,54830 596480,55042 596102,55113 C 595724,55184 595310,55367 595183,55521 C 594779,56008 593144,55375 591993,54287 C 591714,54023 591195,53749 590839,53678 C 590070,53524 589000,52285 589000,51548 C 589000,50788 587573,49857 586886,50170 C 586083,50536 585658,50443 585200,49800 C 584614,48977 584100,49034 582510,50101 L 581167,51001 L 579234,51041 C 577595,51075 577258,51139 577025,51460 C 576682,51933 575184,51774 574434,51184 C 573948,50801 573776,50824 573160,51352 C 572668,51774 570322,51888 570004,51505 C 569870,51343 569447,51152 569064,51080 C 568681,51008 568324,50835 568270,50694 C 568216,50554 567866,50382 567492,50312 C 567117,50241 566728,50036 566627,49855 C 566394,49439 564463,49481 563987,49912 C 563565,50294 561041,50305 560495,49928 C 560229,49745 559192,49621 557332,49552 C 554922,49463 554491,49395 553991,49025 C 553604,48739 553120,48600 552513,48600 C 551167,48600 550818,48005 551287,46514 C 551619,45459 551468,44600 550952,44600 C 550868,44600 550636,44436 550436,44236 C 549166,42966 546110,42944 544991,44196 C 544730,44489 544294,44543 542159,44546 L 539635,44551 L 538818,45434 L 538000,46318 L 535750,46276 C 534043,46244 533337,46310 532827,46550 C 532206,46843 532139,46841 531967,46534 C 531724,46100 531034,46107 530546,46549 C 530231,46834 529751,46901 527930,46918 C 518640,47003 514708,47208 514116,47638 C 513636,47986 513435,48025 512988,47857 C 512379,47627 509025,49095 508143,49977 C 508020,50100 507809,50200 507673,50200 C 507537,50200 507173,50311 506863,50447 C 506268,50709 506098,50717 500057,50787 C 495642,50838 494200,50630 493397,49828 C 493107,49538 492516,49129 492085,48920 C 491653,48710 491054,48414 490754,48261 C 490354,48057 490103,48038 489817,48191 C 489233,48504 488576,48444 488113,48037 C 487255,47282 485251,47008 480000,46930 C 477006,46885 476392,46740 475329,45821 C 475124,45644 474629,45500 474229,45500 C 473684,45500 473454,45396 473318,45087 C 473145,44692 472999,44675 470018,44716 C 468137,44742 466639,44671 466242,44536 C 465773,44378 465485,44375 465242,44527 C 465045,44650 463661,44750 461975,44762 C 459366,44782 458971,44830 458323,45213 C 457559,45664 456800,45627 456200,45111 C 455427,44445 453264,43982 452630,44346 C 452057,44675 452000,44671 451145,44244 C 450656,44000 450083,43800 449870,43800 C 449658,43800 449128,43617 448692,43393 C 448213,43147 447713,43032 447426,43103 C 447154,43170 446814,43102 446626,42944 C 445797,42243 444525,42000 441682,42000 C 439525,42000 438787,41932 438488,41706 C 437989,41329 436719,41316 436412,41685 C 436167,41981 433600,42152 427900,42254 C 425748,42292 425233,42360 424912,42650 C 424662,42876 424200,43000 423609,43000 C 423072,43000 422382,43167 421937,43406 C 421083,43863 417545,43958 417029,43537 C 416880,43416 416168,43255 415447,43181 C 414509,43084 414045,42935 413818,42658 C 413531,42309 413274,42278 411200,42334 C 409935,42368 407730,42309 406300,42203 C 403192,41973 400160,41942 398454,42123 C 397344,42240 397170,42209 396854,41836 C 396345,41234 391903,41115 391481,41692 C 391034,42303 383825,42443 382458,41867 C 382012,41679 381001,41528 380000,41500 C 378971,41471 377905,41308 377300,41088 C 376664,40857 375718,40720 374700,40712 C 373820,40706 372988,40627 372850,40538 C 372713,40449 372489,40445 372352,40530 C 371984,40757 368339,40774 368053,40549 C 367916,40442 367646,40427 367453,40514 C 366829,40795 364922,40784 364600,40498 C 364000,39964 362536,39606 361468,39731 C 360559,39836 360403,39800 360169,39425 C 360023,39191 359719,39000 359494,39000 C 359269,39000 358732,38820 358300,38600 C 357868,38380 357223,38200 356865,38200 C 356414,38200 356147,38074 355995,37790 C 355836,37494 355660,37417 355359,37513 C 354958,37640 354119,37451 352563,36883 C 352073,36704 351216,36640 350011,36692 C 348381,36762 348177,36731 347992,36385 C 347858,36135 347573,36000 347180,36000 C 346846,36000 346420,35918 346232,35817 C 346021,35704 345527,35718 344933,35854 L 343975,36073 L 343237,35274 C 342398,34363 340730,32979 340026,32609 C 339684,32430 339009,32399 337605,32500 C 335949,32618 335640,32593 335539,32331 C 335474,32161 335100,31962 334707,31888 C 333966,31749 332000,30144 332000,29678 C 332000,29505 331600,29440 330650,29458 C 329176,29487 328210,29111 327129,28086 C 326584,27569 326490,27550 324990,27653 C 323494,27756 323405,27738 323103,27277 C 322847,26886 322714,26832 322406,26997 C 321833,27304 321216,27243 320516,26810 C 320004,26493 319469,26412 317692,26379 C 315742,26343 315445,26290 315000,25895 C 314632,25567 314132,25414 313104,25315 C 312279,25235 311566,25050 311359,24863 C 311065,24596 310600,24561 308455,24644 C 306784,24708 305781,24667 305551,24523 C 305290,24360 305093,24371 304781,24566 C 304385,24813 302767,24774 301190,24481 C 300840,24415 300501,24539 300113,24872 C 299418,25469 297033,25493 295722,24914 C 294673,24452 288253,24588 287488,25090 C 286960,25436 286149,25493 285637,25221 C 285435,25114 284859,25123 284200,25244 C 283595,25355 282680,25459 282166,25473 C 281483,25493 281096,25628 280726,25975 C 280331,26347 280098,26420 279660,26309 C 279352,26231 278920,26176 278700,26187 C 276148,26312 275745,26365 275604,26594 C 275411,26906 273510,27235 272853,27070 C 272573,27000 272246,27072 272042,27248 C 271579,27648 270480,28000 269695,28000 C 269340,28000 268948,28122 268824,28271 C 268689,28434 267951,28597 266983,28677 C 266095,28751 265172,28940 264932,29097 C 264693,29254 264318,29386 264098,29391 C 262610,29422 261943,29551 261783,29837 C 261648,30079 261241,30164 260102,30192 C 257778,30248 257539,30285 256948,30680 C 256558,30940 256209,31012 255765,30923 C 255004,30771 254015,31295 254379,31659 C 254500,31780 254600,32017 254600,32185 C 254600,32487 256151,33999 256461,34000 C 256737,34000 257408,35742 257282,36131 C 256925,37232 256725,37600 256484,37600 C 256134,37600 255200,39203 255200,39805 C 255200,40063 255002,40485 254760,40743 C 253774,41792 254506,43268 256594,44441 C 257468,44932 257364,45438 256184,46433 C 255274,47201 255181,47353 255289,47895 C 255555,49226 258913,53200 259772,53200 C 260257,53200 262200,54340 262200,54624 C 262200,55728 261044,56043 259352,55400 C 258576,55105 258053,55033 257358,55125 C 256606,55224 256272,55164 255697,54825 C 255301,54591 254785,54400 254549,54400 C 254314,54400 253767,54154 253333,53854 C 252667,53392 252356,53312 251323,53336 C 250352,53359 250026,53286 249742,52983 C 249502,52726 249114,52600 248560,52600 C 247797,52600 246600,51742 246600,51196 C 246600,51124 245832,51053 244893,51039 C 242990,51012 242853,50966 242591,50277 C 242490,50011 242188,49709 241920,49608 C 241652,49506 241351,49277 241252,49099 C 241099,48827 240988,48814 240536,49020 C 238675,49868 236370,47474 237133,45487 C 237491,44554 235278,43469 234503,44197 C 234130,44548 233799,44595 231690,44595 C 230376,44595 228931,44596 228481,44597 C 227914,44599 227550,44476 227300,44200 C 227101,43980 226814,43800 226662,43800 C 226367,43800 225926,43549 224230,42415 C 223642,42022 222922,41576 222630,41425 C 220618,40380 220448,38400 222370,38400 C 222856,38400 223063,38281 223235,37903 C 223622,37053 224362,36714 225900,36681 C 228281,36630 228633,36485 228478,35624 C 228308,34685 228304,34682 227531,34962 C 227168,35093 226681,35200 226448,35200 C 226214,35200 225975,35279 225915,35376 C 225855,35473 225107,35611 224253,35683 C 223399,35755 222160,35938 221500,36090 C 218669,36740 218260,36789 216900,36646 L 215500,36499 L 215518,35636 C 215536,34795 215523,34777 215018,34936 C 213925,35282 211745,35094 211435,34628 C 211279,34392 211034,34200 210890,34200 C 210747,34200 210465,33993 210265,33741 C 209712,33045 209493,32975 208871,33300 C 208557,33464 208184,33598 208043,33599 C 207902,33599 207587,33724 207343,33876 C 206726,34261 205326,34438 204720,34208 C 204298,34047 204105,34106 203571,34555 C 202959,35070 202832,35094 200914,35066 C 199549,35046 198803,35117 198600,35288 C 198225,35602 196696,35983 195900,35960 C 195570,35950 194940,36104 194500,36302 C 193788,36622 192990,36665 187257,36690 C 180907,36717 180807,36724 180344,37159 C 180086,37401 179699,37600 179485,37600 C 179271,37600 178990,37770 178860,37978 C 178724,38196 178301,38403 177862,38466 C 177443,38527 176560,38684 175900,38815 C 175240,38946 173845,39041 172800,39026 C 171755,39010 170376,38999 169736,39001 C 169035,39002 168406,38887 168155,38711 C 167865,38508 167630,38477 167384,38609 C 166961,38835 165066,37989 163150,36719 C 162295,36152 162792,34421 163934,33987 C 164683,33702 164694,33285 163976,32429 C 163426,31775 163241,31671 162875,31810 C 162632,31902 161297,31923 159906,31858 C 157519,31745 157373,31760 157277,32126 C 157167,32549 154165,34213 153529,34205 C 153325,34202 152890,34425 152564,34700 C 152114,35078 151740,35200 151029,35200 C 150512,35200 149903,35330 149675,35490 C 148885,36043 147357,35123 147437,34142 C 147539,32894 144698,32063 143661,33037 C 143226,33445 142987,33476 140047,33504 C 137925,33524 136742,33617 136420,33789 C 136060,33982 135765,33993 135221,33832 C 133949,33458 132870,33396 131772,33637 C 131182,33766 130174,33851 129531,33827 C 128808,33799 128243,33881 128050,34041 C 127846,34210 127109,34301 125919,34303 C 124699,34306 123935,34402 123600,34597 C 123268,34789 122427,34898 121100,34922 C 118604,34966 117285,35157 116984,35519 C 116583,36003 113288,35907 112854,35400 C 112665,35180 112317,35000 112079,35000 C 111821,35000 111434,34720 111116,34303 C 110329,33272 110112,33211 107900,33400 C 106810,33493 105778,33498 105609,33410 C 105439,33322 104805,33336 104200,33442 C 102361,33762 101887,33714 101122,33130 C 100278,32487 96850,32305 94300,32769 C 93530,32909 92495,33072 92000,33131 C 91505,33190 91014,33320 90910,33419 C 90642,33674 89451,33645 89287,33380 C 88932,32805 87731,32584 84851,32562 C 81966,32541 81917,32533 81108,31963 C 80362,31437 80055,31366 77694,31172 C 75961,31030 74991,30862 74770,30667 C 74445,30379 73225,30287 67500,30122 C 65954,30077 65302,29968 64629,29640 C 63846,29259 61921,28889 60000,28750 C 59451,28711 59287,28605 59238,28262 C 59070,27086 57036,26045 55994,26603 C 55735,26742 55184,26736 54257,26585 C 53217,26416 52760,26422 52300,26610 C 51215,27055 49219,27003 48766,26519 C 48400,26128 48361,26123 48177,26450 C 47957,26841 46124,26962 45900,26600 C 45832,26490 45584,26400 45349,26400 C 45114,26400 44563,26153 44125,25850 L 43328,25300 L 39586,25300 C 36389,25300 35790,25252 35472,24969 C 35162,24694 34792,24657 33262,24746 C 31630,24842 31344,24806 30701,24427 C 29567,23758 7765,23755 6915,24424 C 6467,24776 6212,24827 5415,24721 C 4690,24625 4394,24666 4207,24891 C 3942,25211 3468,25313 1350,25508 L 0,25632 L 0,12816 L 0,0 L 384000,0 L 768000,0 L 768000,12476 L 768000,24951 L 767350,25225 C 766877,25424 765724,25494 763124,25484 C 759602,25471 759540,25478 759065,25953 C 758512,26506 756721,26446 756261,25859 C 755910,25410 754277,25270 753845,25652 C 753169,26249 748811,26593 748000,26113 C 746758,25378 746554,25352 745636,25811 C 745077,26090 744393,26246 743732,26245 C 743114,26245 742402,26396 741958,26622 C 741550,26830 741037,27000 740819,27000 C 739603,27000 739535,28520 740700,29669 C 741195,30157 741600,30696 741600,30868 C 741600,31131 741902,31175 743524,31151 C 745062,31128 745494,31185 745677,31435 C 745967,31831 747115,32099 747293,31812 C 747499,31479 747972,31563 748346,32000 C 748535,32220 748844,32400 749033,32400 C 749222,32400 749432,32490 749500,32600 C 749574,32720 750054,32750 750694,32675 C 751644,32563 751795,32597 752031,32975 C 752187,33225 752503,33400 752798,33400 C 753086,33400 753627,33691 754067,34083 C 754489,34458 755101,34876 755427,35011 C 757089,35700 757030,38200 755352,38200 C 755135,38200 754510,38425 753963,38700 C 753415,38975 752651,39200 752265,39200 C 751857,39200 751342,39374 751035,39615 C 750620,39942 750283,40017 749462,39965 C 748643,39914 748362,39976 748159,40254 C 747952,40536 747533,40623 746100,40683 C 745047,40726 743885,40908 743300,41119 C 742464,41422 741640,41483 738271,41491 C 734766,41499 734193,41544 733866,41840 C 733659,42028 733087,42244 732595,42321 C 732103,42397 731485,42627 731223,42830 C 730686,43246 730158,43299 729586,42992 C 729302,42841 728946,42870 728260,43103 C 727706,43291 727030,43376 726611,43309 C 726220,43247 725773,43278 725618,43379 C 725443,43493 725158,43481 724863,43347 C 724515,43188 724327,43193 724155,43365 C 724026,43494 723702,43600 723436,43600 C 723170,43600 722645,43870 722269,44200 C 721894,44530 721387,44801 721143,44801 C 720899,44802 720442,44937 720127,45101 C 719419,45471 719216,45474 718816,45124 C 718164,44553 717659,44554 717126,45128 C 716690,45599 716555,45644 716142,45455 C 715852,45323 715552,45308 715382,45416 C 715227,45514 714735,45595 714288,45597 C 713842,45599 713302,45732 713088,45894 C 712875,46055 712518,46190 712295,46194 C 712071,46197 711672,46352 711408,46537 C 710709,47027 708094,47036 707655,46550 C 707237,46089 706746,46107 706300,46600 C 706101,46820 705738,47000 705493,47000 C 705249,47000 704931,47142 704788,47315 C 704005,48258 702674,48573 701933,47990 C 701536,47678 701322,47628 701038,47780 C 700833,47890 700467,47928 700226,47865 C 699960,47795 699643,47880 699422,48080 C 699029,48436 693047,48926 691964,48691 C 691566,48604 691376,48671 691228,48949 C 691052,49277 690753,49326 688784,49353 C 686642,49381 686514,49407 685981,49918 C 685459,50418 685341,50445 684221,50318 C 683298,50214 682705,50275 681660,50584 C 680225,51007 677596,51049 674181,50701 C 672471,50528 670883,50900 670462,51575 C 670263,51893 670036,51938 668964,51869 C 665477,51647 663877,51727 662964,52169 C 661943,52663 661581,52701 661231,52351 C 661095,52215 660379,52042 659641,51969 C 658904,51895 657895,51744 657400,51634 C 656672,51471 656436,51491 656163,51736 C 655903,51969 655558,52009 654663,51909 C 654023,51837 653029,51781 652454,51784 C 651620,51787 651366,51710 651200,51400 C 651045,51110 650854,51039 650445,51121 C 649967,51217 649828,51117 649329,50329 C 648466,48964 647389,49042 645850,50581 C 644765,51666 644108,51426 644070,49930 C 644035,48516 641996,47324 641117,48203 C 641008,48312 640688,48400 640405,48400 C 638977,48400 638617,49441 639918,49805 C 641020,50114 641399,50704 641024,51528 C 640725,52182 638715,52103 637758,51399 C 637066,50890 636835,50897 636246,51450 C 635558,52095 632192,52050 631486,51387 C 631084,51009 630896,50979 629710,51106 C 628594,51226 628323,51193 627995,50896 C 627629,50564 627544,50563 626553,50871 C 624552,51495 621730,50908 620692,49651 C 620287,49162 617640,49267 616900,49802 C 616556,50050 614125,50768 613600,50776 C 611922,50801 610098,51205 609784,51621 C 609543,51941 609327,52025 608971,51936 C 608620,51847 608420,51922 608242,52207 C 608101,52433 607777,52600 607480,52600 C 607123,52600 606929,52730 606853,53019 C 606779,53304 606217,53690 605103,54221 C 603993,54751 603389,55166 603235,55502 C 603011,55995 601411,56203 600400,55870 z" + id="path5926" + style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer1" + inkscape:label="Land"> + <g + transform="matrix(6.1000977e-4,0,0,-6.1064454e-4,-0.24375,234.24376)" + id="g6" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> + <path + d="M 0,357500 L 0,331000 L 450,331003 C 698,331005 1123,331241 1395,331528 C 2302,332484 2614,332605 3562,332364 C 4142,332217 4565,332211 4861,332345 C 5753,332748 7593,332400 8946,331572 C 9737,331088 10453,330800 10865,330800 C 11227,330800 11698,330668 11912,330506 C 12125,330345 12475,330210 12689,330206 C 12903,330203 13331,329958 13640,329661 L 14202,329123 L 15114,330061 C 15616,330578 16145,331000 16289,331000 C 16433,331000 16662,331133 16797,331296 C 17187,331766 18123,332159 18632,332066 C 19222,331959 20200,332833 20200,333468 C 20200,334118 19827,334400 18967,334400 C 18456,334400 18153,334512 18024,334750 C 17702,335344 16464,335902 16114,335612 C 15785,335338 15400,335484 15400,335881 C 15400,336022 15220,336301 15000,336500 C 14780,336699 14600,336989 14600,337144 C 14600,337829 13575,339587 12801,340231 C 12015,340883 11978,340961 12146,341611 C 12386,342545 13670,342713 14598,341933 C 15276,341362 16765,341139 18800,341302 C 19515,341360 20712,341399 21459,341389 C 23473,341362 24911,342835 24091,344085 C 23791,344544 23805,344567 24641,344969 C 26590,345908 26985,345817 28565,344075 C 29195,343380 38688,343427 39640,344130 C 39991,344388 40420,344600 40594,344600 C 40769,344600 41113,344742 41360,344915 C 41935,345317 46754,345357 47382,344965 C 47709,344761 47843,344777 48155,345059 C 48731,345581 49035,345482 50068,344433 C 51214,343269 51011,342538 49784,343411 C 49176,343844 49135,343848 48572,343515 C 47992,343173 46000,342948 46000,343226 C 46000,343956 44454,344252 44046,343600 C 43903,343371 43580,343200 43290,343200 C 43012,343200 42450,343032 42042,342828 C 41605,342608 40809,342441 40106,342421 C 39227,342396 38801,342283 38493,341993 C 38263,341777 37880,341600 37643,341600 C 37395,341600 37022,341343 36763,340993 C 36451,340571 35990,340292 35247,340076 C 34660,339905 33949,339646 33667,339500 C 33385,339354 32602,339171 31927,339093 C 30657,338947 29600,338397 29600,337881 C 29600,337443 30594,337122 31230,337355 C 31676,337519 31839,337470 32267,337042 C 32639,336670 32967,336541 33496,336561 C 33973,336579 34256,336486 34333,336287 C 34517,335806 35807,335357 36633,335485 C 37482,335617 39059,334755 38955,334215 C 38787,333341 35672,333196 34353,334001 C 33504,334518 33105,334502 31929,333906 C 31157,333514 30778,333438 30078,333534 C 29322,333638 29131,333587 28735,333177 C 28482,332915 28109,332606 27908,332491 C 26940,331940 29604,329452 30707,329875 C 30877,329940 31185,329888 31391,329759 C 31681,329578 31987,329585 32733,329790 C 33655,330043 34680,330093 36367,329966 C 36963,329922 37279,330031 37782,330455 C 38583,331128 38839,331132 39932,330492 C 41386,329640 41053,328763 38975,327977 C 37142,327283 36747,327200 35282,327200 L 33861,327200 L 32803,326121 C 32220,325527 31464,324962 31122,324865 C 29952,324531 30775,322200 32063,322200 C 32230,322200 32723,321795 33158,321300 C 33724,320658 34103,320400 34482,320400 C 34775,320400 35241,320251 35519,320069 C 35990,319761 36073,319761 36719,320069 C 37854,320610 38609,319986 39078,318118 C 39271,317346 40028,317110 41471,317371 C 42306,317523 42913,317521 43589,317365 C 44283,317204 44878,317207 45818,317375 C 47153,317614 47996,317167 47999,316218 C 48001,315768 46256,314291 45028,313703 C 42687,312584 42539,312434 43062,311718 C 43457,311178 44489,311426 45931,312405 C 46672,312908 47328,313199 47721,313200 C 48105,313200 48547,313390 48881,313700 C 49178,313975 49582,314200 49779,314200 C 49977,314200 50291,314369 50478,314576 C 50665,314783 51160,315007 51578,315073 C 51997,315140 52680,315466 53097,315797 C 53586,316186 54084,316400 54501,316400 C 55534,316400 56168,317040 56239,318156 C 56295,319021 56361,319130 57032,319458 C 57435,319655 58018,320150 58327,320558 C 59709,322380 61000,322464 61000,320733 C 61000,319325 64753,318950 66431,320191 C 66735,320416 67028,320600 67083,320600 C 67506,320600 68302,321813 68396,322600 C 68515,323607 68423,323584 70398,323093 C 71272,322875 71982,322535 72575,322049 C 73059,321653 73645,321306 73877,321279 C 74110,321251 74705,321127 75200,321003 C 76868,320584 78091,320460 79891,320526 C 81491,320586 81730,320547 82132,320170 C 82473,319849 82732,319776 83199,319870 C 83545,319939 83980,319891 84189,319761 C 84474,319583 84826,319587 85687,319780 C 86809,320031 86813,320030 87513,319416 C 87898,319077 88335,318800 88482,318800 C 88630,318800 88863,318665 89000,318500 C 89137,318335 89381,318200 89542,318200 C 89704,318200 90000,317998 90200,317750 C 90675,317164 92538,317101 93145,317650 C 93634,318093 94174,318099 94341,317664 C 94426,317444 94320,317230 94035,317040 C 93440,316645 93489,316053 94209,314918 L 94818,313957 L 95726,314093 C 96449,314202 96684,314162 96877,313898 C 97010,313715 97427,313503 97803,313426 C 98373,313310 98509,313177 98621,312627 C 98695,312265 98941,311839 99167,311680 C 99394,311522 99780,311034 100027,310595 C 100355,310010 100664,309745 101187,309600 C 102227,309312 102389,309346 102600,309900 C 102999,310950 105600,309236 105600,307923 C 105600,307203 107050,305747 108117,305394 C 108493,305270 108800,305044 108800,304891 C 108800,304738 109205,304157 109700,303600 C 110195,303043 110600,302507 110600,302409 C 110600,302312 110866,302173 111191,302102 C 111909,301944 112167,301317 111718,300820 C 111080,300115 111300,299200 112107,299200 C 112679,299200 112977,299033 113661,298330 C 114331,297640 114697,297431 115427,297321 C 116847,297108 118908,295088 119075,293747 C 119140,293222 119339,292510 119518,292165 C 119984,291265 120011,285968 119553,285451 C 118983,284806 118688,282901 119068,282321 C 119248,282046 119359,281704 119314,281560 C 118915,280280 119015,278012 119497,277440 C 119774,277111 120000,276665 120000,276448 C 120000,276231 120180,275825 120400,275545 C 120620,275266 120800,274953 120800,274850 C 120800,274747 121477,273955 122304,273090 C 123319,272027 123873,271270 124011,270758 C 124124,270341 124299,270000 124401,270000 C 124504,270000 124714,269757 124870,269460 C 125182,268865 126051,267832 127350,266514 C 127818,266040 128200,265540 128200,265404 C 128200,265230 128403,265194 128872,265282 C 129343,265370 129618,265320 129789,265114 C 129923,264952 130453,264758 130966,264682 C 131488,264605 132150,264336 132465,264072 C 132776,263812 133112,263600 133212,263600 C 133311,263600 133454,263353 133530,263050 C 133740,262206 134556,260768 135002,260456 C 135282,260260 135367,260039 135286,259717 C 135216,259438 135291,259138 135476,258953 C 135643,258785 135840,258410 135913,258119 C 135986,257828 136205,257504 136400,257400 C 136595,257296 136809,256993 136875,256728 C 136942,256462 137335,255958 137748,255608 C 138162,255259 138680,254814 138900,254621 C 139120,254428 139593,254100 139950,253892 C 140628,253498 140758,253048 140373,252431 C 139959,251769 140338,249849 140962,249445 C 141254,249255 141660,248935 141864,248733 C 142123,248476 142389,248404 142746,248494 C 143620,248713 144556,247615 144718,246181 C 144844,245069 145825,243800 146559,243800 C 146659,243800 146984,243575 147281,243300 C 147578,243025 147945,242800 148097,242800 C 148249,242800 148565,242530 148800,242200 C 149227,241600 150225,241355 150491,241785 C 150691,242109 150148,243005 149680,243123 C 149393,243195 149038,243611 148704,244268 C 148415,244836 147813,245705 147366,246200 C 146919,246695 146301,247640 145994,248300 C 145686,248960 145157,249809 144817,250186 C 144478,250563 144200,250992 144200,251138 C 144200,251284 144011,251561 143779,251752 C 143548,251943 143138,252444 142868,252864 C 142597,253285 142112,253721 141788,253834 C 141465,253947 141200,254153 141200,254293 C 141200,254432 141026,254768 140812,255039 C 140599,255310 140363,255778 140287,256080 C 140212,256381 139981,256733 139775,256862 C 138931,257389 139982,259000 141169,259000 C 142060,259000 143000,258132 143000,257309 C 143000,256949 143164,256439 143365,256177 C 143566,255915 144034,255160 144406,254500 C 145059,253340 145642,252724 146488,252296 C 146710,252184 146984,251914 147096,251696 C 147404,251097 148303,250274 149260,249713 C 150343,249078 150916,248306 151138,247183 C 151276,246484 151436,246242 151906,246020 C 152233,245867 152815,245507 153200,245220 C 153585,244934 154339,244475 154876,244200 C 155550,243855 155938,243497 156131,243045 C 156284,242685 156753,242055 157173,241645 C 157593,241235 157993,240668 158063,240385 C 158133,240102 158436,239517 158736,239085 C 159230,238375 159280,238142 159259,236640 C 159240,235209 159290,234947 159619,234742 C 159836,234606 160000,234279 160000,233979 C 160000,233412 161201,232400 161874,232400 C 162067,232400 162444,232141 162710,231825 C 163240,231195 164901,230320 166000,230093 C 166385,230014 166878,229825 167095,229674 C 167311,229524 167747,229400 168063,229400 C 168379,229400 168866,229220 169145,229000 C 169425,228780 169824,228600 170031,228600 C 170239,228600 170799,228240 171277,227800 C 171754,227360 172285,227000 172457,227000 C 172629,227000 173040,226772 173372,226493 C 173825,226111 174104,226018 174498,226117 C 174889,226216 175146,226133 175509,225792 C 176224,225119 178959,224959 179554,225554 C 180886,226886 184761,226235 186000,224471 C 186275,224080 186660,223611 186855,223430 C 187050,223248 187420,222898 187678,222650 C 187935,222403 188227,222200 188327,222200 C 188426,222200 188837,221976 189240,221702 C 189767,221344 190131,221236 190541,221318 C 190960,221402 191208,221323 191486,221016 C 191696,220784 192109,220600 192421,220600 C 192739,220600 193211,220385 193517,220101 C 193997,219657 194170,219617 195112,219727 C 196463,219886 197125,219715 197445,219124 C 197768,218528 200932,215800 201301,215800 C 201754,215800 201854,215412 201529,214915 C 200945,214025 201704,212303 202594,212499 C 202976,212583 203227,212501 203493,212208 C 203696,211983 204025,211800 204224,211800 C 204423,211800 204676,211632 204785,211427 C 204895,211223 205244,210947 205561,210816 C 205887,210681 206260,210299 206419,209939 C 206689,209324 206753,209296 208111,209200 C 209406,209108 209588,209038 210311,208352 C 210745,207940 211259,207603 211453,207602 C 211647,207601 211990,207488 212215,207350 C 212712,207047 213195,207553 213207,208388 C 213242,210833 216022,210680 217266,208164 C 217665,207359 218067,206565 218162,206400 C 219047,204847 219154,204303 218786,203245 C 218611,202744 218636,202530 218921,202096 C 219255,201586 219254,201532 218904,200882 C 218555,200233 218554,200182 218887,199815 C 219429,199216 218513,197600 217631,197600 C 217206,197600 216000,196403 216000,195981 C 216000,195597 215577,195030 214152,193501 C 213401,192696 212959,192033 212875,191585 C 212803,191208 212637,190765 212506,190600 C 211501,189341 211197,187979 211747,187195 C 213035,185357 213098,184486 212010,183555 C 211042,182727 210703,181955 211034,181337 C 211163,181097 211255,180397 211238,179781 L 211207,178662 L 212823,177089 C 213727,176210 214669,175072 214959,174508 C 215245,173954 215586,173434 215716,173353 C 215847,173272 216015,172794 216091,172291 C 216166,171788 216357,171327 216514,171267 C 216693,171198 216800,170871 216800,170390 C 216800,169835 216917,169541 217223,169326 C 217718,168980 218400,167919 218400,167497 C 218400,167335 218580,167091 218800,166954 C 219042,166803 219200,166487 219200,166157 C 219200,165794 219368,165499 219696,165284 C 220434,164801 220985,163796 220862,163159 C 220790,162791 220892,162446 221178,162082 C 221410,161787 221600,161426 221600,161279 C 221600,160623 225067,157577 226111,157315 C 226433,157234 226742,157097 226798,157010 C 226854,156922 227583,156532 228418,156142 C 230649,155101 233600,152651 233600,151840 C 233600,151560 233726,151189 233880,151016 C 234276,150570 234614,149204 234423,148821 C 234335,148645 234288,147524 234317,146331 C 234363,144482 234314,144069 233986,143531 C 233775,143184 233601,142538 233601,142095 C 233600,141651 233456,141084 233281,140833 C 233033,140480 232973,139963 233015,138539 C 233044,137527 232997,136362 232911,135948 C 232803,135430 232834,135100 233009,134889 C 233201,134657 233207,134527 233032,134352 C 232904,134224 232800,133888 232800,133604 C 232800,133321 232614,132930 232387,132736 C 232009,132411 231979,132194 232028,130097 C 232077,127978 232049,127778 231641,127343 C 231398,127085 231197,126700 231193,126487 C 231189,126274 231063,125878 230913,125607 C 230673,125173 230684,125056 231004,124649 C 231291,124285 231347,123961 231264,123142 C 231170,122207 231212,122050 231679,121615 C 232339,121001 232346,120276 231702,119403 C 231421,119022 231149,118310 231077,117767 C 231007,117239 230826,116704 230675,116579 C 230524,116454 230400,116097 230400,115787 C 230400,115477 230303,115163 230183,115090 C 230064,115016 229797,114560 229590,114077 C 229383,113594 228796,112793 228287,112297 C 227407,111442 227366,111354 227474,110548 C 227537,110082 227667,109115 227762,108400 C 227857,107685 228001,106951 228082,106768 C 228181,106543 227997,106124 227512,105468 C 227117,104936 226657,104185 226488,103800 C 226320,103415 226083,102902 225963,102660 C 225800,102333 225807,102065 225993,101617 C 226205,101105 226194,100966 225921,100693 C 225536,100308 225509,99796 225850,99349 C 226166,98935 227112,98695 227290,98984 C 227499,99323 227764,99240 228097,98733 C 228555,98033 228161,97079 227232,96641 C 226435,96265 226275,95915 226091,94151 C 225996,93239 225851,92881 225386,92417 C 224684,91715 224640,91276 225250,91089 C 226494,90706 226710,89713 225699,89024 C 225314,88763 225000,88425 225000,88274 C 225000,88123 224817,88000 224594,88000 C 224127,88000 223848,87472 224153,87167 C 224296,87024 224482,87082 224751,87351 C 225240,87840 226200,88111 226200,87761 C 226200,87626 225953,87318 225651,87077 C 225111,86646 225108,86633 225478,86225 C 225945,85708 225836,84117 225306,83729 C 224689,83278 224973,82288 225700,82355 C 226373,82417 227664,80277 227841,78805 C 227874,78527 228103,78209 228364,78080 C 229203,77663 229501,77043 229085,76583 C 228846,76319 228796,76124 228931,75989 C 229192,75728 229800,75960 229800,76321 C 229800,76616 230042,76691 230267,76466 C 230341,76393 230255,76171 230076,75974 C 229599,75447 229865,74997 230644,75013 C 232292,75048 233401,74766 233522,74283 C 233710,73534 234140,73284 234569,73672 C 235093,74146 235365,74077 235437,73450 C 235523,72702 236383,72584 236990,73236 C 237261,73527 237470,73617 237559,73483 C 238048,72747 241251,72613 241570,73314 C 241748,73705 241884,73751 242588,73656 C 243641,73515 243726,74059 242716,74481 C 242339,74638 241880,74997 241696,75278 C 241491,75591 241096,75839 240677,75917 C 239894,76064 238901,76909 238609,77677 C 238488,77995 238257,78200 238019,78200 C 237443,78200 237037,78702 237147,79278 C 237207,79592 237085,79999 236821,80370 C 236335,81053 236269,81907 236690,82068 C 236849,82129 237075,82522 237192,82940 C 237363,83546 237575,83781 238242,84100 C 238898,84414 239216,84758 239714,85694 C 240211,86627 240483,86922 240960,87046 C 242727,87504 244166,90003 242850,90328 C 242548,90403 241985,90674 241600,90932 C 241215,91189 240563,91626 240150,91902 C 238956,92704 239096,93258 240673,93973 C 241373,94291 242008,94651 242085,94775 C 242161,94899 242614,95000 243091,95000 C 244168,95000 245320,95920 245134,96631 C 245055,96933 245166,97173 245511,97444 C 245795,97668 246000,98037 246000,98326 C 246000,98734 246192,98907 247082,99300 C 248757,100041 248814,100667 247275,101412 C 246138,101963 245810,102580 246276,103292 C 246715,103961 247611,103965 248482,103300 C 249433,102575 249993,102654 250960,103650 C 251413,104118 251923,104616 252092,104758 C 252445,105054 252495,105849 252195,106409 C 251753,107236 252323,107597 254098,107613 C 255596,107627 256988,107689 257537,107767 C 257667,107785 257832,107984 257903,108210 C 258016,108565 258143,108603 258867,108495 C 260180,108299 260795,108673 262785,110880 C 263755,111956 263908,113534 263113,114270 C 262712,114642 262569,114981 262540,115633 L 262500,116500 L 265400,116502 C 268552,116503 269611,116877 269917,118096 C 269978,118340 270308,118666 270649,118820 C 270991,118974 271367,119267 271485,119471 C 271603,119675 271937,120101 272228,120418 C 272518,120735 272810,121212 272877,121478 C 273083,122299 274364,124068 275061,124495 C 276160,125167 276729,125684 277059,126307 C 277232,126633 277997,127548 278759,128340 C 279870,129493 280172,129943 280276,130598 C 280352,131071 280542,131467 280728,131538 C 280995,131641 281028,131871 280923,132894 C 280765,134428 281051,136003 281641,136851 C 282323,137834 283250,138800 283511,138800 C 283639,138800 284153,139160 284653,139600 C 285357,140220 285725,140400 286289,140400 C 286689,140400 287283,140580 287608,140800 C 287934,141020 288451,141369 288759,141576 C 289419,142019 291098,142313 292500,142231 C 293619,142166 296400,143731 296400,144426 C 296400,144608 296535,144809 296700,144872 C 296865,144936 297000,145201 297000,145463 C 297000,145724 297180,146101 297400,146300 C 297620,146499 297800,146823 297800,147019 C 297800,147216 297885,147429 297989,147493 C 298264,147663 299400,149383 299400,149628 C 299400,149742 299603,150000 299850,150200 C 300125,150423 300310,150805 300325,151182 C 300339,151522 300361,152115 300375,152500 C 300391,152951 300499,153200 300677,153200 C 301041,153200 301187,153812 301056,154786 C 300975,155395 301047,155697 301375,156114 C 301870,156743 301930,157644 301500,158000 C 301119,158316 301115,158880 301491,159192 C 301707,159372 301771,159833 301741,160980 C 301701,162482 301719,162546 302350,163179 C 302708,163537 303000,163919 303000,164026 C 303000,164133 303270,164315 303600,164430 C 304070,164594 304200,164758 304200,165189 C 304200,165491 304378,165899 304595,166095 C 304812,166292 305182,166851 305418,167337 C 305653,167823 306083,168374 306373,168560 C 307070,169010 309000,170906 309000,171142 C 309000,171244 309225,171524 309500,171763 C 309817,172038 310000,172408 310000,172774 C 310000,173091 310125,173455 310278,173582 C 310828,174038 310885,175587 310377,176273 C 310050,176716 309917,177179 309906,177919 C 309879,179687 308335,181393 307023,181105 C 306697,181033 306237,181109 305888,181291 C 305564,181460 305139,181598 304941,181599 C 304744,181599 304069,182112 303441,182738 C 302814,183365 301895,184091 301400,184352 C 300905,184613 300383,184978 300241,185163 C 300028,185441 299616,185500 297909,185500 C 296072,185500 295766,185551 295226,185950 C 294711,186330 294363,186400 292990,186400 C 291668,186400 291264,186476 290832,186803 C 290539,187025 290120,187341 289900,187505 C 289680,187669 289217,188028 288871,188302 C 288525,188576 288044,188800 287803,188800 C 287561,188800 287134,188980 286855,189200 C 286575,189420 286147,189600 285904,189600 C 285661,189600 285296,189783 285094,190007 C 284776,190358 284506,190409 283134,190380 C 281741,190350 281502,190397 281221,190758 C 281019,191018 280554,191221 279967,191305 C 278340,191541 277377,193062 278308,193925 C 278869,194445 278720,195154 278009,195340 C 277452,195485 276200,197115 276200,197694 C 276200,197979 276065,198264 275900,198328 C 275716,198398 275600,198701 275600,199109 C 275600,199914 273612,202200 272911,202200 C 272671,202200 272411,202391 272297,202650 C 272185,202906 271884,203129 271600,203168 C 271325,203205 270916,203405 270692,203613 C 270438,203848 270022,203981 269591,203965 C 268961,203941 268094,204150 266841,204626 C 266065,204920 265212,204821 264594,204364 L 264003,203927 L 263539,204364 C 263283,204604 262934,204800 262762,204800 C 262590,204800 262342,204929 262211,205087 C 262080,205245 261731,205429 261436,205496 C 260702,205663 259640,206664 259478,207342 C 259242,208332 257313,209600 256044,209600 C 254898,209600 254431,210583 254351,213162 C 254320,214166 254217,214800 254085,214800 C 253770,214800 253051,213964 252968,213500 C 252860,212899 252062,212875 251523,213456 C 249850,215261 246800,215417 246800,213697 L 246800,213269 L 244750,213753 C 242165,214364 240590,214516 240019,214210 C 239642,214009 239503,214054 239001,214538 C 236558,216900 234812,217461 233580,216281 C 232812,215545 232201,215758 232197,216763 C 232193,217616 232069,217851 231450,218177 C 231001,218413 230200,218194 230200,217834 C 230200,217437 228595,216000 228152,216000 C 227885,216000 227472,215770 227222,215482 C 226801,214998 226693,214973 225599,215100 C 224231,215259 223218,214501 223206,213311 C 223198,212483 222295,211253 221581,211096 C 221262,211026 220888,210812 220750,210621 C 220222,209888 219138,210011 218411,210887 C 218268,211059 217983,211200 217777,211200 C 217572,211200 217291,211380 217154,211600 C 216812,212146 215037,212144 213828,211596 C 213349,211378 212758,211200 212516,211200 C 212274,211200 211902,211068 211688,210906 C 210866,210284 210147,210554 208445,212124 C 207925,212604 207439,212997 207364,212998 C 206564,213010 205515,216304 206018,217222 C 206284,217707 206526,219232 206715,221609 C 206825,222988 205898,224800 205083,224800 C 204918,224800 204540,224979 204242,225198 C 203757,225554 203342,225601 200300,225637 C 196394,225684 195247,226160 196511,227209 C 197117,227712 197230,228162 196906,228788 C 196403,229761 196688,231280 197557,232257 C 197764,232489 197858,232919 197829,233491 C 197793,234170 197881,234460 198215,234771 C 199556,236021 198485,238400 196581,238400 C 195820,238400 195548,238311 195354,238000 C 195151,237676 194887,237600 193964,237600 C 193337,237600 192762,237501 192687,237380 C 192612,237258 192259,237037 191902,236888 C 191239,236611 190871,235768 191126,235105 C 191189,234941 191029,234547 190770,234231 C 190512,233914 190165,233452 190000,233203 C 189190,231980 189117,231937 187782,231900 C 187077,231881 186185,231724 185800,231552 C 184394,230924 182576,230891 181938,231482 C 181631,231767 181167,232000 180908,232000 C 180349,232000 178670,233882 178759,234408 C 178790,234593 178587,234893 178308,235076 C 178029,235259 177800,235534 177800,235687 C 177800,236022 176791,237600 176577,237600 C 176493,237600 176365,238000 176291,238488 C 176218,238976 175988,239530 175779,239719 C 175290,240161 175298,240708 175803,241349 C 176181,241830 176185,241885 175872,242231 C 175561,242574 175561,242625 175869,242966 C 176081,243200 176200,243679 176200,244297 C 176200,245011 176326,245428 176686,245899 C 177149,246507 177164,246617 177012,248291 C 176839,250185 177050,251372 177590,251540 C 178364,251781 178825,252112 179246,252730 C 179496,253097 179864,253398 180064,253399 C 180264,253399 180996,253805 181690,254300 C 183047,255269 183542,255365 185199,254983 C 186005,254797 186131,254819 186431,255188 C 186961,255844 188772,255442 189754,254450 C 190243,253957 190508,253889 190705,254208 C 190776,254323 191010,254360 191226,254292 C 191761,254122 192222,254543 192087,255079 C 191940,255667 193072,256115 193906,255798 C 194376,255619 194533,255655 194934,256031 C 195557,256617 199748,256690 200371,256126 C 200569,255947 201052,255800 201443,255800 C 201981,255800 202234,255678 202482,255300 C 202891,254675 203609,254649 204542,255226 L 205231,255652 L 205808,255226 C 206125,254992 206470,254800 206576,254800 C 207080,254800 207668,253365 207431,252711 C 207118,251845 207140,251066 207481,250935 C 207636,250876 207821,250560 207892,250234 C 207964,249908 208198,249483 208411,249290 C 208625,249096 208800,248852 208800,248748 C 208800,248643 209003,248310 209250,248007 C 209498,247704 209835,247259 210000,247019 C 210525,246253 211513,245790 212148,246012 C 213556,246503 214471,248845 213502,249480 C 213134,249721 213015,249934 213100,250200 C 213166,250408 213036,250937 212810,251381 C 212584,251823 212399,252300 212398,252442 C 212397,252584 212175,253150 211904,253700 C 211634,254250 211410,254980 211406,255323 C 211403,255666 211209,256189 210975,256486 C 210572,256998 210567,257063 210864,257763 C 211036,258168 211227,258680 211288,258900 C 211440,259449 213238,261400 213592,261400 C 213998,261400 215381,262380 216069,263155 C 216449,263584 216770,263773 216995,263702 C 217197,263637 217536,263782 217819,264054 C 218084,264307 218525,264627 218800,264765 C 221972,266356 222988,267803 222410,269911 C 221817,272072 221848,272324 222731,272533 C 223512,272718 224237,273491 224277,274181 C 224289,274408 224863,275173 225550,275880 C 226348,276701 226802,277334 226805,277633 C 226811,278159 227937,278800 228858,278800 C 229147,278800 229565,278994 229786,279231 C 230171,279644 231293,279850 233033,279826 C 233886,279814 234825,281849 234097,282129 C 233138,282497 234325,284400 235513,284400 C 235672,284400 235998,284625 236237,284900 C 236476,285175 236777,285400 236905,285400 C 237034,285400 237355,285588 237619,285817 C 237996,286144 238263,286209 238850,286115 C 239521,286008 239713,286087 240675,286871 C 242405,288280 245243,288353 243600,286946 C 243050,286476 243042,285099 243587,284807 C 244569,284281 246444,285154 247465,286611 C 247727,286985 247978,287045 249405,287078 C 250691,287107 251097,287189 251294,287458 C 251434,287650 251809,287800 252147,287800 C 254041,287800 256707,290204 255890,291175 C 255411,291745 254600,292034 254600,291636 C 254600,290678 251669,290113 250796,290903 C 250515,291158 250216,291222 249700,291139 C 248957,291018 247172,291756 246656,292397 C 246319,292817 246341,293872 246707,294747 C 247641,296982 244104,298914 242400,297100 C 241635,296285 241000,296421 241000,297400 C 241000,298079 241063,298200 241419,298200 C 241650,298200 242078,298371 242371,298579 C 243020,299042 246290,299130 246800,298698 C 246965,298559 247415,298378 247800,298297 C 248185,298215 248678,298025 248895,297874 C 249111,297724 249726,297600 250260,297600 L 251232,297600 L 251100,298200 C 250943,298915 250708,298868 254200,298811 L 256900,298766 L 257750,299426 C 258218,299789 258600,300156 258600,300243 C 258600,300329 258829,300400 259110,300400 C 259396,300400 259822,300619 260082,300900 C 260675,301539 261328,301536 261927,300890 C 262555,300212 262526,300058 261707,299716 C 261226,299515 260973,299254 260878,298863 C 260730,298253 260164,297348 259511,296679 C 259285,296448 258766,295901 258359,295465 L 257617,294671 L 258129,293951 L 258642,293231 L 261771,293222 L 264900,293213 L 265521,292507 C 266252,291676 266226,291680 267342,292220 C 268438,292751 269035,292612 269573,291701 C 269800,291316 270112,291000 270266,291000 C 270655,291000 271600,291773 271600,292090 C 271600,292234 271803,292487 272050,292653 L 272500,292955 L 272078,293531 C 271846,293848 271595,294300 271520,294536 C 271446,294771 271253,295073 271092,295206 C 270932,295340 270800,295609 270800,295805 C 270800,296468 269594,297600 268888,297600 C 268536,297600 268137,297735 268000,297900 C 267840,298093 267397,298200 266762,298200 C 264978,298200 264316,299333 265500,300363 C 266081,300868 266103,300988 265706,301512 C 265328,302012 265328,303388 265706,303888 C 266273,304637 264567,307200 263503,307200 C 263221,307200 262599,307625 261885,308306 C 260725,309412 260069,309746 259494,309526 C 259096,309373 256630,310302 256091,310808 C 255862,311024 255542,311200 255380,311200 C 254947,311200 253861,312710 253708,313526 C 253600,314101 252958,314842 250251,317516 C 246561,321160 246279,321314 245391,320165 C 244436,318931 242921,317600 242470,317600 C 242224,317600 241899,317424 241748,317208 C 241276,316534 239994,316465 239415,317083 C 239148,317367 238770,317600 238573,317600 C 237385,317600 235800,319434 235800,320808 C 235800,321658 234792,322400 233638,322400 C 232713,322400 232449,322476 232246,322800 C 232109,323020 231912,323200 231808,323200 C 231577,323200 229855,324349 229693,324611 C 229629,324715 229315,324800 228995,324800 C 228619,324800 228339,324941 228200,325200 C 227897,325766 226338,325766 225854,325200 C 225417,324690 225105,324695 224581,325219 C 224200,325600 224021,325626 222604,325500 C 221553,325407 221003,325434 220912,325581 C 220588,326104 219057,325826 218293,325107 L 217558,324413 L 217698,323021 C 217797,322033 217949,321527 218219,321283 C 218830,320730 218722,319714 217997,319198 C 216502,318133 216913,316848 219148,315602 C 219614,315342 220054,314944 220126,314718 C 220198,314492 220436,314065 220656,313767 C 221120,313139 221020,312120 220449,311664 C 219740,311097 218601,310400 218386,310400 C 218263,310400 217933,310219 217651,309998 C 217370,309776 216795,309540 216374,309473 C 215033,309258 214625,307292 215636,305914 C 217038,304002 215631,301547 213447,302095 C 212907,302231 211409,303389 211404,303676 C 211402,303773 211018,304234 210550,304701 C 208973,306278 208987,306252 209125,307253 C 209416,309379 208045,310326 204600,310376 C 203047,310399 202601,310477 202158,310802 C 201793,311070 201300,311200 200646,311200 C 200103,311200 199506,311329 199288,311494 C 199075,311655 198710,311790 198477,311794 C 198244,311797 197839,311967 197577,312172 C 196572,312956 194468,313825 193911,313685 C 193511,313585 193279,313655 192992,313962 C 192549,314438 191107,314713 190150,314503 C 188400,314120 186800,314757 186800,315837 C 186800,316547 185574,317552 184267,317915 C 182640,318365 181967,319151 182473,320009 C 182653,320313 182800,320673 182800,320808 C 182800,321363 186786,325590 187314,325595 C 187938,325602 189671,326213 189912,326512 C 190029,326656 190374,326836 190678,326912 C 190983,326989 191326,327259 191442,327512 C 191739,328165 192424,328365 194633,328446 L 196566,328517 L 197591,329509 C 198154,330054 198667,330705 198731,330955 C 198866,331488 199366,331800 200087,331800 C 200661,331800 200770,331390 200300,331000 C 200135,330863 200000,330596 200000,330406 C 200000,330216 199816,329849 199590,329589 C 198879,328768 199115,327734 200049,327584 C 200461,327518 200956,327326 201149,327158 C 201462,326886 202353,326591 202900,326580 C 203624,326564 204761,327076 205410,327710 C 206292,328571 208420,328806 209172,328125 C 209370,327946 209609,327800 209705,327800 C 209800,327800 210137,327553 210453,327250 L 211028,326700 L 211608,327400 C 212426,328385 212195,328979 210988,328994 C 209650,329010 209093,330602 210287,330996 C 210832,331176 211084,331179 211289,331009 C 211461,330866 211924,330828 212532,330906 C 213064,330974 214040,330942 214700,330834 C 215657,330679 215964,330696 216216,330919 C 216783,331424 217302,331242 217978,330301 C 218364,329763 218840,329350 219162,329273 C 219458,329203 219803,329064 219929,328966 C 220168,328778 221414,329249 222038,329763 C 222329,330002 222468,329996 223019,329720 C 223822,329320 225199,329306 225712,329694 C 226257,330106 226875,330069 227300,329600 C 227499,329380 227821,329200 228016,329200 C 228210,329200 228782,328885 229286,328500 C 229791,328115 230376,327800 230586,327800 C 230797,327800 231273,327445 231645,327010 C 232463,326054 233167,325758 234222,325927 C 234969,326046 235619,325855 236800,325167 C 239232,323750 242808,324685 240788,326209 C 240541,326395 240405,326647 240483,326773 C 240713,327145 241369,327031 241612,326577 C 241798,326230 241964,326174 242536,326267 C 242920,326329 243721,326290 244316,326180 C 245366,325986 245422,325999 246194,326619 L 246989,327258 L 246644,327854 C 246455,328183 245993,328687 245618,328976 C 245243,329264 244568,329825 244118,330223 C 243668,330620 242873,331133 242350,331362 C 241704,331644 241400,331897 241400,332151 C 241400,332667 242173,333453 242541,333312 C 243066,333110 243975,332313 244107,331937 C 244299,331392 245403,330200 245716,330200 C 245866,330200 246125,329937 246291,329617 C 246689,328849 247682,328527 249700,328512 C 251425,328499 251722,328623 253629,330151 C 254075,330510 254679,330859 254971,330927 C 255745,331108 256770,332152 257337,333336 L 257833,334371 L 257388,334973 C 257002,335496 256945,335815 256957,337389 L 256971,339202 L 256235,339909 C 255831,340298 255259,340667 254964,340730 C 254669,340793 254219,341067 253964,341340 L 253500,341835 L 254050,342275 C 255206,343200 253459,345600 251629,345600 C 251477,345600 250834,345915 250200,346300 C 248877,347103 248500,347160 248200,346600 C 248082,346380 247857,346200 247700,346200 C 247542,346200 247095,346048 246706,345863 C 246034,345542 245985,345543 245730,345893 C 245440,346290 245000,346162 245000,345681 C 245000,345284 243057,345515 242530,345975 C 242185,346277 242130,346259 241691,345709 C 241228,345128 241214,345125 240806,345494 C 240400,345862 240380,345861 239804,345435 C 239132,344937 238940,344909 238424,345231 C 238148,345403 237574,345408 236172,345249 C 234813,345094 234013,345096 233295,345256 C 232748,345378 231805,345461 231200,345441 C 230277,345410 230047,345475 229769,345843 C 229506,346190 229215,346287 228369,346308 C 227781,346323 227045,346440 226734,346569 C 226187,346794 225424,346852 223286,346827 C 222245,346815 221960,346991 220750,348394 C 220145,349096 218880,348704 219021,347858 C 219089,347448 218980,347189 218788,347307 C 218671,347380 218630,347682 218697,347984 C 218763,348285 218720,348785 218601,349096 L 218386,349662 L 215562,349533 C 213462,349438 212651,349327 212403,349102 C 211940,348684 211543,348724 211233,349222 C 211036,349537 210834,349617 210435,349537 C 210141,349479 209744,349545 209554,349684 C 209311,349863 208927,349892 208254,349781 C 207729,349695 206799,349618 206186,349612 C 205256,349602 205001,349518 204638,349101 C 204226,348626 204167,348615 203452,348872 C 202062,349372 201274,349600 200933,349600 C 200747,349600 200426,349705 200220,349834 C 199528,350266 195891,349689 195019,349008 C 193658,347945 191400,348116 191400,349281 C 191400,350658 193328,351035 200038,350969 C 205144,350920 205606,350944 205975,351277 C 206309,351580 206484,351604 207037,351428 C 208511,350957 211062,350920 212045,351355 C 213616,352050 213593,353761 212016,353510 C 210896,353331 210576,353664 211233,354322 C 211819,354910 213920,355082 214511,354591 C 214727,354412 214992,354457 215684,354792 C 216362,355121 216671,355176 216961,355021 C 217261,354860 217488,354922 218011,355308 C 218378,355579 218766,355800 218873,355800 C 218981,355800 219234,355950 219436,356132 C 219846,356504 220398,356835 221326,357268 C 221670,357428 222012,357658 222087,357780 C 222162,357901 222383,358000 222577,358000 C 222771,358000 223142,358225 223400,358500 C 223972,359109 224192,359121 224882,358579 C 225435,358144 225656,358144 227300,358579 C 228892,359000 230233,358858 230880,358198 C 231215,357856 231763,357556 232180,357486 C 233421,357278 233561,357199 233773,356592 C 234001,355938 234584,355799 235000,356300 C 235375,356752 235662,356663 236054,355976 C 236319,355511 236509,355382 236816,355462 C 237102,355537 237385,355388 237762,354965 C 238579,354048 238880,353948 239460,354404 C 239737,354622 240151,354800 240382,354800 C 240819,354800 240944,354513 240600,354300 C 240490,354232 240400,354047 240400,353888 C 240400,353422 242034,353512 242672,354014 C 243034,354299 243336,354384 243640,354287 C 244286,354082 247842,354042 248236,354235 C 248569,354397 249200,353981 249200,353598 C 249200,353212 250830,353451 251385,353918 C 251862,354319 252041,354360 252605,354199 C 252969,354094 253481,354063 253744,354129 C 254079,354213 254363,354117 254692,353807 C 255025,353495 255360,353383 255838,353424 C 256237,353459 256715,353342 257002,353141 C 257270,352954 257831,352800 258249,352800 C 258854,352800 259045,352707 259183,352350 C 259278,352103 259693,351630 260104,351300 C 260516,350970 261156,350401 261526,350036 C 262005,349564 262312,349409 262591,349497 C 262861,349583 263063,349493 263240,349211 C 263388,348973 263708,348800 264001,348800 C 264325,348800 264576,348645 264703,348364 C 264811,348124 265170,347832 265500,347714 C 266527,347348 267194,346779 267362,346127 C 267490,345628 267643,345487 268112,345434 C 268435,345398 268886,345195 269113,344984 C 269607,344525 270801,344437 271849,344783 C 272721,345071 273000,344954 273000,344300 C 273000,343715 273322,343486 273701,343801 C 274017,344063 275400,343726 275400,343386 C 275400,343286 275657,342955 275972,342652 C 276287,342348 276694,341808 276876,341452 C 277059,341095 277431,340658 277704,340479 C 278354,340053 278333,339816 277650,339862 C 277150,339897 277104,339843 277148,339271 C 277209,338470 277033,338406 274738,338381 C 273281,338365 272799,338284 272373,337981 C 272079,337771 271756,337600 271657,337600 C 270936,337600 270364,336424 270473,335169 C 270534,334471 270592,333724 270601,333509 C 270630,332873 270980,332606 271617,332733 C 272127,332835 272202,332791 272216,332375 C 272225,332114 272446,331540 272708,331100 C 272969,330660 273359,329929 273573,329476 C 273840,328913 274131,328610 274494,328519 C 274815,328439 275119,328163 275263,327822 C 275538,327169 276615,326200 277067,326200 C 277238,326200 277961,325705 278674,325100 C 279387,324495 280095,324000 280248,324000 C 280400,324000 280790,323723 281113,323384 C 282117,322331 283620,321736 284607,322002 C 285523,322249 285882,322099 287051,320982 C 287385,320662 287815,320400 288005,320400 C 288195,320400 288458,320271 288589,320113 C 288955,319673 289882,319549 290785,319819 C 291429,320012 291774,320011 292429,319815 C 293791,319407 294517,320283 294452,322255 C 294385,324296 294740,325589 295477,325986 C 295797,326159 296201,326458 296374,326650 C 296547,326843 296781,327004 296894,327009 C 297125,327020 298519,328926 298465,329158 C 298446,329240 298369,329553 298294,329854 C 298195,330248 298232,330400 298428,330401 C 298578,330402 298940,330528 299234,330681 C 299527,330834 300157,331024 300634,331102 C 301110,331181 301590,331317 301700,331404 C 301810,331491 303065,331652 304488,331762 C 306463,331914 307132,332037 307310,332280 C 307439,332456 307626,332600 307725,332600 C 307825,332600 308220,332768 308604,332974 C 308988,333180 309686,333413 310155,333492 C 310624,333572 311135,333763 311290,333918 C 311445,334073 311833,334200 312154,334200 C 312570,334200 312797,334333 312949,334668 C 313067,334926 313486,335290 313881,335478 C 314277,335665 314600,335901 314600,336002 C 314600,336103 314889,336515 315243,336918 L 315885,337650 L 317193,337505 C 317912,337425 318680,337372 318900,337386 C 319120,337400 320078,337432 321029,337456 C 322351,337490 322849,337582 323145,337850 C 323413,338093 323864,338200 324621,338200 C 325328,338200 325884,338321 326202,338544 C 326472,338733 327144,338910 327696,338938 C 330755,339092 331048,339136 331233,339466 C 331336,339650 331601,339800 331823,339800 C 333886,339800 332971,341873 330665,342424 C 330134,342551 329581,342687 329435,342727 C 328927,342865 329298,343474 330000,343655 C 330385,343755 330800,343918 330922,344019 C 331247,344287 332787,343547 333651,342708 C 334618,341769 336056,341819 337132,342830 C 337813,343470 337723,343929 336825,344387 C 335627,344998 335439,345893 336394,346437 C 337225,346909 337404,347742 336779,348223 C 336256,348625 335495,348716 335300,348400 C 335232,348290 334777,348200 334288,348200 C 333675,348200 333280,348080 333011,347811 C 332797,347597 332280,347362 331861,347289 C 331443,347215 330901,347030 330657,346878 C 330169,346572 329400,346504 329400,346768 C 329400,346860 329890,347175 330489,347468 C 331087,347761 331633,348091 331700,348201 C 331768,348310 332088,348400 332412,348400 C 332735,348400 333180,348580 333400,348800 C 334003,349403 337509,349403 337700,348800 C 337834,348377 338292,348263 338500,348600 C 338568,348710 338900,348800 339239,348800 C 340416,348800 342316,351049 342487,352646 L 342625,353934 L 341729,354617 C 340093,355864 340358,356956 342215,356620 C 344179,356265 344095,356257 344160,356816 C 344274,357795 343605,358298 342233,358267 C 341057,358240 341020,358255 340813,358849 C 340507,359728 340548,360000 340988,360000 C 341202,360000 341435,360096 341508,360212 C 341580,360329 341855,360507 342119,360607 C 342740,360843 342843,362527 342250,362736 C 342058,362804 341585,362993 341200,363156 L 340500,363454 L 341284,363631 C 343385,364106 343047,365600 340838,365600 C 339281,365600 338590,365398 338351,364872 C 338133,364394 337275,364230 336516,364521 C 336017,364713 336081,366430 336600,366754 C 337107,367070 337112,367637 336611,368090 C 336397,368283 336195,368635 336161,368871 C 336102,369284 336019,369298 333867,369242 C 332476,369207 331585,369263 331505,369392 C 331341,369658 330288,369661 329795,369397 C 329378,369174 329168,369428 328924,370450 L 328792,371000 L 330869,371000 C 332643,371000 333020,371058 333455,371400 C 334092,371901 334299,371901 334802,371398 C 335207,370993 338541,370946 340515,371316 C 340951,371398 341341,371308 341818,371017 C 342329,370706 342836,370601 343838,370601 C 344574,370600 345232,370510 345300,370400 C 345368,370290 345742,370200 346130,370200 C 346534,370200 347055,370029 347345,369800 C 347676,369540 348157,369400 348717,369400 C 349198,369400 349651,369287 349740,369146 C 350051,368651 350921,368473 352700,368542 C 353690,368580 354703,368610 354950,368609 C 355927,368605 356381,368611 358546,368655 C 360641,368697 360813,368731 361116,369163 C 361295,369418 361566,369579 361717,369521 C 361869,369463 362366,369547 362822,369708 C 363780,370046 364600,370088 364600,369800 C 364600,369690 364372,369600 364094,369600 C 363518,369600 363199,369050 363621,368783 C 364061,368504 364988,368570 365584,368922 C 366241,369310 367257,368890 368606,367671 L 369394,366959 L 372047,367000 C 376611,367070 382479,366787 382653,366487 C 382770,366286 383725,366218 386753,366199 C 392993,366157 393850,366195 394367,366529 C 394838,366834 395503,366827 398657,366487 C 399381,366409 399912,366444 400077,366581 C 400255,366728 402499,366803 407009,366811 C 412766,366821 413752,366867 414223,367145 C 414713,367435 414814,367437 415234,367162 C 415636,366898 417019,366857 425300,366864 C 433853,366871 434969,366836 435530,366541 C 436065,366260 436855,366212 440761,366220 C 443291,366226 445758,366171 446245,366098 C 446731,366025 447482,366060 447914,366175 C 448416,366309 448987,366319 449494,366203 C 450158,366052 450402,366092 450976,366447 C 451663,366872 451676,366872 466905,366826 C 482661,366779 483787,366828 484190,367581 C 484347,367875 484822,367902 488633,367832 C 493804,367736 493371,367732 495200,367902 C 496025,367979 499715,368075 503400,368114 C 508711,368171 510266,368248 510900,368484 C 511829,368830 512639,368881 512910,368610 C 513030,368490 513992,368486 515496,368600 C 517556,368755 517938,368737 518235,368468 C 518518,368212 519230,368151 522207,368128 L 525835,368100 L 526437,367350 C 526768,366938 527163,366600 527315,366600 C 527467,366600 527736,366379 527913,366108 C 528091,365837 528430,365557 528668,365485 C 528906,365413 529298,365173 529539,364953 C 529850,364668 530127,364588 530487,364679 C 530766,364749 531167,364699 531378,364567 C 531684,364376 531855,364390 532233,364637 C 532625,364895 532920,364912 533982,364741 C 534906,364592 535428,364598 535865,364763 C 536221,364898 536558,364919 536685,364815 C 536974,364577 539370,364590 539518,364830 C 539589,364944 539748,364926 539918,364785 C 540083,364648 540458,364602 540817,364673 C 541156,364741 541603,364705 541812,364594 C 542078,364451 542306,364463 542579,364633 C 542872,364816 543035,364820 543244,364646 C 543631,364326 544323,364552 544695,365121 C 545091,365725 545540,365730 546008,365136 C 546452,364570 548866,364474 549495,364996 C 549693,365160 550344,365309 550974,365335 C 551593,365361 552505,365532 553000,365716 C 554027,366098 556738,366225 563300,366197 C 565610,366187 567590,366186 567700,366194 C 567810,366202 568530,366206 569300,366203 C 570070,366199 571015,366203 571400,366212 C 574742,366285 575534,366332 575760,366474 C 575907,366566 576298,366514 576660,366355 C 577187,366123 578062,366103 581600,366243 C 587032,366458 592033,366290 592260,365885 C 592348,365728 592697,365600 593036,365600 C 593374,365600 594138,365322 594732,364981 C 595757,364395 595839,364380 596300,364681 C 597037,365165 597519,365080 597793,364418 L 598034,363835 L 599667,363907 C 601694,363995 604709,364355 605477,364601 C 605842,364718 606190,364712 606427,364586 C 606684,364448 606936,364459 607238,364620 C 607695,364865 611233,364557 612100,364197 C 612789,363911 614117,363838 614517,364063 C 616402,365128 620294,364222 620095,362766 C 619941,361643 620293,361317 621900,361090 C 623098,360921 623406,360775 624676,359771 C 625213,359347 625779,359000 625933,359000 C 626088,359000 626454,358843 626748,358650 C 627141,358393 627693,358300 628834,358300 C 630223,358300 630410,358254 630619,357865 C 630906,357329 631668,357115 632227,357414 C 632460,357539 632925,357581 633273,357508 C 634259,357302 636378,357021 637800,356907 C 640198,356714 640690,356592 641392,356013 C 641997,355513 642058,355383 641876,354971 C 641320,353707 643349,352583 643997,353795 C 644159,354096 644397,354203 644860,354180 C 645541,354148 646595,354386 647900,354868 C 648537,355103 649188,355132 651100,355011 C 652420,354928 653681,354926 653902,355006 C 654123,355087 654944,355108 655726,355052 C 656999,354961 657216,355000 657791,355425 C 658776,356153 663434,356149 664024,355420 C 664389,354969 664427,354962 664788,355289 C 665021,355500 665577,355655 666233,355692 C 666820,355725 667619,355816 668009,355895 C 668645,356024 668743,355985 668957,355515 L 669196,354991 L 671913,355039 C 673407,355065 674674,355157 674727,355243 C 674986,355662 675621,355257 677134,353705 C 678044,352773 679009,351955 679279,351887 C 679549,351820 679926,351592 680116,351382 C 680589,350860 681237,350903 681881,351500 C 682709,352268 684652,352045 684217,351233 C 683611,350099 684127,348600 685124,348600 C 685592,348600 685800,348507 685800,348300 C 685800,347932 685555,347965 688848,347888 L 691597,347823 L 692698,348873 C 693903,350022 693992,350340 693417,351467 C 692857,352564 692612,352800 692026,352801 C 691298,352803 690179,353147 689700,353517 C 689210,353896 689960,354703 690611,354496 C 690806,354434 691024,354477 691095,354592 C 691307,354935 695935,354852 697206,354482 C 697808,354307 698525,354168 698800,354173 C 706740,354321 707676,354219 707561,353221 L 707500,352700 L 704524,352692 C 702471,352687 701395,352764 701052,352942 C 700253,353356 699823,353265 699677,352650 C 699474,351795 699024,351386 698446,351531 C 698172,351600 697985,351576 698030,351478 C 698717,349995 698779,349970 701370,350140 C 702918,350242 703298,350210 703479,349964 C 703896,349399 713649,349059 714286,349589 C 714479,349749 714708,349748 715126,349586 C 715442,349464 716420,349338 717300,349307 C 718284,349273 719127,349129 719491,348933 C 719930,348697 720379,348646 721238,348735 C 721904,348805 722900,348749 723591,348602 C 724509,348407 724921,348401 725347,348578 C 726006,348851 725448,348834 733676,348824 C 740704,348814 742028,348658 742298,347805 C 742535,347060 742915,346955 743528,347464 C 744408,348197 746400,348359 746400,347699 C 746400,346963 745973,346998 755196,346984 C 758309,346980 759156,346921 759412,346689 C 759588,346530 759927,346400 760166,346400 C 760405,346400 760600,346311 760600,346202 C 760600,346093 761049,345486 761599,344852 C 762148,344218 762733,343543 762899,343350 C 763064,343158 763200,342690 763200,342312 C 763200,341933 763290,341568 763400,341500 C 764205,341002 762994,340834 762038,341311 C 761221,341719 752754,341508 751900,341058 C 751680,340943 751209,340892 750853,340946 C 749710,341120 749240,340880 748972,339986 C 748650,338911 747611,338393 746769,338888 C 746477,339060 746131,339200 746001,339200 C 745870,339200 745534,339380 745255,339600 C 744975,339820 744615,340000 744455,340000 C 744294,340000 743954,340165 743698,340366 C 743264,340707 742686,340730 734977,340715 L 726720,340699 L 725810,341620 C 725310,342126 724785,342688 724644,342868 C 724504,343048 724144,343245 723844,343305 C 723545,343365 722895,343547 722400,343708 C 721007,344163 717995,344101 717147,343601 C 716162,343020 709463,342901 708852,343453 C 708503,343769 708391,343777 707802,343529 C 707248,343296 707059,343295 706621,343520 C 706334,343668 705594,343841 704976,343905 C 703959,344011 703808,344091 703376,344749 C 702841,345567 702081,345866 700984,345691 C 700472,345609 700195,345665 700010,345888 C 699685,346279 698625,346282 698112,345894 C 697898,345732 697558,345600 697355,345600 C 697152,345600 696533,345370 695978,345089 C 694854,344520 694400,344647 694400,345531 C 694400,345815 694257,346056 694050,346120 C 693858,346179 693308,346405 692828,346622 C 692141,346932 691822,346975 691328,346824 C 690983,346718 689367,346592 687738,346545 L 684776,346457 L 684029,345729 C 683619,345328 683174,345000 683040,345000 C 682907,345000 682602,344775 682363,344500 C 682124,344225 681778,344000 681595,344000 C 681411,344000 681054,343820 680800,343600 C 680268,343138 680211,343130 679484,343406 C 679107,343550 678742,343546 678280,343393 C 677609,343172 676607,343620 676140,344350 C 675919,344695 675412,344664 675271,344297 C 675123,343911 672744,344104 672045,344557 C 671638,344821 671550,344817 671215,344514 C 670935,344260 670657,344209 670117,344310 C 668952,344529 666824,344224 666374,343774 C 665569,342969 662282,342899 661190,343665 C 660926,343849 660544,344000 660340,344000 C 659310,344000 658484,345666 659106,346488 C 659722,347302 659131,348200 657980,348200 C 657688,348200 657337,348335 657200,348500 C 656852,348919 656329,348874 655887,348386 C 655493,347950 654408,347981 653848,348444 C 653710,348558 653188,348606 652688,348549 C 652069,348479 651461,348567 650787,348823 C 649472,349323 649373,349307 648860,348516 C 648522,347993 648200,347782 647460,347600 C 645865,347207 643544,347031 643155,347274 C 642891,347440 642664,347406 642202,347133 C 641510,346724 640490,346940 639652,347674 C 639249,348026 639127,348040 638431,347810 C 637532,347513 636911,347659 636309,348309 C 635919,348730 635656,348782 633390,348888 C 632021,348952 630765,349012 630600,349022 C 630435,349032 629760,348944 629100,348827 C 627660,348572 625784,348787 625308,349264 C 624794,349778 622666,349732 622094,349194 C 621680,348805 621000,348822 621000,349221 C 621000,349581 620107,349325 618719,348566 C 618509,348451 617789,348328 617119,348292 C 616448,348257 615394,348090 614776,347923 C 613227,347504 611731,347834 611640,348615 C 611587,349074 611652,349133 612240,349149 C 613240,349176 614846,349494 615337,349761 C 615577,349893 616156,350000 616624,350000 C 617214,350000 617612,350129 617925,350423 C 618204,350685 618741,350885 619338,350947 C 620004,351017 620485,351214 620900,351587 C 621230,351883 621748,352230 622050,352358 C 622621,352600 622724,352895 622411,353389 C 622267,353616 622126,353631 621746,353457 C 621073,353151 620754,353417 620833,354222 L 620900,354900 L 619237,355038 C 618080,355134 617350,355308 616837,355611 C 616229,355970 615906,356026 614991,355930 C 613881,355815 612922,356013 611356,356682 C 610947,356857 610317,357003 609956,357006 C 609595,357010 609125,357145 608912,357306 C 608352,357729 605389,357708 604551,357275 C 604205,357096 603294,356912 602527,356867 C 601362,356798 601056,356703 600675,356292 C 600424,356021 600129,355800 600020,355800 C 599910,355800 599403,355519 598894,355175 C 598056,354609 597921,354575 597473,354815 C 597061,355035 596870,355034 596339,354811 C 595951,354647 594853,354533 593545,354521 L 591390,354500 L 590683,355249 C 589535,356466 588124,356350 586219,354882 C 585546,354363 585275,354255 585071,354424 C 584541,354864 581808,353986 581187,353176 C 580891,352790 580670,352769 576987,352779 C 572138,352792 570268,352206 569589,350460 C 569344,349831 568276,349622 565700,349697 C 564490,349733 563399,349679 563275,349577 C 563151,349476 562656,349395 562175,349397 C 558220,349419 557739,349386 557185,349059 C 555891,348295 556489,346937 558162,346839 L 559204,346779 L 558668,346076 C 558077,345301 557490,345276 556700,345992 C 555580,347007 551662,346603 550566,345359 C 550033,344754 550028,344753 548988,345003 L 547945,345253 L 547298,344483 C 546702,343773 546614,343732 546176,343966 C 544818,344690 544587,344851 544395,345210 C 543466,346946 541326,344783 542112,342903 C 542394,342228 542394,342125 542112,341813 C 541521,341160 541756,340137 542596,339702 C 543334,339320 543733,338351 543428,337682 C 543303,337406 543200,336976 543200,336726 C 543200,336294 541884,335200 541364,335200 C 541253,335200 540934,335020 540655,334800 C 540375,334580 539888,334400 539573,334400 C 539258,334400 538820,334220 538600,334000 C 538080,333480 537200,333461 537200,333969 C 537200,334432 537735,334907 538447,335076 C 538749,335148 539154,335450 539347,335748 C 539541,336047 539955,336519 540267,336799 L 540834,337308 L 540493,338160 C 540305,338628 539983,339102 539776,339213 C 539523,339348 539400,339633 539400,340086 C 539400,340524 539286,340801 539072,340883 C 538796,340989 538762,341215 538862,342288 C 538952,343245 538913,343624 538707,343795 C 538251,344173 538106,345565 538480,345978 C 539230,346807 538581,347400 536925,347400 C 536458,347400 535902,347532 535688,347694 C 535112,348129 533933,348079 533500,347600 C 533301,347380 532897,347200 532602,347200 C 532113,347200 530800,345945 530800,345477 C 530800,345066 530119,344626 529628,344720 C 528731,344892 527928,343667 528042,342299 C 528145,341056 528988,339839 529763,339814 C 530514,339791 531000,339428 531000,338889 C 531000,337830 529488,337839 527043,338912 C 526682,339070 526230,339200 526038,339200 C 525846,339200 525510,339325 525292,339478 C 525074,339631 524094,339823 523114,339905 C 521909,340005 521115,340182 520658,340452 C 520167,340741 519766,340821 519192,340744 C 518758,340686 517797,340714 517057,340805 C 515106,341047 514705,340916 514024,339809 C 513055,338234 511633,337808 510319,338700 C 509479,339270 508379,339357 507986,338884 C 507769,338621 507482,338593 506312,338718 C 504677,338892 504625,338890 503300,338602 C 502750,338483 502064,338389 501776,338394 C 501487,338399 501139,338267 501001,338101 C 500673,337705 500440,337721 499500,338200 C 498580,338669 498026,338700 497142,338330 C 496761,338171 496334,338125 496098,338216 C 495244,338550 493190,338421 492655,338000 C 492322,337738 491843,337600 491271,337600 C 490644,337600 490299,337487 490054,337200 C 489813,336919 489464,336800 488883,336800 C 488360,336800 487868,336654 487551,336404 C 487274,336186 486834,335915 486574,335801 C 486313,335687 485703,335370 485219,335097 C 484734,334823 484120,334600 483855,334600 C 483590,334600 483200,334507 482987,334393 C 482103,333920 481155,335978 482012,336508 C 483259,337278 482412,338400 480584,338400 C 478584,338400 477578,336260 478894,334807 C 479868,333730 477618,333124 475900,334000 C 474848,334536 473811,334317 472600,333302 C 472435,333164 471949,332988 471520,332911 C 470700,332764 469600,331857 469600,331330 C 469600,330883 468660,330222 468198,330343 C 467979,330400 467553,330282 467250,330080 C 466948,329879 466533,329741 466328,329773 C 466123,329806 465689,329578 465364,329266 C 464674,328608 462494,328480 461836,329060 C 461651,329222 461188,329422 460808,329503 C 459806,329716 458870,330551 458396,331655 C 457918,332766 457482,333000 455897,333000 C 455203,333000 454763,333096 454660,333271 C 454504,333536 453759,334000 453491,334000 C 453270,334000 453607,332927 453947,332550 C 454240,332224 454220,332200 453662,332200 C 453316,332200 452909,332031 452700,331800 C 452172,331217 451725,331274 451883,331904 C 452052,332578 451541,332770 450777,332318 C 450141,331943 449800,332033 449800,332579 C 449800,333145 450846,333923 451971,334193 C 452668,334360 453081,334583 453229,334871 C 453351,335107 453620,335488 453829,335717 C 454037,335946 454183,336351 454154,336616 C 454072,337348 454928,337415 455201,336698 C 455373,336244 455484,336187 455978,336295 C 456490,336408 456578,336352 456774,335788 C 456978,335202 457046,335164 457674,335282 C 458178,335376 458383,335332 458468,335111 C 458637,334671 459769,334262 461537,334000 C 462397,333873 463486,333641 463957,333485 C 465035,333127 469607,333087 469952,333432 C 470080,333560 470615,333813 471142,333994 C 472313,334398 472704,335926 471760,336412 C 471507,336542 471075,336852 470800,337100 C 470420,337443 469976,337576 468950,337653 C 468177,337711 467380,337898 467084,338092 C 466709,338338 466357,338394 465792,338299 C 465126,338186 464940,338242 464498,338684 C 464113,339069 463776,339200 463173,339200 C 462583,339200 462269,339318 462011,339636 C 461692,340030 461598,340048 461051,339821 C 460562,339619 460364,339619 460038,339823 C 459709,340028 459573,340026 459316,339813 C 459061,339602 458941,339600 458696,339803 C 458483,339980 458083,340011 457346,339908 C 455692,339675 454863,339803 453969,340428 C 453529,340737 453013,340805 450919,340835 C 449534,340854 448400,340911 448400,340961 C 448400,341012 448589,341358 448819,341731 C 449291,342495 449209,343000 448613,343000 C 448394,343000 448118,343180 448000,343400 C 447745,343877 447400,343926 447400,343485 C 447400,343225 447310,343242 446873,343585 C 446075,344213 443576,344192 443153,343554 C 442859,343111 442820,343108 438189,343154 C 433861,343196 433466,343170 432755,342800 C 432333,342580 431717,342400 431386,342400 C 431055,342400 430431,342220 430000,342000 C 429341,341664 428821,341600 426739,341600 C 424516,341600 424225,341559 423900,341200 C 423667,340943 423284,340800 422827,340800 C 422260,340800 421941,340629 421256,339957 C 420471,339187 420315,339117 419461,339154 C 418340,339203 417887,338867 417591,337768 C 417478,337346 417302,337000 417200,337000 C 417099,337000 416518,336595 415911,336100 C 415303,335605 414692,335200 414553,335199 C 414414,335199 414005,335019 413645,334799 C 413285,334580 412874,334400 412731,334400 C 412588,334400 412011,333825 411448,333122 C 410874,332406 410089,331681 409662,331472 C 408960,331129 408892,331022 408800,330104 L 408700,329107 L 407725,328945 C 407178,328854 406439,328545 406041,328241 C 405370,327729 403726,327241 402577,327213 C 402289,327206 401825,327020 401545,326800 C 401232,326554 400734,326400 400249,326400 C 399716,326400 399345,326271 399100,326000 C 398901,325780 398526,325600 398267,325600 C 398008,325600 397642,325420 397454,325200 C 397265,324980 396974,324797 396806,324794 C 395048,324760 394267,320693 395615,318591 C 395788,318321 395983,317954 396049,317776 C 396114,317597 396417,317389 396721,317312 C 397026,317236 397376,317035 397500,316866 C 397625,316695 398160,316513 398712,316454 C 399255,316396 399844,316224 400021,316070 C 400551,315609 402100,315853 403094,316553 C 403566,316886 404165,317223 404426,317304 C 404687,317384 405061,317618 405258,317825 C 406119,318727 408400,317848 408400,316614 C 408400,316384 408670,315914 409000,315569 C 409330,315223 409600,314815 409600,314661 C 409600,314507 409809,314183 410065,313940 C 411502,312581 411435,311766 409857,311368 C 409245,311214 408917,311006 408800,310700 C 408707,310455 408489,310200 408315,310134 C 407798,309935 407953,309632 408792,309204 C 409787,308697 409654,308660 410289,309620 C 410798,310388 410878,310433 411566,310322 C 413920,309944 413944,309944 414329,310327 C 415133,311125 416833,311830 417630,311695 C 418966,311469 419865,312380 419723,313816 C 419515,315929 420582,317679 422415,318228 C 424451,318838 424709,319972 423044,320998 C 421402,322009 421200,322198 421200,322728 C 421200,323008 421380,323466 421600,323745 C 421820,324025 422002,324444 422005,324677 C 422008,324939 422323,325328 422834,325700 C 423287,326030 424013,326593 424448,326950 C 425017,327418 425442,327601 425969,327603 C 426371,327605 426925,327737 427200,327898 C 427475,328058 427982,328324 428327,328488 C 428723,328676 429003,328990 429090,329343 C 429437,330754 432624,332947 433986,332712 C 434378,332645 435150,332520 435700,332435 C 437157,332209 437957,331610 437684,330950 C 437543,330611 435927,329600 435524,329600 C 435346,329600 435016,329416 434792,329192 C 434568,328968 434185,328698 433942,328592 C 433699,328487 433365,328316 433200,328212 C 433035,328109 432665,327975 432379,327915 C 430710,327568 429770,325811 430385,324190 C 430621,323571 430730,322921 430665,322523 C 430455,321231 433398,319378 435163,319689 C 435568,319761 436530,319889 437300,319975 C 438070,320060 438953,320236 439263,320365 C 439573,320494 440273,320600 440819,320600 C 441496,320600 441848,320691 441922,320886 C 442145,321466 444937,321364 445499,320757 C 446277,319914 446267,319623 445446,319253 C 445036,319067 444543,318787 444352,318629 C 443795,318170 441496,318304 440973,318827 C 440656,319144 440415,319210 439930,319110 C 439584,319039 438838,318989 438273,319000 C 437354,319018 435515,318553 434850,318134 C 434402,317852 434585,317242 435400,316300 C 436295,315266 436284,315301 435979,314426 C 435647,313473 435110,313271 434567,313895 C 434326,314173 433975,314400 433788,314400 C 433602,314400 433337,314535 433200,314700 C 432088,316039 428979,313391 429060,311173 C 429105,309935 428815,309400 428100,309400 C 427852,309400 427537,309265 427400,309100 C 427263,308935 427034,308800 426891,308800 C 426748,308800 426363,308575 426036,308300 C 425266,307652 424535,307646 424244,308284 C 423850,309148 419794,309139 419462,308273 C 419408,308134 418947,307957 418437,307880 C 417756,307778 417336,307563 416858,307070 C 416500,306702 416168,306400 416120,306400 C 415817,306400 414200,307220 414200,307374 C 414200,308246 411565,308946 410718,308300 C 410357,308025 409867,307800 409628,307800 C 409390,307800 409025,307694 408817,307564 C 407998,307053 406179,309402 406919,310016 C 407154,310211 407207,310479 407119,311028 C 407051,311449 407087,311830 407200,311900 C 407644,312174 407416,313540 406820,314179 C 406082,314969 405443,314975 404700,314200 C 404384,313870 403929,313600 403690,313600 C 403450,313600 403025,313420 402745,313200 C 402466,312980 402145,312800 402032,312800 C 401576,312800 401593,311949 402071,310750 C 403117,308128 402892,307000 401323,307000 C 400830,307000 400173,306898 399863,306773 C 399553,306648 398940,306473 398500,306385 C 396212,305925 395793,305738 394985,304815 C 393886,303560 393493,303159 392959,302746 C 392149,302120 391017,301600 390464,301600 C 389708,301600 387449,300207 387308,299653 C 387238,299378 386983,299156 386647,299076 C 386346,299005 385965,298834 385800,298697 C 385635,298560 385275,298380 385000,298299 C 384725,298217 384337,297979 384137,297770 C 383838,297456 383605,297412 382800,297519 C 381749,297658 380681,297207 379963,296320 C 379653,295937 379456,295909 377519,295971 L 375412,296038 L 375073,295329 C 374720,294587 374908,294000 375500,294000 C 375638,294000 375863,293865 376000,293700 C 376174,293490 376636,293400 377534,293400 C 378855,293400 380200,292587 380200,291789 C 380200,291641 380463,291245 380784,290910 C 382115,289519 382589,288153 382000,287400 C 381744,287073 381607,286584 381604,285986 C 381600,285136 381541,285032 380774,284530 L 379948,283989 L 379111,284395 C 378347,284764 377884,284800 373846,284800 C 370840,284800 369250,284877 368895,285039 C 368488,285224 368284,285224 367988,285039 C 367778,284907 367429,284800 367212,284800 C 366277,284800 365302,282531 365820,281562 C 365985,281254 365977,281030 365788,280677 C 365572,280273 365588,280145 365898,279802 C 366230,279435 366235,279370 365947,279050 C 365773,278858 365566,278430 365486,278100 C 365406,277770 365084,277172 364770,276771 C 363990,275774 364001,274865 364804,274096 C 365137,273777 365508,273185 365630,272780 C 366077,271287 366589,270901 368131,270893 C 369614,270886 370814,270300 371286,269352 C 371706,268510 372504,268240 373052,268755 C 373313,269000 373675,269200 373858,269200 C 374041,269200 374338,269425 374518,269700 C 374775,270092 375015,270200 375626,270200 C 376055,270200 376579,270309 376792,270441 C 377109,270640 377250,270617 377585,270313 C 378267,269697 379693,270012 380702,271002 C 381149,271441 381647,271801 381808,271802 C 382363,271806 383463,273161 383488,273871 C 383500,274236 383658,274759 383838,275033 C 384052,275360 384103,275631 383986,275816 C 383712,276249 383724,276271 384900,277456 C 385505,278066 386000,278694 386000,278852 C 386000,279409 386714,279834 387430,279702 C 387959,279604 388245,279686 388789,280089 C 389168,280370 389637,280600 389832,280600 C 390603,280600 391556,282676 390900,282928 C 390487,283086 390522,283788 390950,283921 C 391143,283980 391570,284145 391900,284287 C 392345,284478 392913,284500 394100,284372 C 397056,284055 399271,284240 399959,284863 C 400164,285049 400565,285200 400850,285200 C 401136,285200 401637,285425 401964,285700 C 403087,286645 405111,286337 406045,285078 C 407065,283704 408372,282415 408875,282288 C 409169,282215 409520,282007 409656,281827 C 410137,281187 411737,280268 413527,279604 C 413871,279476 414405,279107 414714,278785 C 415022,278463 415399,278200 415552,278200 C 415854,278200 417495,277306 418039,276845 C 418622,276352 418679,275495 418187,274620 C 417648,273661 417776,273200 418581,273200 C 420357,273200 421851,275433 420924,276702 C 420681,277034 420708,277172 421154,277846 C 421831,278869 420718,280600 419383,280600 C 419259,280600 418881,280833 418542,281118 C 418074,281512 417788,281608 417346,281519 C 416580,281366 415422,282278 413371,284650 C 412843,285260 412388,285600 412098,285600 C 410951,285600 410322,288263 411412,288503 C 411737,288574 412096,288805 412209,289016 C 412498,289556 412835,289495 413513,288781 C 413836,288441 414522,287947 415039,287684 C 415621,287387 416214,286862 416598,286302 C 416940,285806 417314,285400 417431,285400 C 417547,285400 417917,285169 418253,284886 C 418677,284529 419004,284408 419324,284488 C 419656,284572 419844,284492 419999,284202 C 420140,283939 420418,283800 420802,283800 C 421209,283800 421492,283646 421718,283300 C 421957,282936 422223,282800 422699,282800 C 423057,282800 423463,282665 423600,282500 C 423737,282335 424013,282200 424213,282200 C 425163,282200 425703,281323 425651,279866 C 425577,277817 427296,275392 428815,275402 C 428972,275403 429354,275110 429664,274752 C 429976,274392 430270,274199 430321,274322 C 430806,275476 431987,275332 432201,274093 C 432341,273287 433200,273279 433200,274084 C 433200,275664 434076,277961 434742,278128 C 435000,278193 435301,278416 435412,278623 C 435537,278857 435830,279000 436183,279000 C 436495,279000 436863,279135 437000,279300 C 437317,279682 437683,279682 438000,279300 C 438170,279096 438624,279000 439424,279000 C 440680,279000 440859,278810 440359,278008 C 440161,277692 440182,277552 440471,277232 C 440680,277001 440874,276367 440944,275684 C 441027,274884 441240,274265 441632,273684 C 441944,273221 442200,272740 442200,272614 C 442200,272061 444461,270258 445388,270072 C 445713,270007 446133,269784 446321,269577 C 446809,269037 447854,269098 448796,269721 C 449601,270254 452195,270293 452514,269778 C 453167,268721 455686,268531 456676,269464 C 457614,270349 459606,270417 460474,269593 C 461245,268861 461262,266225 460500,265563 C 460163,265270 460000,264921 460000,264495 C 460000,264146 459820,263654 459600,263400 C 459372,263137 459200,262652 459200,262269 C 459200,261901 459105,261600 458990,261600 C 458874,261600 458643,261308 458476,260950 C 457807,259519 457573,259252 456556,258769 C 455603,258315 454041,258163 452563,258380 C 452488,258391 452370,258580 452300,258800 C 452130,259334 451419,259316 450465,258753 C 449193,258002 444526,257951 443662,258678 C 443081,259167 442912,259200 440969,259200 C 439165,259200 438866,259248 438664,259572 C 438512,259815 438087,259990 437437,260076 C 436890,260149 436332,260341 436197,260504 C 436062,260667 435711,260800 435418,260800 C 434826,260800 433743,261301 432898,261965 C 432210,262507 431514,262519 430855,262000 C 430488,261712 430043,261600 429260,261600 C 428038,261600 427400,261345 427400,260856 C 427400,260674 427202,260315 426960,260058 C 426559,259631 426541,259514 426752,258745 C 427225,257018 425412,256272 423852,257550 C 422964,258278 422889,258300 421318,258305 C 419460,258311 418383,258794 416861,260305 C 416394,260768 415597,261290 415061,261482 C 414533,261671 413860,261956 413566,262115 C 413206,262310 412547,262387 411534,262352 C 410043,262300 410032,262304 409285,263050 C 408775,263559 408353,263800 407974,263800 C 406866,263800 406368,264712 407100,265400 C 407375,265658 407600,265959 407600,266069 C 407600,266179 407749,266433 407931,266634 C 408239,266975 408239,267025 407931,267366 C 407749,267567 407599,267949 407599,268216 C 407597,269223 407177,270139 406286,271083 L 405365,272058 L 404874,271529 C 404604,271238 404244,271000 404073,271000 C 403903,271000 403528,270815 403241,270589 C 402664,270135 401240,270207 400951,270704 C 400658,271210 398430,271298 397926,270824 C 397207,270149 396283,270063 395551,270605 C 394642,271277 392175,271429 391541,270852 C 391180,270522 390728,270431 389036,270343 C 387546,270266 386874,270148 386620,269918 C 386427,269743 386040,269600 385761,269600 C 385482,269600 385039,269433 384777,269229 C 384515,269025 383971,268797 383569,268724 C 383167,268650 382788,268457 382726,268295 C 382663,268133 382490,268000 382341,268000 C 382192,268000 381852,267764 381585,267475 L 381100,266950 L 378256,267069 C 375823,267171 375388,267143 375241,266880 C 375056,266549 373695,267165 373340,267741 C 373085,268155 372275,268044 371949,267550 C 371785,267303 371413,266862 371120,266571 C 370828,266281 370343,265678 370044,265232 C 369547,264493 367551,263210 366885,263203 C 366767,263201 366458,262975 366200,262700 C 365942,262425 365617,262200 365479,262200 C 365116,262200 364000,260465 364000,259900 C 364000,259636 363843,259331 363650,259223 C 363356,259058 363300,258729 363300,257151 C 363300,254988 362683,253600 361722,253600 C 361462,253600 361139,253467 361004,253305 C 360870,253143 360451,252953 360074,252882 C 359698,252811 359298,252584 359188,252377 C 359039,252100 358763,252000 358143,251999 C 357110,251998 356116,251178 355431,249763 C 355175,249235 354514,248433 353905,247913 C 353233,247339 352783,246777 352703,246411 C 352632,246090 352445,245720 352287,245589 C 352129,245458 352000,245101 352000,244797 C 352000,244382 351696,243945 350801,243071 C 349824,242116 349602,241780 349601,241250 C 349601,240893 349522,240600 349427,240600 C 349332,240600 348785,239836 348212,238901 L 347171,237203 L 347599,236601 C 347835,236271 348089,235999 348164,235999 C 348614,235994 349173,234656 349062,233846 C 348980,233237 349033,232892 349247,232646 C 349559,232287 349847,231322 349797,230800 C 349782,230635 349742,229777 349708,228894 C 349663,227688 349542,227115 349225,226594 C 348992,226212 348801,225755 348801,225579 C 348800,225402 348485,224845 348100,224341 C 347307,223303 347217,222645 347800,222146 C 348020,221958 348200,221678 348200,221523 C 348200,221369 348347,221186 348527,221117 C 348787,221018 348829,220816 348735,220126 C 348546,218753 348876,217937 349928,217170 C 350975,216408 351172,216219 353100,214133 C 355378,211668 356000,210879 356000,210458 C 356000,210036 358132,207200 358449,207200 C 358552,207200 359019,206805 359488,206323 C 359957,205841 360556,205379 360820,205297 C 361084,205215 361795,204758 362400,204282 C 364524,202609 365406,202000 365703,202000 C 365868,202000 366198,201775 366437,201500 C 366676,201225 367076,201000 367324,201000 C 367573,201000 367832,200910 367900,200800 C 368140,200412 369370,200571 369611,201021 C 369788,201351 369962,201418 370409,201328 C 370856,201239 371064,201318 371358,201692 C 371713,202143 371861,202171 374017,202193 C 375273,202205 376660,202223 377100,202231 C 378207,202253 379052,202005 379361,201569 C 379727,201052 380446,201110 381000,201700 C 381323,202044 381683,202200 382153,202200 C 382534,202200 383062,202377 383345,202600 C 383625,202820 383963,203000 384096,203000 C 384229,203000 384501,203180 384700,203400 C 384922,203646 385316,203800 385720,203800 C 386158,203800 386474,203938 386667,204214 C 386929,204588 387139,204624 388829,204590 C 389858,204569 391306,204654 392047,204779 C 393484,205022 394091,204860 394307,204177 C 394364,203999 394588,203692 394805,203495 C 395022,203299 395204,202994 395208,202819 C 395256,200878 398525,199955 401167,201137 C 403006,201959 405315,199759 405070,197417 C 404985,196598 405022,196115 405185,195918 C 405377,195687 405357,195520 405089,195111 C 404839,194730 404775,194310 404841,193504 C 404921,192549 404874,192362 404466,192008 C 404179,191759 404000,191381 404000,191026 C 404000,190709 403865,190337 403700,190200 C 402988,189609 405192,185819 407350,183923 C 407598,183706 407800,183420 407800,183288 C 407800,183157 407937,182935 408104,182796 C 408906,182131 410345,179624 410448,178714 C 410512,178149 410722,177596 410977,177325 C 411210,177077 411400,176687 411400,176459 C 411400,176230 411535,175991 411700,175928 C 411885,175857 412000,175553 412000,175136 C 412000,174764 412100,174173 412222,173822 C 412384,173359 412385,172953 412227,172342 C 412038,171610 412061,171430 412400,170964 C 412615,170670 412849,170066 412919,169624 C 412990,169181 413217,168665 413424,168478 C 414308,167678 413960,166248 412500,164692 C 411785,163930 411200,163184 411200,163035 C 411200,162885 411020,162534 410800,162255 C 410563,161954 410400,161443 410400,161004 C 410400,160541 410263,160138 410037,159934 C 409741,159666 409667,159251 409634,157665 C 409605,156276 409509,155631 409297,155396 C 408664,154698 409509,152173 411028,150223 C 411233,149961 411400,149530 411400,149267 C 411400,149003 411527,148739 411682,148679 C 412001,148557 413600,146302 413600,145975 C 413600,145859 413780,145534 414000,145255 C 414220,144975 414400,144536 414400,144280 C 414400,144019 414576,143720 414800,143600 C 415162,143406 415200,143181 415200,141205 C 415200,139961 415286,138970 415401,138900 C 415511,138831 415546,138555 415478,138285 C 415411,138015 415444,137683 415552,137547 C 415659,137411 415794,136867 415851,136338 C 415914,135744 416116,135203 416377,134925 C 416648,134636 416800,134212 416800,133744 C 416800,133130 417055,132696 418400,131024 C 419463,129703 420000,128864 420000,128525 C 420000,128220 420160,127928 420398,127801 C 420616,127684 420850,127370 420917,127102 C 420984,126835 421165,126512 421320,126384 C 421474,126256 421600,125870 421600,125526 C 421600,125050 421768,124766 422302,124340 C 423555,123340 423649,123059 423169,121756 C 422661,120376 422777,119741 423597,119401 C 423929,119264 424204,119050 424208,118926 C 424220,118607 425215,117500 425734,117230 C 426352,116907 427974,117163 428265,117629 C 428453,117930 428748,118000 429840,118000 C 430959,118000 431252,118072 431586,118431 C 432018,118895 435301,118881 436179,118411 C 436438,118273 436784,118297 437325,118491 C 438969,119083 440202,119400 440858,119400 C 441770,119400 442717,119748 443694,120442 C 444137,120757 444860,121247 445300,121530 C 445740,121814 446306,122238 446557,122473 C 446809,122708 447579,123395 448269,124000 C 449036,124672 449748,125528 450101,126200 C 450644,127234 451073,127857 452007,128967 C 452223,129224 452400,129550 452400,129693 C 452400,129835 452661,130059 452979,130191 C 453834,130546 454786,133211 454647,134861 C 454562,135862 454607,136077 454974,136419 C 455208,136637 455400,136902 455400,137008 C 455400,137114 455602,137200 455848,137200 C 456522,137200 459040,138511 459710,139211 C 460560,140097 460684,144756 459879,145502 C 459616,145746 459400,146081 459400,146246 C 459400,146411 459210,146788 458978,147083 C 458588,147579 458580,147647 458878,147975 C 459055,148171 459200,148437 459200,148567 C 459200,148826 463731,153400 463987,153400 C 464074,153400 464386,153589 464680,153820 C 465049,154111 465367,154201 465712,154115 C 466087,154021 466325,154114 466678,154495 C 466935,154773 467289,155000 467463,155000 C 467899,155000 469551,156140 469911,156689 C 470073,156936 470422,157237 470685,157357 C 470949,157477 471227,157770 471303,158008 C 471378,158246 471656,158760 471920,159149 C 472505,160010 472532,160531 472000,160700 C 471538,160847 471301,161573 471505,162217 C 471612,162553 471531,162750 471179,163016 C 470720,163362 470718,163378 471082,163781 C 471985,164777 471427,169600 470409,169600 C 470312,169600 470075,170027 469883,170550 C 469690,171073 469402,171654 469242,171842 C 469043,172077 468994,172403 469084,172886 C 469172,173354 469113,173787 468909,174183 C 468715,174557 468675,174823 468801,174900 C 469160,175122 469016,176395 468562,177008 C 468088,177650 467959,181020 468404,181168 C 468878,181326 469224,181878 469116,182307 C 469032,182641 469135,182842 469517,183093 C 469963,183385 470014,183526 469907,184165 C 469794,184838 471614,187000 472295,187000 C 472859,187000 474023,188196 473887,188635 C 473792,188938 474289,189486 477000,192065 C 477165,192222 477872,192946 478570,193675 C 479539,194685 479972,195000 480396,195000 C 480701,195000 481063,195135 481200,195300 C 481337,195465 481660,195600 481917,195600 C 482182,195600 482480,195775 482601,196002 C 482719,196223 483657,197235 484685,198252 C 485713,199268 486691,200370 486860,200700 C 487028,201030 487429,201593 487752,201952 C 488075,202310 488479,202895 488650,203252 C 490364,206818 490884,207821 491122,208018 C 491275,208145 491400,208428 491400,208646 C 491400,208864 491625,209219 491900,209436 C 492175,209652 492400,209921 492400,210033 C 492400,210145 492580,210466 492800,210745 C 493045,211057 493200,211557 493200,212034 C 493200,212463 493347,213039 493527,213313 C 493712,213596 493897,214405 493952,215175 L 494049,216537 L 493315,216991 C 492659,217396 492544,217413 492240,217147 C 492053,216983 491540,216737 491100,216601 C 490660,216464 489998,216225 489630,216070 C 489143,215864 488560,215823 487501,215919 C 486089,216047 486027,216034 485571,215509 C 485141,215014 485014,214978 484100,215091 C 483346,215184 482805,215109 481900,214786 C 479612,213970 479371,214001 477877,215312 C 476390,216618 476217,216903 476651,217337 C 476981,217667 476054,219400 475548,219400 C 475293,219400 472400,222350 472400,222609 C 472400,222703 471932,223014 471360,223301 C 470789,223588 470136,224002 469910,224220 C 469685,224438 469239,224823 468919,225074 C 468406,225479 468332,225675 468287,226750 C 468217,228426 466519,231177 465536,231207 C 464768,231231 464144,232992 464249,234839 C 464340,236435 464309,236682 463976,236967 C 463769,237144 463600,237457 463600,237663 C 463600,238121 463053,238851 461550,240397 C 460686,241286 460400,241725 460400,242160 C 460400,242811 459639,244361 459012,244988 C 458785,245215 458600,245577 458600,245793 C 458600,246009 458420,246282 458200,246400 C 457980,246518 457800,246771 457800,246963 C 457800,247154 457673,247492 457518,247714 C 456443,249249 456877,251800 458214,251800 C 458813,251800 460800,249683 460800,249043 C 460800,248685 461760,247189 462149,246940 C 462287,246852 462400,246529 462400,246221 C 462400,245914 462580,245499 462800,245300 C 463020,245101 463200,244769 463200,244562 C 463200,244106 464462,242800 464904,242800 C 465078,242800 465343,242506 465494,242146 C 465644,241786 465954,241322 466183,241115 C 466413,240908 466600,240499 466600,240207 C 466600,239915 466732,239502 466894,239288 C 467062,239066 467190,238456 467194,237862 C 467197,237291 467299,236762 467420,236687 C 467542,236612 467767,236249 467921,235880 C 468085,235488 468471,235073 468851,234881 C 470359,234118 471419,232980 472138,231350 C 472271,231048 472471,230800 472582,230800 C 472693,230800 473030,230373 473332,229850 C 473633,229328 473997,228828 474140,228740 C 474283,228652 474400,228239 474400,227821 C 474400,227316 474534,226941 474800,226700 C 475066,226459 475200,226084 475200,225581 C 475200,225164 475290,224768 475400,224700 C 475510,224632 475600,224309 475600,223982 C 475600,223655 475735,223064 475900,222669 C 476065,222274 476200,221793 476200,221600 C 476200,221407 476335,221137 476500,221000 C 476673,220857 476800,220421 476800,219973 C 476800,217907 480885,217917 481992,219985 C 482158,220296 482430,220353 483702,220345 C 484909,220337 485323,220415 485757,220735 C 486056,220954 486745,221195 487289,221269 C 487846,221344 488462,221577 488702,221801 C 488935,222021 489401,222200 489738,222200 C 490075,222200 490455,222325 490582,222478 C 490708,222631 491214,222857 491706,222981 C 492198,223104 492600,223294 492600,223403 C 492600,223511 492886,223600 493235,223600 C 493960,223600 495924,224845 496107,225421 C 496307,226051 497827,227026 498410,226898 C 498750,226823 499092,226914 499413,227164 C 499681,227373 500320,227606 500834,227682 C 501347,227758 501881,227956 502019,228123 C 502158,228290 502525,228558 502835,228718 C 503146,228879 503400,229133 503400,229283 C 503400,229434 503648,229618 503950,229693 C 504252,229768 504841,230183 505258,230615 C 505675,231048 506319,231528 506689,231682 C 507059,231837 507419,232143 507488,232363 C 507558,232583 507747,232814 507908,232875 C 508068,232937 508200,233222 508200,233508 C 508200,234090 509287,235799 509660,235802 C 510094,235807 512200,238020 512200,238473 C 512200,239858 510042,242550 509118,242317 C 508908,242264 508514,242396 508241,242610 C 507969,242825 507500,243000 507199,243000 C 506533,243000 505074,244483 504898,245338 C 504452,247510 503963,247441 501086,244799 C 500348,244122 499126,243748 497500,243701 C 496840,243682 496014,243597 495665,243511 C 495069,243365 495019,243396 494837,244028 C 494731,244398 494585,244841 494514,245014 C 494425,245231 494549,245404 494913,245569 C 495468,245822 495481,246697 494934,247045 C 494586,247266 492843,247231 492700,247000 C 492343,246423 491782,246801 491918,247527 C 492049,248223 491997,248311 490677,249631 C 488724,251585 488200,252188 488200,252486 C 488200,252629 488011,252987 487779,253281 C 487304,253885 487378,255005 487924,255451 C 488091,255588 488402,255857 488614,256050 C 489391,256755 490215,256411 491944,254660 C 492619,253976 492947,253494 492871,253296 C 492801,253114 492955,252803 493248,252531 C 493520,252279 493778,251982 493821,251871 C 493865,251760 494547,251249 495337,250736 C 496128,250223 496827,249719 496890,249617 C 496953,249514 497266,249373 497586,249303 C 497905,249233 498213,249055 498269,248908 C 498326,248760 498761,248575 499236,248496 C 499711,248417 500326,248237 500602,248096 C 501013,247886 501197,247887 501608,248103 C 501885,248248 502694,248469 503406,248594 C 505246,248917 505400,248980 505400,249420 C 505400,249906 505976,250159 506219,249779 C 506342,249587 506274,249415 505999,249226 C 505442,248842 505492,248080 506100,247682 C 506375,247501 506601,247252 506601,247127 C 506604,246684 507968,245925 508286,246189 C 508483,246352 508690,246366 508937,246234 C 509380,245998 512559,245597 512913,245733 C 513053,245786 513398,245679 513680,245495 C 514069,245240 514422,245191 515146,245291 C 515671,245363 516595,245413 517200,245402 C 518681,245374 519959,245752 520338,246330 C 520735,246936 521000,246929 521000,246312 C 521000,245780 521297,245472 521498,245797 C 521686,246101 522350,246042 522914,245672 C 523368,245375 523485,245373 524193,245651 C 524823,245898 525042,245909 525336,245708 C 525536,245572 525945,245400 526244,245328 C 526602,245241 527011,244850 527444,244183 C 527924,243442 528434,242983 529348,242469 C 530035,242083 530757,241564 530952,241316 C 531148,241067 531531,240746 531804,240602 C 532444,240264 532593,240026 532597,239337 C 532600,238695 532859,238141 533415,237585 C 533627,237373 533800,237117 533800,237015 C 533800,236807 535894,235800 536324,235800 C 536476,235800 536960,236160 537400,236600 C 538341,237541 538842,237601 539503,236850 C 540083,236191 540102,236044 539664,235560 C 539367,235232 539357,235072 539581,234200 C 539720,233656 539775,232941 539702,232611 C 539612,232199 539734,231550 540091,230545 C 540377,229739 540688,228385 540784,227536 C 540879,226688 541076,225849 541222,225673 C 541535,225296 541993,224046 541997,223557 C 541999,223368 542179,223118 542398,223001 C 542962,222699 543400,221753 543400,220835 C 543400,220055 543928,218652 544500,217912 C 544665,217698 544800,217371 544800,217185 C 544800,216998 545025,216699 545300,216518 C 545575,216338 545800,216027 545800,215826 C 545800,215626 545976,215303 546191,215109 C 546477,214849 546550,214600 546464,214172 C 546388,213791 546454,213470 546655,213245 C 546824,213055 547061,212530 547182,212078 C 547750,209943 550202,208558 551070,209883 C 551244,210148 551740,210521 552172,210712 C 552870,211020 553800,212264 553800,212890 C 553800,212970 553994,213193 554231,213385 C 554591,213676 554678,214003 554756,215359 C 554829,216612 554936,217061 555225,217323 C 555431,217509 555600,217881 555600,218149 C 555600,218418 555780,218866 556000,219145 C 556540,219832 556503,220447 555877,221190 C 555390,221770 555364,221900 555494,223114 L 555633,224415 L 556718,225027 C 557314,225364 557869,225748 557951,225882 C 558206,226297 559069,226800 559525,226800 C 559811,226800 560103,227041 560375,227503 C 560603,227890 561032,228298 561328,228410 C 561623,228523 562863,229638 564082,230889 C 565864,232716 566463,233207 567127,233383 C 567581,233504 568065,233737 568201,233901 C 568337,234066 568522,234200 568612,234200 C 569123,234200 570046,235389 569922,235885 C 569638,237016 571123,238122 572082,237493 C 572520,237207 572630,237208 573331,237505 C 573754,237684 574505,237905 575000,237995 C 576306,238233 578400,239045 579223,239633 C 579806,240050 580200,239693 580200,238746 C 580200,238270 580300,237780 580423,237657 C 580546,237534 580748,237259 580873,237045 C 581642,235729 582234,235035 582684,234922 C 582998,234843 583240,234608 583315,234312 C 583382,234046 583608,233674 583818,233484 C 584028,233294 584200,232936 584200,232689 C 584200,232442 584568,231759 585017,231170 L 585835,230100 L 585725,228300 C 585617,226521 585623,226492 586215,225800 L 586813,225100 L 587557,225525 C 587966,225759 588674,226013 589132,226090 C 589590,226167 590121,226403 590313,226615 C 591397,227812 593082,226167 592854,224137 C 592772,223409 592836,223117 593175,222686 C 593476,222304 593600,221862 593600,221175 C 593600,220420 593689,220148 594000,219954 C 594618,219568 594618,211859 594000,211300 C 593344,210706 593527,210243 595016,208735 C 595795,207946 596574,207030 596746,206700 C 596918,206370 597361,205731 597730,205279 C 598284,204601 598401,204289 598406,203479 C 598410,202941 598541,202330 598698,202123 C 598855,201916 599043,201331 599116,200823 C 599189,200315 599370,199761 599519,199591 C 599919,199132 600714,197579 600870,196950 C 600980,196512 601123,196400 601573,196400 C 601892,196400 602303,196218 602516,195983 C 603152,195279 604552,194427 605303,194286 C 606574,194048 607350,195440 606418,196284 C 606208,196474 605976,196870 605902,197165 C 605829,197459 605635,197848 605472,198030 C 605223,198306 605211,198559 605401,199607 C 605796,201785 602589,206400 600681,206400 C 599508,206400 598424,207730 598701,208831 C 598821,209309 598648,209599 597452,210919 C 597206,211191 596949,211632 596882,211899 C 596816,212165 596635,212488 596480,212616 C 596116,212918 596124,213288 596502,213601 C 596668,213739 596858,214193 596925,214610 C 596994,215046 597249,215544 597523,215783 C 598003,216200 598061,216516 598090,218900 C 598105,220101 599015,220150 600207,219016 C 600674,218572 601215,218159 601410,218097 C 601604,218035 601873,217853 602006,217692 C 602140,217532 602401,217400 602586,217400 C 602933,217400 604994,215218 605234,214598 C 605309,214405 605678,214192 606064,214120 C 606447,214048 606870,213857 607004,213695 C 607139,213533 607371,213400 607519,213400 C 607977,213400 608449,212272 608174,211833 C 607608,210927 608706,209736 609661,210221 C 610222,210505 611956,212347 612105,212816 C 612167,213012 612477,213229 612793,213298 C 613109,213368 613568,213599 613814,213812 C 614060,214026 614467,214200 614719,214200 C 614970,214200 615231,214288 615297,214395 C 615363,214502 615766,214683 616193,214798 C 616840,214972 616994,215116 617112,215654 C 617190,216009 617407,216407 617595,216539 C 618099,216892 617922,221790 617373,222691 C 617169,223026 617001,223550 617001,223856 C 617000,224439 614344,227264 613564,227512 C 613364,227575 613148,227839 613082,228099 C 613017,228358 612792,228726 612582,228916 C 612372,229106 612200,229472 612200,229728 C 612200,230050 611953,230358 611400,230724 C 609773,231800 610259,233502 612922,236050 L 614332,237400 L 615975,237400 C 618248,237400 618924,236789 618380,235229 C 618241,234829 617984,234553 617679,234477 C 616521,234186 615644,231984 616411,231290 C 617227,230552 620200,230699 620200,231478 C 620200,231623 620426,231985 620701,232283 C 621204,232825 621322,234984 620906,236026 C 620675,236604 621672,237464 622442,237351 C 622801,237299 623253,237355 623447,237476 C 623709,237639 623903,237632 624199,237447 C 624536,237237 624660,237260 624999,237599 C 625220,237820 625603,238000 625850,238001 C 626455,238002 629094,239042 629559,239463 C 629806,239687 630276,239800 630954,239800 C 631741,239800 632040,239890 632249,240189 C 632399,240402 632967,240807 633511,241087 C 634055,241367 634811,241913 635190,242298 C 635570,242684 636047,243000 636250,243000 C 636453,243000 636772,243270 636959,243601 C 637147,243931 637477,244258 637693,244328 C 638826,244693 640418,246640 640289,247503 L 640165,248331 L 641879,249916 C 642822,250787 643595,251606 643597,251736 C 643599,251866 643863,252160 644185,252389 C 644506,252618 644826,253065 644896,253382 C 644966,253699 645198,254117 645411,254310 C 645977,254822 645896,255143 645000,255947 C 644068,256784 643885,257817 644600,258200 C 645348,258601 644961,259569 643423,261142 C 642952,261624 642600,262177 642600,262435 C 642600,262682 642375,263113 642099,263392 C 639256,266275 639180,266391 639769,266950 C 641766,268846 642289,269281 642593,269303 C 642882,269324 643697,269889 645070,271020 C 645435,271321 644983,272000 644418,272000 C 644112,272000 643699,272180 643500,272400 C 642940,273019 641317,272965 640891,272314 C 640058,271043 638000,271335 638000,272724 C 638000,273222 637799,273400 636900,273700 C 636101,273966 636031,274863 636800,274968 C 637075,275006 637458,275178 637651,275350 C 638045,275702 638609,276040 639500,276457 C 639830,276612 640225,276889 640378,277074 C 640542,277271 640806,277361 641020,277294 C 641257,277218 641473,277323 641642,277595 C 642113,278354 643603,278940 643929,278494 C 644333,277941 644259,277471 643684,276938 C 642296,275650 643928,274645 645875,275588 C 646343,275815 647008,276000 647351,276000 C 647695,276000 648032,276090 648100,276200 C 648305,276531 650139,276447 650272,276100 C 650336,275935 650583,275800 650822,275800 C 651229,275800 651249,275732 651140,274680 C 650985,273174 651218,272600 651985,272600 C 652333,272600 652658,272461 652767,272266 C 652870,272082 653256,271789 653624,271615 C 654429,271235 654594,270673 654018,270270 C 653470,269886 653491,269561 654111,268823 C 654649,268184 654599,267780 653911,267209 C 653559,266917 653497,265765 653803,265194 C 654205,264444 655481,264313 656510,264916 C 657218,265331 657581,265423 658159,265334 C 659028,265200 659203,265315 660353,266776 C 661299,267978 661316,268034 660914,268657 C 660757,268901 660525,269682 660398,270392 C 660248,271231 660015,271832 659734,272105 C 658797,273013 657991,274065 657873,274535 C 657805,274806 657581,275133 657375,275262 C 656449,275841 657981,277400 659476,277400 C 659661,277400 659863,277532 659925,277692 C 659986,277853 660217,278042 660437,278112 C 660657,278181 660965,278522 661121,278869 C 661278,279216 661495,279658 661603,279850 C 661711,280043 661876,280358 661970,280550 C 662063,280743 662341,281003 662589,281128 C 662836,281253 663367,281665 663769,282042 C 664171,282420 664760,282902 665078,283114 C 665396,283326 665782,283590 665936,283700 C 666143,283847 666309,283779 666565,283442 C 667119,282715 669968,282627 670617,283318 C 670876,283594 671298,283800 671604,283800 C 671991,283800 672444,284116 673254,284950 C 676253,288041 677186,288918 678059,289469 C 678366,289662 678698,290032 678796,290290 C 678894,290548 679142,290881 679347,291030 C 679551,291178 679930,291660 680189,292100 C 680722,293006 681814,294113 682345,294284 C 683240,294574 683600,295597 683600,297849 C 683600,300436 683739,300841 685043,302050 C 686456,303360 687600,303324 687600,301969 C 687600,301667 687704,301190 687832,300909 C 688003,300535 688006,300272 687845,299919 C 687686,299569 687687,299240 687848,298713 C 688049,298059 688028,297957 687635,297682 C 687086,297297 687010,295541 687519,294979 C 687813,294654 687803,294532 687401,293463 C 686535,291166 686865,290293 688406,290802 C 689931,291305 690344,292191 689632,293429 C 689152,294262 689078,294998 689436,295356 C 689566,295486 689723,295976 689786,296446 C 689897,297277 689923,297303 690754,297414 C 692148,297600 692335,298865 691145,300055 C 690948,300252 690468,300911 690080,301518 C 689691,302126 689244,302672 689087,302733 C 688661,302896 688738,303369 689300,304036 C 690611,305595 688938,306811 687424,305400 C 686312,304363 686159,304386 685413,305707 C 685070,306316 684589,306891 684344,306984 C 684100,307078 683729,307344 683519,307577 C 683109,308032 681926,308166 681690,307783 C 681616,307664 681183,307395 680728,307186 C 680273,306976 679747,306694 679559,306559 C 679276,306355 679137,306389 678746,306757 C 678487,307001 678036,307200 677744,307200 C 677426,307200 677132,307354 677009,307584 C 676896,307795 676553,308022 676248,308090 C 675942,308157 675424,308434 675096,308705 L 674500,309198 L 674975,309602 C 675237,309824 675687,310063 675975,310134 C 676264,310205 676869,310564 677321,310932 C 677772,311299 678328,311600 678556,311600 C 678784,311600 679148,311825 679364,312100 C 679581,312375 679830,312600 679918,312600 C 680006,312600 680309,312821 680591,313091 C 681086,313566 682404,314376 683369,314799 C 683627,314912 684212,315301 684669,315663 C 685126,316026 685750,316429 686056,316559 C 686361,316690 686663,316932 686727,317098 C 686794,317274 687092,317400 687440,317400 C 687768,317400 688269,317583 688553,317806 C 688881,318064 689330,318200 689785,318180 C 690178,318163 690725,318239 691000,318349 C 692066,318778 694390,318871 694799,318501 C 695318,318031 701416,317982 701959,318444 C 702784,319145 704065,319603 704390,319313 C 704561,319160 705150,318970 705700,318891 C 706250,318811 706939,318578 707231,318373 C 707523,318168 707819,318000 707889,318000 C 707959,318000 708215,317813 708458,317585 C 708923,317147 710179,317168 710727,317622 C 710862,317735 711289,317866 711675,317914 C 712844,318059 713387,318359 713721,319045 C 714079,319780 715726,321200 716220,321200 C 716398,321200 716974,321530 717502,321933 C 719487,323448 720051,323640 722667,323689 L 725034,323733 L 725967,322669 C 727032,321455 727207,321414 728419,322097 C 728903,322371 729435,322653 729600,322723 C 731035,323337 732075,323926 732267,324233 C 732619,324796 734400,324763 734400,324194 C 734400,323970 734268,323737 734108,323675 C 733947,323614 733759,323386 733691,323170 C 733509,322599 732034,321600 731372,321600 C 731020,321600 730708,321448 730554,321200 C 730409,320969 730087,320800 729791,320800 C 729483,320800 728971,320519 728510,320097 C 728088,319710 727508,319336 727221,319266 C 726934,319196 726485,318973 726223,318770 C 725961,318566 725625,318400 725478,318400 C 725330,318400 725062,318175 724882,317900 C 724701,317625 724402,317400 724217,317400 C 724032,317400 723794,317315 723690,317210 C 723337,316858 721581,316000 721213,316000 C 721013,316000 720327,315595 719689,315100 C 719052,314605 718451,314200 718355,314200 C 718258,314200 718048,313885 717887,313500 C 717726,313115 717508,312800 717402,312800 C 717148,312800 716600,311725 716600,311226 C 716600,311010 716446,310564 716258,310237 C 715958,309715 715952,309599 716206,309293 C 716365,309101 716468,308740 716436,308491 C 716403,308242 716472,307979 716588,307907 C 716705,307835 716800,307270 716800,306651 C 716800,305826 716901,305415 717178,305113 C 717386,304886 717656,304224 717778,303643 C 718325,301027 719985,300551 721717,302513 C 723879,304961 724107,305199 724284,305200 C 724385,305200 724989,305737 725625,306394 C 726820,307626 727833,308200 728813,308200 C 729462,308200 729552,308310 730117,309800 C 730452,310684 730676,310968 731259,311248 C 732484,311836 732908,315248 731843,315954 C 731002,316513 731170,316833 733399,318918 C 734292,319753 734414,319808 735032,319646 C 735477,319530 735987,319558 736561,319730 C 737145,319904 738017,319949 739261,319869 C 740964,319759 741128,319781 741481,320175 C 741691,320409 741953,320600 742065,320600 C 742177,320600 742427,320744 742622,320920 C 743084,321338 743400,321122 743400,320388 C 743400,319556 744037,319595 744414,320450 C 744687,321070 745600,321508 745600,321018 C 745600,320205 747514,319874 748619,320497 C 749873,321204 750364,321400 750874,321400 C 751576,321400 753856,322213 754313,322627 C 754542,322834 755032,323003 755413,323007 C 755791,323011 756325,323143 756600,323300 C 756875,323457 757348,323589 757650,323593 C 757953,323597 758383,323783 758606,324006 C 758830,324230 759282,324466 759610,324532 C 759939,324598 760257,324730 760316,324826 C 760375,324922 760586,325000 760785,325000 C 760984,325000 761381,325185 761667,325410 C 762090,325743 762267,325778 762606,325597 C 762836,325474 763280,325430 763593,325498 C 763915,325569 764219,325532 764293,325412 C 764365,325295 764758,325200 765167,325200 C 767059,325200 767441,326802 765877,328178 C 764408,329472 764826,330191 767050,330197 L 768000,330200 L 768000,357100 L 768000,384000 L 384000,384000 L 0,384000 L 0,357500 z M 320860,371872 C 320948,371722 321158,371600 321327,371600 C 321899,371600 321473,371100 320848,371038 C 320380,370992 320170,371082 319998,371404 C 319858,371665 319652,371786 319467,371715 C 319301,371651 318927,371786 318636,372015 L 318108,372430 L 319404,372287 C 320150,372204 320768,372028 320860,371872 z M 327114,371984 C 327389,371681 327641,371598 328045,371679 C 328759,371822 328762,371499 328050,371158 C 327723,371002 327500,370733 327500,370497 C 327500,370032 327249,369807 326724,369803 C 326399,369800 326366,369905 326475,370588 C 326547,371041 326516,371428 326400,371500 C 326103,371684 326158,372400 326469,372400 C 326617,372400 326907,372213 327114,371984 z M 324877,371687 C 325186,370883 324033,369723 323040,369838 C 322171,369938 322248,371075 323129,371161 C 323475,371195 323916,371397 324110,371611 C 324536,372082 324719,372100 324877,371687 z M 307911,371583 C 307985,371463 307955,371275 307844,371164 C 307596,370916 306731,371327 306906,371610 C 307066,371869 307745,371850 307911,371583 z M 309600,371512 C 309600,371353 309516,371172 309414,371109 C 309176,370962 308937,371336 309100,371600 C 309284,371898 309600,371842 309600,371512 z M 317410,371288 C 317552,371117 317968,370852 318334,370699 C 319053,370398 319209,369923 318657,369711 C 318412,369617 318097,369820 317562,370417 C 316488,371617 315042,371700 314231,370610 C 313575,369729 313353,369567 313122,369798 C 312935,369985 313294,370666 313901,371272 C 314357,371728 317034,371741 317410,371288 z M 357634,371269 C 358047,370895 358121,370400 357763,370400 C 357488,370400 356600,371190 356600,371435 C 356600,371720 357252,371615 357634,371269 z M 360563,371250 C 360481,370823 359600,370643 359600,371053 C 359600,371435 359795,371600 360248,371600 C 360503,371600 360607,371484 360563,371250 z M 347533,371267 C 347460,371193 347340,371193 347267,371267 C 347193,371340 347253,371400 347400,371400 C 347547,371400 347607,371340 347533,371267 z M 306400,370721 C 306400,370314 305942,370200 304311,370200 C 303147,370200 302749,370118 302335,369792 C 301781,369356 297885,369175 296139,369505 C 295208,369681 295073,370566 296000,370422 C 297529,370185 300925,370324 301500,370647 C 302303,371098 306400,371160 306400,370721 z M 366900,370600 C 366968,370490 366889,370400 366724,370400 C 366559,370400 366368,370490 366300,370600 C 366232,370710 366311,370800 366476,370800 C 366641,370800 366832,370710 366900,370600 z M 371000,369629 C 371000,368976 369997,368392 369403,368698 C 368611,369108 368642,369285 369550,369539 C 370524,369812 371000,369842 371000,369629 z M 327300,367367 C 328842,367463 329267,366879 328150,366198 C 327702,365924 327143,365801 326350,365801 L 325200,365800 L 325200,366722 L 325200,367645 L 325950,367487 C 326363,367401 326970,367347 327300,367367 z M 330611,366671 L 330812,366142 L 331256,366553 C 332141,367373 333420,367088 334491,365833 C 335486,364667 335507,364349 334579,364534 C 334137,364623 333817,364540 333395,364228 C 332674,363695 332197,363687 331545,364200 C 331266,364420 330948,364600 330840,364600 C 330731,364600 330590,364736 330527,364903 C 330463,365070 330183,365292 329905,365398 C 329397,365591 329247,366169 329521,366884 C 329716,367392 330387,367261 330611,366671 z M 335733,363667 C 335660,363593 335600,363653 335600,363800 C 335600,363947 335660,364007 335733,363933 C 335807,363860 335807,363740 335733,363667 z M 234933,357867 C 234860,357793 234740,357793 234667,357867 C 234593,357940 234653,358000 234800,358000 C 234947,358000 235007,357940 234933,357867 z M 608600,356200 C 608600,356090 608460,356000 608288,356000 C 608117,356000 608032,356090 608100,356200 C 608168,356310 608308,356400 608412,356400 C 608515,356400 608600,356310 608600,356200 z M 118735,353050 C 119582,351987 119502,351464 118375,350683 C 117583,350134 117580,350127 117708,349106 C 117828,348141 117806,348067 117318,347845 C 116331,347395 116661,345200 117716,345200 C 117955,345200 118263,345065 118400,344900 C 118537,344735 118916,344600 119242,344600 C 119601,344600 119968,344436 120170,344187 C 120473,343814 120709,343776 122603,343797 C 123756,343809 125082,343820 125548,343819 C 126186,343819 126448,343916 126606,344211 C 126766,344510 127015,344599 127658,344586 C 128121,344577 129005,344631 129621,344707 C 130536,344819 130794,344784 131021,344513 C 131175,344330 131421,344073 131568,343940 C 131716,343808 132185,343363 132610,342950 C 133097,342478 133575,342200 133898,342200 C 134213,342200 134455,342064 134523,341850 C 134684,341335 134953,340783 135405,340037 C 136047,338977 135601,338647 134681,339500 C 134291,339861 133918,340000 133337,340000 C 132873,340000 132379,340138 132172,340326 C 131894,340577 131355,340657 129822,340676 C 128083,340697 127773,340754 127366,341130 C 126736,341711 121942,341738 121521,341163 C 121056,340527 120216,340486 119672,341073 C 119026,341770 117160,341851 116754,341200 C 116245,340386 115131,340655 113856,341900 C 112583,343143 110883,343502 110414,342626 C 110000,341852 109063,341649 105456,341552 C 103562,341501 101897,341369 101756,341259 C 100855,340552 99208,340568 98609,341289 C 98261,341708 98111,341684 97491,341109 C 97091,340738 96821,340646 96391,340732 C 95947,340821 95545,340665 94563,340023 C 93123,339082 92859,339039 92118,339621 C 91678,339968 91424,340019 90693,339909 C 89899,339790 89750,339833 89311,340307 C 88886,340766 88714,340821 88050,340708 C 87430,340604 87170,340666 86710,341028 C 86189,341438 85915,341479 83603,341494 C 81516,341507 80969,341574 80517,341870 C 80027,342191 79400,342234 74725,342265 C 70106,342296 69419,342342 68948,342650 C 68654,342843 68073,343003 67657,343006 C 66839,343013 65800,343731 65800,344290 C 65800,344720 66766,344693 67255,344250 C 67959,343613 73889,343559 74737,344182 C 75263,344569 75591,344598 79700,344624 C 83674,344650 84146,344689 84579,345028 C 84959,345326 85337,345393 86407,345352 C 87463,345311 87841,345376 88144,345650 C 88682,346136 93407,346174 93804,345695 C 94030,345423 94100,345429 94450,345745 C 94795,346058 95329,346104 98960,346137 C 102960,346173 103089,346187 103414,346618 C 103623,346895 103869,347016 104069,346940 C 104955,346600 106000,347563 106000,348719 C 106000,349442 106926,350186 107836,350194 C 108240,350197 108706,350335 108871,350500 C 109051,350680 109541,350800 110095,350800 C 110818,350800 111129,350911 111528,351310 C 111931,351713 112262,351829 113112,351863 C 113703,351887 114298,352018 114433,352153 C 114569,352289 114919,352400 115210,352400 C 115502,352400 116047,352617 116420,352883 C 117240,353465 118340,353545 118735,353050 z M 715745,353000 C 716149,352683 716557,352600 717715,352600 C 718519,352600 719232,352510 719300,352400 C 719701,351751 715899,351538 715321,352177 C 715133,352384 714714,352607 714390,352672 C 714046,352741 713800,352917 713800,353095 C 713800,353554 715123,353489 715745,353000 z M 122850,352103 C 123471,351557 123544,351243 123090,351068 C 122703,350920 121800,351736 121800,352235 C 121800,352732 122191,352683 122850,352103 z M 686703,350876 C 686490,350551 686227,350397 685953,350438 C 685304,350534 685315,350931 685972,351160 C 686297,351273 686635,351576 686724,351833 L 686885,352300 L 686958,351838 C 686998,351585 686883,351152 686703,350876 z M 689600,350200 C 689600,350090 689510,350000 689400,350000 C 689290,350000 689200,350090 689200,350200 C 689200,350310 689290,350400 689400,350400 C 689510,350400 689600,350310 689600,350200 z M 214200,348312 C 214200,347933 213914,347769 213518,347921 C 213011,348115 213141,348600 213700,348600 C 214002,348600 214200,348486 214200,348312 z M 224600,345112 C 224600,344733 224259,344534 223868,344685 C 223615,344782 223602,344862 223802,345102 C 224117,345482 224600,345488 224600,345112 z M 447733,342667 C 447660,342593 447600,342653 447600,342800 C 447600,342947 447660,343007 447733,342933 C 447807,342860 447807,342740 447733,342667 z M 211362,339595 C 212446,339072 212425,338800 211300,338800 C 210433,338800 210400,338822 210400,339400 C 210400,340113 210324,340097 211362,339595 z M 141800,338550 C 142099,338180 142371,338099 143332,338088 C 144111,338080 144686,337954 145059,337709 C 145711,337281 145704,336693 145047,336714 C 144801,336722 143831,336745 142891,336764 C 141304,336797 141146,336839 140677,337350 C 140399,337653 139996,338085 139781,338312 C 139279,338841 139457,339000 140551,339000 C 141227,339000 141522,338894 141800,338550 z M 153234,337869 C 154037,337143 153321,336358 152150,336680 C 151494,336861 150526,337719 150686,337978 C 150906,338333 152812,338252 153234,337869 z M 127991,333911 C 128660,333104 127467,331882 126510,332395 C 126050,332641 125952,332625 125536,332234 C 125282,331995 124887,331800 124659,331800 C 124430,331800 124191,331665 124128,331500 C 123980,331114 123400,331108 123400,331493 C 123400,331654 123580,331882 123800,332000 C 124033,332124 124200,332419 124200,332703 C 124200,333071 124337,333226 124750,333327 C 125053,333401 125614,333628 125997,333831 C 126833,334273 127662,334307 127991,333911 z M 214294,334010 C 214358,333906 214229,333722 214006,333603 C 213548,333358 213476,332809 213850,332421 C 214052,332211 214024,332175 213700,332232 C 213212,332319 213001,333751 213436,334027 C 213788,334250 214150,334243 214294,334010 z M 447237,325397 C 448008,325392 448382,325030 447916,324740 C 447705,324608 447199,324208 446792,323850 C 446385,323493 445865,323200 445638,323200 C 445410,323200 445168,323110 445100,323000 C 445032,322890 444802,322800 444588,322800 C 443836,322800 444121,323667 445100,324357 C 445669,324759 446000,325143 446000,325403 C 446000,325747 446063,325781 446387,325607 C 446600,325493 446982,325399 447237,325397 z M 437152,324023 C 437643,323358 437565,323200 436749,323200 C 436164,323200 435420,323837 435407,324350 C 435393,324879 436700,324634 437152,324023 z M 460684,324479 C 461044,324340 461119,323297 460784,323090 C 460508,322920 459324,324116 459495,324393 C 459638,324623 460200,324664 460684,324479 z M 451388,323423 C 451499,323216 451826,322987 452115,322914 C 453576,322547 454154,321593 453210,321105 C 451855,320405 449800,321017 449800,322122 C 449800,323216 450981,324184 451388,323423 z M 96533,315067 C 96460,314993 96400,315053 96400,315200 C 96400,315347 96460,315407 96533,315333 C 96607,315260 96607,315140 96533,315067 z M 98300,314800 C 98368,314690 98233,314600 98000,314600 C 97767,314600 97632,314690 97700,314800 C 97768,314910 97903,315000 98000,315000 C 98097,315000 98232,314910 98300,314800 z M 175620,305579 C 176260,304894 176297,304755 175992,304185 C 175736,303706 174400,304841 174400,305537 C 174400,306391 174847,306406 175620,305579 z M 121561,295450 C 121527,294928 121410,294500 121300,294500 C 121190,294500 121073,294928 121039,295450 C 120990,296215 121041,296400 121300,296400 C 121559,296400 121610,296215 121561,295450 z M 200174,294859 C 202784,293415 203313,292726 202426,291924 C 201795,291353 198525,291400 197539,291994 C 196638,292537 194269,292505 193645,291941 C 192947,291311 190800,291944 190800,292780 C 190800,293313 191181,293558 192414,293817 C 193011,293942 193648,294175 193829,294335 C 194010,294494 194757,294833 195490,295089 C 196222,295345 196878,295611 196947,295680 C 197240,295973 198944,295540 200174,294859 z M 465763,290814 C 465825,289949 464865,288600 464189,288600 C 464085,288600 464000,288250 464000,287821 C 464000,287031 464223,286800 464985,286800 C 465179,286800 465501,286620 465700,286400 C 465899,286180 466253,286000 466486,286000 C 466965,286000 467769,285501 468161,284960 C 468305,284762 468627,284600 468876,284600 C 469126,284600 469542,284375 469800,284100 C 470058,283825 470437,283600 470641,283600 C 471267,283600 473004,281759 472868,281240 C 472805,280998 472687,280800 472606,280800 C 472525,280800 472221,280580 471931,280311 L 471403,279822 L 466883,279894 C 462629,279962 462335,279991 461918,280383 C 461674,280612 461265,280800 461009,280800 C 460753,280800 460429,280958 460288,281150 C 460076,281439 459714,281500 458220,281500 C 456568,281500 456380,281540 456093,281950 C 455684,282534 455054,282523 454583,281924 C 454264,281518 454081,281463 453342,281546 C 452571,281633 452436,281585 452126,281112 C 451868,280718 451673,280613 451372,280709 C 451102,280795 450815,280696 450515,280414 C 449814,279756 446056,279644 445797,280274 C 445700,280508 445304,280925 444916,281200 C 444046,281817 443854,283487 444600,283954 C 444888,284133 445000,284420 445000,284976 C 445000,285753 448401,289575 450049,290650 C 450798,291138 451926,291112 452200,290600 C 452327,290362 452619,290200 452920,290200 C 453403,290200 454029,289633 454800,288495 C 455349,287685 456418,286943 457255,286790 C 458640,286537 460086,288582 459100,289400 C 458601,289814 458742,290200 459393,290200 C 459781,290200 460060,290338 460200,290600 C 460367,290912 460622,291001 461357,291004 C 461990,291007 462464,291139 462800,291405 C 463194,291717 463554,291790 464500,291751 L 465700,291700 L 465763,290814 z M 495094,291207 C 495440,290824 495418,290783 494319,289727 C 491433,286954 491346,286423 493446,284396 C 494242,283628 494962,283000 495046,283000 C 495131,283000 495200,282506 495200,281902 C 495200,281020 495279,280754 495600,280554 C 495936,280344 496000,280087 496000,278960 C 496000,277649 496019,277598 496800,276876 C 497694,276048 497788,275632 497200,275100 C 496687,274636 496674,273681 497177,273412 C 497384,273301 497615,272966 497690,272668 C 497765,272369 497970,272020 498146,271891 C 498595,271562 498321,271000 497711,271000 C 497435,271000 496915,270820 496555,270601 C 495650,270049 494095,270049 493800,270600 C 493682,270820 493495,271000 493385,271000 C 492971,271000 490685,272181 490300,272594 C 490080,272830 489698,273230 489450,273484 C 488893,274055 488876,274519 489400,274800 C 489692,274956 489800,275219 489800,275775 C 489800,276392 489894,276579 490300,276764 C 490910,277042 491061,278912 490491,279131 C 490322,279196 490015,279576 489810,279975 C 489605,280374 489246,280880 489013,281100 C 488780,281320 488344,281763 488045,282084 C 487745,282404 487298,282848 487050,283070 C 486802,283291 486600,283579 486600,283709 C 486600,283839 486420,284175 486200,284455 C 485980,284734 485800,285230 485800,285557 C 485800,285947 485649,286251 485362,286442 C 484778,286830 486476,288600 487431,288600 C 487802,288600 488097,288763 488308,289084 C 488482,289350 489014,289750 489489,289974 C 489965,290197 490654,290655 491021,290990 C 491880,291775 494456,291911 495094,291207 z M 201560,289160 C 201972,288748 201826,288198 201129,287537 C 200017,286482 199468,285013 199990,284490 C 200932,283547 199806,281064 198557,281329 C 195888,281895 197980,289388 200810,289398 C 201091,289399 201428,289292 201560,289160 z M 208350,288967 C 209088,288750 209347,288767 210309,289094 C 212433,289816 213638,288408 211786,287369 C 211271,287080 210691,286497 210277,285850 C 209480,284605 209035,284516 207976,285389 C 206532,286579 205905,289757 207200,289319 C 207365,289263 207883,289105 208350,288967 z M 514119,288679 L 514500,287957 L 514000,287631 C 513725,287452 513261,287056 512970,286753 C 512301,286056 510412,285937 509961,286563 C 509818,286763 509543,286985 509350,287057 C 508917,287218 508896,287573 509310,287731 C 509487,287800 509745,287690 509915,287475 C 510195,287120 510265,287160 511251,288250 C 512587,289727 513492,289862 514119,288679 z M 212360,282160 C 212731,281789 212658,281641 211850,281135 C 210343,280189 209114,280295 209238,281359 C 209342,282250 211672,282848 212360,282160 z M 445760,279067 C 445848,278470 445340,278168 444365,278238 C 443267,278317 443193,278801 444234,279094 C 444637,279207 445037,279369 445121,279454 C 445368,279701 445695,279503 445760,279067 z M 509600,247633 C 509600,247373 509362,247200 509169,247319 C 508962,247447 509140,247800 509412,247800 C 509515,247800 509600,247725 509600,247633 z M 455320,191520 C 455379,191365 455736,191181 456114,191111 C 456962,190951 457141,189797 456381,189390 C 456032,189203 455984,189048 456093,188468 C 456246,187654 455962,187200 455300,187200 C 455052,187200 454706,186998 454531,186750 L 454214,186300 L 453607,186953 C 452582,188056 452710,189481 453950,190771 C 454985,191848 455158,191942 455320,191520 z M 229400,101207 C 229400,100366 229146,100104 228200,99970 C 227768,99910 227709,99968 227764,100400 C 227799,100675 227835,101148 227843,101450 C 227871,102496 229400,102257 229400,101207 z" + id="path8" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 348128,366700 C 348063,366531 347765,366400 347446,366400 C 346454,366400 345920,365051 346750,364642 C 347429,364307 350385,364598 350611,365021 C 350780,365336 351044,365400 352167,365400 C 354053,365400 354501,365858 353326,366584 C 352452,367124 348326,367216 348128,366700 z" + id="path10" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 507933,365909 C 507701,365733 507313,365672 506878,365742 C 506391,365821 506081,365755 505815,365513 C 505459,365191 505392,365196 504612,365594 C 504158,365826 503685,365952 503560,365875 C 503436,365799 502745,365715 502025,365689 C 500883,365649 500663,365576 500301,365121 C 500008,364754 499695,364600 499242,364600 C 498428,364600 498389,364142 499137,363361 C 499862,362604 501049,362861 501950,363969 C 502168,364236 502200,364219 502200,363838 C 502200,363462 502310,363400 502987,363400 C 503420,363400 504023,363305 504326,363190 C 505268,362832 507590,362784 508219,363110 C 509020,363524 509383,363471 509598,362906 C 509966,361936 511410,362177 513025,363477 C 513313,363710 513831,364053 514175,364241 C 515670,365056 514635,365619 511604,365639 C 510196,365648 509354,365743 509057,365927 C 508513,366262 508397,366261 507933,365909 z" + id="path12" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 521634,365425 C 521483,365329 521396,365007 521434,364678 C 521524,363889 522297,363756 522624,364474 C 523026,365354 522428,365928 521634,365425 z" + id="path14" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 488824,365050 C 488679,364792 488263,364734 486573,364741 C 484110,364751 483469,364347 484177,363230 C 484376,362917 486704,362787 488347,362998 C 489283,363118 489441,363082 489840,362658 C 490397,362065 491075,362124 491167,362773 C 491226,363194 491312,363234 491927,363134 C 492695,363010 493030,363382 492609,363889 C 492425,364111 492445,364282 492697,364668 C 493120,365313 493033,365346 490851,365357 C 489364,365365 488966,365304 488824,365050 z" + id="path16" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 587016,365119 C 586828,364892 586674,364856 586503,364998 C 586258,365201 584677,365144 583437,364888 C 583018,364801 582408,364380 581780,363742 L 580787,362732 L 581440,362058 C 582037,361442 582115,361414 582344,361727 C 582700,362214 585195,362243 585728,361767 C 585933,361584 586460,361369 586900,361291 C 587340,361212 587792,361075 587905,360987 C 588456,360554 590137,360549 590537,360978 L 590930,361400 L 592161,360900 C 593465,360371 594114,360288 594594,360592 C 594795,360719 595087,360655 595518,360389 C 596316,359896 596258,359887 597093,360621 C 598721,362050 596755,363964 594851,362803 C 594318,362478 594114,362448 593707,362633 C 593327,362807 593140,362799 592901,362601 C 592486,362256 592372,362412 592251,363487 C 592124,364616 591992,364724 590393,365004 C 587866,365448 587305,365467 587016,365119 z" + id="path18" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 426597,363794 C 426434,363691 426108,363605 425873,363603 C 425638,363601 425188,363466 424873,363301 C 424558,363137 424119,363002 423897,363001 C 423675,363001 423169,362826 422773,362613 C 422129,362268 422006,362258 421633,362520 C 421327,362734 421118,362757 420857,362606 C 420661,362493 420251,362312 419946,362204 C 419642,362096 419312,361794 419212,361533 C 418971,360899 416371,361349 415554,362166 C 415115,362605 413937,362438 413196,361831 C 412367,361154 411028,361151 410851,361825 C 410686,362458 409796,362271 408835,361401 C 407793,360459 407731,359742 408682,359634 C 409002,359597 409462,359438 409704,359279 C 410092,359025 410175,359029 410414,359316 C 410932,359941 411570,360034 412190,359576 C 412652,359234 412869,359190 413330,359344 C 413906,359537 415416,358317 416087,357119 C 416491,356396 420730,356482 421426,357228 C 421764,357590 422163,357800 422511,357800 C 422814,357800 423357,358025 423718,358300 C 424078,358575 424462,358800 424571,358800 C 424680,358800 425037,359025 425365,359301 C 425692,359577 426239,359858 426580,359926 C 427279,360066 427405,360508 426800,360700 C 426263,360870 426296,361088 426900,361364 C 427175,361489 427400,361728 427400,361896 C 427400,362342 427952,362267 428100,361800 C 428241,361355 428792,361272 429160,361640 C 429347,361827 429453,361827 429640,361640 C 429772,361508 430209,361400 430610,361400 C 431012,361400 431631,361299 431986,361175 C 432449,361014 432764,361011 433100,361164 C 433458,361327 433623,361313 433795,361106 C 433985,360877 434106,360879 434560,361116 C 434857,361271 435254,361398 435443,361399 C 435632,361399 435882,361580 436000,361800 C 436284,362331 436645,362304 437364,361700 C 438025,361144 438733,361061 439297,361473 C 439910,361921 439369,362994 438527,363001 C 438182,363003 437450,363051 436900,363107 C 435243,363276 433250,363056 432761,362651 C 432209,362192 431064,362278 430625,362810 L 430221,363300 L 429379,362826 C 428560,362365 428529,362362 428219,362727 C 427474,363602 426896,363983 426597,363794 z M 417400,357800 C 417400,357690 417265,357600 417100,357600 C 416935,357600 416800,357690 416800,357800 C 416800,357910 416935,358000 417100,358000 C 417265,358000 417400,357910 417400,357800 z" + id="path20" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 599418,360757 C 597679,359342 597936,358900 600500,358900 C 603541,358900 604532,359565 603503,360913 C 602667,362010 600874,361942 599418,360757 z" + id="path22" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 428540,360474 C 428267,360200 428406,359973 428808,360036 C 429032,360071 429217,360190 429218,360300 C 429222,360543 428735,360668 428540,360474 z" + id="path24" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 430056,359750 C 429196,358639 430569,356741 431768,357383 C 432377,357709 432591,357650 432800,357100 C 433049,356445 433715,356435 433878,357084 C 434006,357595 433860,358200 433608,358200 C 433526,358200 433216,358425 432919,358700 C 432622,358975 432269,359200 432134,359200 C 431999,359200 431735,359380 431546,359600 C 431162,360049 430350,360130 430056,359750 z" + id="path26" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 526718,356645 C 526398,356602 525937,356437 525693,356277 C 525450,356118 524767,355931 524175,355862 C 523584,355793 522920,355623 522700,355484 C 522418,355305 520999,355210 517877,355162 C 515103,355119 513350,355013 513177,354876 C 513025,354757 512090,354550 511100,354416 C 509903,354254 509166,354050 508900,353807 C 508680,353606 507960,353289 507300,353103 C 505860,352696 504291,351921 503584,351267 C 503300,351005 502589,350615 502004,350402 C 500549,349870 498820,348804 498430,348200 C 497901,347381 496969,346585 496160,346261 C 494816,345723 495939,343741 497575,343764 C 498050,343770 498472,343654 498620,343476 C 499281,342679 502176,342448 503612,343077 C 503800,343159 504228,343007 504691,342693 C 505380,342226 505489,342204 505765,342479 C 506178,342893 505788,343800 505197,343800 C 504970,343800 504316,344255 503742,344811 L 502700,345822 L 503700,346707 C 504250,347193 504845,347594 505023,347596 C 505201,347598 505561,347761 505823,347958 C 506085,348155 506550,348424 506856,348556 C 507161,348688 507463,348932 507527,349098 C 507591,349264 507844,349400 508090,349400 C 508337,349400 508701,349580 508900,349800 C 509099,350020 509432,350200 509639,350200 C 509847,350200 510260,350376 510558,350591 C 510856,350806 511818,351167 512697,351393 C 513808,351680 514439,351962 514773,352322 C 515213,352796 515342,352828 516324,352706 C 517538,352554 518200,352696 518200,353107 C 518200,353336 518594,353371 520348,353294 C 522534,353199 523698,353392 524121,353921 C 524289,354131 524765,354178 526097,354115 C 527737,354037 528800,354236 528800,354620 C 528800,354705 529199,354835 529687,354908 C 530633,355050 530873,355339 530681,356104 C 530525,356728 528942,356944 526718,356645 z" + id="path28" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 621486,355534 C 621243,354901 621778,354151 622407,354244 C 622742,354293 623098,354223 623211,354087 C 623467,353779 624134,353939 624290,354345 C 624477,354834 624033,355197 623401,355070 C 622963,354983 622787,355051 622611,355379 C 622361,355847 621644,355947 621486,355534 z" + id="path30" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 623519,352821 C 623160,352425 623101,351885 623396,351703 C 623746,351486 624400,351997 624400,352486 C 624400,353093 623928,353273 623519,352821 z" + id="path32" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 272400,342800 C 272400,342690 272490,342600 272600,342600 C 272710,342600 272800,342690 272800,342800 C 272800,342910 272710,343000 272600,343000 C 272490,343000 272400,342910 272400,342800 z" + id="path34" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 274592,342690 C 274405,342465 274421,342379 274668,342285 C 275005,342155 275400,342320 275400,342590 C 275400,342905 274829,342976 274592,342690 z" + id="path36" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 268850,342206 C 268237,341943 268269,341834 269281,340731 L 270163,339771 L 270932,340257 C 271783,340794 272383,341697 272086,341994 C 271810,342269 269370,342428 268850,342206 z" + id="path38" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 348848,333293 C 348489,332651 347211,332363 346657,332798 C 346190,333165 345396,333086 344700,332603 C 344590,332527 343825,332482 343000,332504 C 342045,332530 341344,332448 341070,332281 C 340834,332136 339819,331955 338814,331880 C 336921,331737 336480,331529 337103,331073 C 337408,330850 337430,330726 337239,330306 C 336911,329585 337133,329200 337877,329200 C 338335,329200 338718,328999 339254,328479 C 339987,327767 340013,327759 341448,327829 C 342752,327893 342947,327853 343365,327435 C 343929,326871 345316,326976 345774,327617 C 345937,327844 346286,328000 346631,328000 C 346952,328000 347438,328147 347711,328326 C 348053,328550 348457,328618 349005,328545 C 349808,328437 350171,328506 352676,329241 C 354022,329636 355402,330310 355398,330570 C 355390,330943 353778,332373 353229,332494 C 352883,332570 352479,332805 352331,333016 C 352122,333314 351841,333395 351081,333375 C 350541,333361 349862,333414 349571,333494 C 349174,333602 348993,333552 348848,333293 z" + id="path40" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 206048,326168 C 205406,325526 206090,324400 207123,324400 C 207889,324400 209062,325425 208953,326000 C 208878,326395 206418,326538 206048,326168 z" + id="path42" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 28872,320700 C 28694,320235 28945,319800 29394,319800 C 29851,319800 29950,320370 29560,320760 C 29238,321082 29011,321062 28872,320700 z" + id="path44" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 373639,316030 C 373342,315717 372932,315401 372728,315328 C 372445,315227 372377,315050 372444,314589 C 372493,314255 372458,313936 372367,313879 C 372170,313758 372168,312039 372364,311586 C 372616,311004 375127,308899 376306,308281 C 378065,307360 378393,306001 376896,305833 C 376201,305755 375681,305337 375254,304510 C 375086,304185 374825,303796 374674,303645 C 374233,303205 374344,302321 374900,301837 C 375503,301313 375529,300979 375005,300505 C 374612,300149 374612,300145 375019,299574 C 375494,298906 376262,298813 376855,299350 C 377246,299704 378112,299781 382700,299871 C 385537,299927 387600,301031 387600,302495 C 387600,302700 387743,303027 387918,303220 C 388363,303712 388114,304309 387343,304597 C 386142,305046 385301,305566 385073,306000 C 384772,306577 383576,307799 383311,307803 C 383066,307805 381380,309686 381026,310350 C 380894,310598 380496,310923 380143,311073 C 378844,311623 378633,312108 379365,312864 C 380508,314043 380169,315200 378679,315200 C 378011,315200 377666,315344 377000,315900 C 375863,316850 374465,316904 373639,316030 z" + id="path46" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 55350,315184 C 54964,314959 54880,314298 55211,314093 C 55583,313863 56400,314187 56400,314564 C 56400,315239 55926,315519 55350,315184 z" + id="path48" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 366475,309203 C 365829,308544 365125,308004 364911,308003 C 363820,307995 363037,306336 363750,305542 C 364085,305169 364081,305140 363650,304852 C 363403,304686 363200,304399 363200,304214 C 363200,304028 363068,303702 362906,303488 C 362466,302907 362536,302511 363204,301795 C 363923,301026 365265,301022 365774,301787 C 365947,302047 366265,302200 366631,302200 C 366952,302200 367447,302353 367732,302539 C 368017,302726 368549,302858 368915,302834 C 369422,302799 369636,302893 369814,303226 C 370020,303610 370398,303999 371360,304814 C 371541,304967 371580,305300 371488,305908 C 371381,306622 371435,306881 371779,307318 C 372526,308268 371870,309800 370716,309800 C 370459,309800 369926,309935 369531,310100 C 368216,310650 367765,310517 366475,309203 z" + id="path50" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 27504,306804 C 27306,306586 26835,306350 26457,306279 C 25708,306138 25376,305668 25821,305378 C 26307,305061 28752,305736 29035,306265 C 29509,307152 28227,307603 27504,306804 z" + id="path52" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 100933,307067 C 100376,306509 101674,304522 102335,304920 C 102911,305268 102930,306486 102366,306881 C 101899,307209 101170,307303 100933,307067 z" + id="path54" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 5036,302550 C 5071,302303 5235,302100 5400,302100 C 5565,302100 5729,302303 5764,302550 C 5813,302896 5729,303000 5400,303000 C 5071,303000 4987,302896 5036,302550 z" + id="path56" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 686888,288516 C 686569,288282 686497,287971 686480,286766 C 686454,284827 686458,284845 686017,284705 C 685806,284638 685542,284323 685431,284004 C 685270,283540 685075,283398 684465,283296 C 683238,283092 683200,283060 683200,282228 C 683200,281018 684137,280814 685169,281800 C 685618,282229 685993,282400 686486,282400 C 686866,282400 687232,282490 687300,282600 C 687503,282929 688113,282827 688500,282400 C 689007,281840 689903,281886 690437,282500 C 690676,282775 690968,283002 691086,283003 C 691204,283005 691512,283230 691771,283503 C 692290,284051 692622,284115 693169,283773 C 693688,283449 694723,283966 694639,284508 C 694550,285074 693847,285600 693179,285600 C 691821,285600 690170,286409 689042,287628 C 687916,288844 687545,288997 686888,288516 z" + id="path58" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 403164,282500 C 402889,281897 403213,281000 403706,281000 C 404132,281000 405200,281566 405200,281792 C 405200,283002 403639,283544 403164,282500 z" + id="path60" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 684210,279146 C 683870,278974 683633,278591 683438,277899 C 682487,274517 681877,273367 680584,272516 C 680153,272232 679461,271777 679047,271505 C 678465,271123 678131,271036 677585,271125 C 676758,271259 675816,270605 675295,269534 C 674479,267858 674417,267840 669328,267816 C 668904,267814 668454,267732 668328,267634 C 668203,267536 667832,267391 667503,267312 C 665333,266792 663597,263397 665673,263734 C 666269,263831 666410,263760 666897,263122 C 667421,262435 668119,262183 668482,262550 C 668563,262633 669141,262790 669765,262900 C 670801,263083 670932,263165 671266,263850 C 671756,264851 672203,264813 673291,263677 L 674176,262753 L 675427,264027 L 676678,265300 L 677933,265259 C 678716,265233 679397,265327 679744,265507 C 680050,265667 680397,265798 680515,265799 C 680633,265799 680942,266025 681200,266300 C 681458,266575 681823,266800 682010,266800 C 682198,266800 682468,266941 682611,267113 C 682762,267296 683043,267382 683287,267321 C 683938,267158 684800,268170 684800,269098 C 684800,269273 684995,269795 685233,270258 C 685471,270721 685685,271505 685709,272000 C 685750,272862 685967,273553 686400,274200 C 686510,274365 686690,274725 686800,275000 C 686909,275275 687110,275656 687247,275847 C 687447,276129 687431,276317 687161,276847 C 686977,277206 686773,277695 686705,277934 C 686347,279208 685319,279707 684210,279146 z" + id="path62" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 402714,278886 C 402287,278459 402314,277023 402760,276444 C 403296,275747 404207,275756 404448,276461 C 404981,278014 403672,279844 402714,278886 z" + id="path64" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 434118,274138 C 433593,273754 433885,273400 434726,273400 C 435339,273400 435420,273457 435364,273850 C 435287,274389 434660,274534 434118,274138 z" + id="path66" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 412750,273439 C 411866,273382 411800,273341 411803,272839 C 411807,272089 411945,271943 413235,271318 C 413859,271016 414419,270640 414478,270484 C 414591,270191 415691,270094 416289,270323 C 417252,270693 417909,273380 417050,273435 C 416058,273499 413719,273501 412750,273439 z" + id="path68" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 430967,272508 C 430648,271807 431193,271000 431987,271000 C 432638,271000 433600,271964 433600,272615 C 433600,273273 431273,273179 430967,272508 z" + id="path70" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 454917,266367 C 454464,265915 454388,265732 454574,265546 C 454950,265170 455885,265782 455963,266456 C 456045,267159 455680,267128 454917,266367 z" + id="path72" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 663300,263222 C 662457,263093 662115,262298 662530,261431 C 662617,261249 662691,260700 662694,260211 C 662708,258083 664603,258606 665339,260940 C 665651,261931 665651,262048 665340,262701 C 664986,263442 664899,263465 663300,263222 z" + id="path74" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 641991,244650 C 641527,244128 641027,243418 640881,243074 C 640735,242730 640477,242395 640307,242331 C 639743,242114 640228,240840 641404,239450 C 641967,238785 644200,240474 644200,241564 C 644200,241838 644425,242357 644700,242718 C 646233,244727 643677,246550 641991,244650 z" + id="path76" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 210066,241308 C 208341,240558 209769,238628 212075,238594 C 212309,238590 212675,238455 212888,238294 C 213102,238132 213572,238000 213933,238000 C 214295,238000 214885,237820 215245,237601 C 215605,237381 216021,237201 216169,237201 C 216316,237200 216984,236705 217653,236100 C 218321,235495 219010,234997 219184,234993 C 219358,234989 219759,234774 220075,234515 C 220529,234144 220812,234066 221412,234147 C 221993,234225 222303,234148 222714,233825 C 223720,233033 224414,233504 224392,234963 C 224378,235872 222203,237624 221131,237590 C 220331,237564 219177,238033 217985,238868 C 217725,239050 217365,239200 217186,239200 C 217008,239200 216699,239380 216500,239600 C 216301,239820 215896,240000 215600,240000 C 215304,240000 214899,240180 214700,240400 C 214501,240620 214104,240800 213817,240800 C 213513,240800 213192,240966 213046,241200 C 212743,241686 211074,241747 210066,241308 z" + id="path78" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 205853,240656 C 205101,240562 204600,239960 204600,239149 C 204600,238312 205078,238271 206500,238985 C 209077,240280 208790,241021 205853,240656 z" + id="path80" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 51801,234101 C 51484,233719 52027,232800 52570,232800 C 53065,232800 53879,233704 53732,234090 C 53574,234501 52139,234509 51801,234101 z" + id="path82" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 231685,234117 C 231364,233892 231114,233879 230471,234050 C 228986,234447 228581,233654 229323,231801 C 229989,230136 232951,229406 234936,230418 C 235858,230888 236266,230897 236931,230461 C 237422,230139 237463,230141 237724,230499 C 238295,231280 237795,232600 236928,232600 C 236680,232600 236173,232825 235800,233100 C 235427,233375 235041,233600 234943,233600 C 234844,233600 234534,233780 234255,234000 C 233651,234475 232284,234537 231685,234117 z" + id="path84" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 642865,231332 C 642005,230911 641600,230330 641600,229515 C 641600,229259 641457,228930 641283,228786 C 641066,228606 641002,228339 641081,227945 C 641165,227524 641068,227197 640722,226734 C 639813,225518 639837,224319 640793,223186 C 641592,222237 641616,222168 641633,220694 C 641646,219619 641740,219089 641956,218872 C 643141,217688 644703,218306 644160,219745 C 643719,220913 644182,221070 645732,220277 C 646458,219904 647194,219600 647365,219600 C 647537,219600 647923,219365 648223,219078 C 648898,218431 649200,218592 649200,219598 C 649200,220455 648909,220740 647148,221605 C 646624,221862 646052,222232 645876,222427 C 645649,222677 645385,222747 644978,222666 C 644379,222546 644231,222751 644630,223150 C 644803,223323 644778,223504 644530,223883 C 644024,224655 644123,225101 645100,226443 C 646282,228067 646324,228887 645280,229960 C 644884,230367 644432,230948 644275,231250 C 643949,231878 643979,231876 642865,231332 z" + id="path86" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 218682,230126 C 218532,229735 218737,229400 219126,229400 C 219322,229400 219405,229552 219364,229834 C 219286,230362 218845,230551 218682,230126 z" + id="path88" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 498800,218631 C 498800,218231 499389,217600 499762,217600 C 500036,217600 500294,218487 500107,218789 C 499869,219173 498800,219044 498800,218631 z" + id="path90" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 649912,216545 C 650110,213843 648921,213585 647179,215951 C 646497,216877 645852,217001 645266,216319 C 644677,215634 644625,214405 645172,214064 C 645392,213926 645600,213480 645682,212968 C 646008,210932 648376,210613 649232,212490 C 649451,212972 650480,213600 651049,213600 C 651704,213600 652059,214405 652329,216503 C 652475,217630 651772,218400 650597,218400 L 649776,218400 L 649912,216545 z" + id="path92" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 652210,212350 C 652097,212213 651545,211538 650985,210850 L 649966,209600 L 648592,209728 C 646444,209928 645600,209423 645600,207938 C 645600,206985 646121,206558 646584,207131 C 647473,208228 648417,207954 648919,206452 C 649818,203760 651428,202983 652548,204700 C 652998,205389 653450,205807 654004,206043 L 654808,206387 L 654774,208293 C 654750,209657 654661,210267 654459,210434 C 654304,210563 654046,210981 653886,211364 C 653439,212435 652658,212894 652210,212350 z" + id="path94" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 555062,211047 C 554374,210192 554145,207629 554699,207000 C 554844,206835 555062,206328 555183,205873 C 555546,204509 557270,203809 557805,204809 C 557939,205060 558357,205548 558734,205892 C 559373,206478 559508,207200 558979,207200 C 558880,207200 558800,207502 558800,207872 C 558800,208259 558588,208857 558300,209281 C 558025,209686 557800,210156 557800,210324 C 557800,211633 555929,212126 555062,211047 z" + id="path96" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 632589,205750 C 632322,205393 631877,204775 631601,204378 C 630972,203472 629825,202472 629300,202371 C 629076,202328 628746,201966 628549,201547 C 628310,201040 628064,200800 627785,200800 C 627106,200800 626640,200439 626500,199802 C 626428,199471 626289,199200 626191,199200 C 626094,199200 625706,198930 625331,198600 C 624907,198228 624427,198000 624066,198000 C 623027,198000 621729,197190 621502,196400 C 621145,195163 621094,195135 619443,195260 C 617340,195419 615455,192655 617011,191693 C 617127,191622 617446,191054 617720,190432 C 617994,189809 618439,189094 618709,188842 C 619028,188545 619200,188164 619200,187759 C 619200,186932 620094,185430 620657,185310 C 620901,185258 621616,185116 622247,184994 C 622877,184873 623442,184694 623502,184597 C 623562,184500 624364,184473 625283,184538 C 626823,184647 626985,184622 627322,184228 C 627524,183993 627881,183800 628117,183800 C 628352,183800 628876,183575 629281,183300 C 630488,182481 632600,183387 632600,184724 C 632600,184883 632743,185233 632919,185500 C 633146,185848 633200,186210 633106,186767 C 632982,187500 633024,187589 633815,188266 C 634996,189277 635400,190024 635400,191197 C 635400,192296 635779,192812 636950,193305 C 637760,193647 637758,193718 636901,195140 C 636516,195778 636201,196421 636201,196568 C 636200,196716 636020,197066 635800,197345 C 635078,198263 635256,199203 636350,200247 C 639230,202993 639392,203536 637484,204046 C 636815,204225 636393,204504 635958,205053 C 634779,206541 633395,206828 632589,205750 z" + id="path98" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 588070,203094 C 587978,202855 588075,202623 588367,202387 C 588605,202194 588800,201900 588800,201734 C 588800,201568 589321,200907 589958,200266 C 590595,199625 591966,198155 593004,197000 C 594042,195845 594947,194855 595016,194800 C 595403,194489 595617,193694 595500,193002 C 595374,192253 595395,192219 596385,191571 C 597157,191066 597428,190754 597519,190269 C 597585,189919 597890,189407 598198,189133 C 598506,188859 598868,188289 599003,187867 C 599139,187445 599408,186920 599602,186700 C 599795,186480 600012,186107 600084,185871 C 600287,185199 604180,181436 604817,181296 C 605169,181219 605670,180787 606193,180109 C 607025,179030 607413,178810 608500,178800 C 609394,178791 609568,178591 609637,177496 C 609700,176505 609704,176500 610439,176439 C 610995,176392 611336,176198 611812,175655 L 612446,174934 L 614952,174872 C 616781,174826 617545,174732 617779,174522 C 617970,174350 618318,174276 618637,174338 C 618936,174396 619461,174299 619818,174121 C 620172,173944 620653,173800 620886,173800 C 621120,173800 621518,173655 621770,173478 C 622162,173204 622358,173192 623092,173398 C 623702,173569 624067,173578 624344,173430 C 624738,173219 628530,173063 628717,173250 C 629486,174019 628430,175081 627063,174914 C 626325,174823 626219,174861 626163,175235 C 626128,175468 625965,175727 625800,175810 C 625635,175893 624895,176244 624156,176590 C 623417,176936 622759,177305 622694,177410 C 622449,177805 620782,177620 620203,177133 C 619308,176380 618073,176534 616860,177550 C 615985,178282 615788,178359 614739,178371 C 613306,178388 612264,178571 611560,178927 C 611263,179077 610838,179200 610615,179200 C 610263,179200 610235,179267 610405,179713 C 610512,179995 610600,180794 610600,181489 C 610600,182395 610689,182825 610916,183013 C 611102,183168 611195,183468 611143,183743 C 611077,184088 611204,184318 611627,184619 C 612480,185226 612282,186593 611247,187244 C 610946,187434 610557,187694 610381,187823 C 610126,188012 609941,187968 609447,187603 C 608739,187080 608476,187200 607273,188600 C 606250,189790 606000,190263 606000,191005 C 606000,191910 605039,193268 604076,193725 C 603695,193906 603140,194311 602842,194627 C 602545,194942 602104,195200 601862,195200 C 601620,195200 601305,195368 601161,195573 C 601018,195778 600623,196007 600285,196081 C 599947,196156 599223,196640 598677,197158 C 597574,198204 596198,199200 595856,199200 C 595582,199200 594031,200930 593739,201561 C 593440,202207 591885,203210 591237,203175 C 590942,203159 590139,203214 589453,203298 C 588358,203432 588190,203408 588070,203094 z" + id="path100" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 657263,196648 C 656385,196072 655514,190041 656225,189469 C 656925,188907 657368,188958 657718,189640 C 657904,190003 658120,190345 658198,190400 C 658614,190693 658807,191413 658582,191834 C 658381,192210 658420,192319 658875,192651 C 659486,193096 659512,193286 659077,194100 C 658901,194430 658699,195150 658628,195700 C 658497,196724 657953,197101 657263,196648 z" + id="path102" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 649336,194591 C 649030,194153 645708,193979 643961,194309 C 642028,194674 639428,192852 640440,191840 C 640790,191490 641133,191545 641575,192019 C 641942,192413 642205,192442 645933,192501 C 648115,192535 650008,192572 650141,192582 C 650273,192592 650441,192916 650514,193302 C 650586,193688 650725,194054 650823,194114 C 650920,194174 651000,194398 651000,194612 C 651000,195174 649733,195158 649336,194591 z" + id="path104" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 189327,191385 C 188683,190879 188652,190326 189245,189911 C 190170,189263 191000,189636 191000,190700 C 191000,191815 190259,192119 189327,191385 z" + id="path106" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 662650,190868 C 661852,190545 664040,187800 665095,187800 C 665910,187800 667298,186246 667312,185319 C 667330,184108 668254,182708 668830,183016 C 669142,183183 669379,183183 669748,183014 C 670022,182890 670423,182844 670640,182913 C 670897,182994 671192,182889 671488,182611 C 671738,182376 672293,182131 672721,182065 C 673150,181999 673647,181819 673826,181663 C 674029,181488 674345,181429 674662,181508 C 675246,181655 677015,180855 677686,180139 C 677914,179897 678325,179519 678600,179299 C 680152,178060 680514,177017 679799,175845 C 679040,174600 679632,173798 681095,174089 C 681985,174267 683553,173620 684583,172650 C 685079,172183 685579,171792 685693,171783 C 685807,171774 686484,171725 687199,171674 C 687913,171624 688583,171497 688689,171391 C 688999,171081 689602,171172 689747,171550 C 689820,171743 690087,172215 690340,172600 C 691522,174399 692805,175046 694173,174532 C 694683,174341 695269,174146 695476,174099 C 695684,174051 696114,173717 696434,173356 C 698203,171357 699699,170000 700134,170000 C 700390,170000 700600,169921 700600,169824 C 700600,169495 701696,169233 703550,169119 C 705541,168996 705767,169141 705209,170183 C 704904,170754 702293,172800 701870,172800 C 701243,172800 699202,175457 699201,176276 C 699200,176483 699386,176954 699614,177323 C 700070,178061 700064,178773 699600,179017 C 698712,179484 697898,179800 697585,179800 C 697079,179800 696146,180643 695690,181512 C 695333,182193 691864,184200 691044,184200 C 690937,184200 690737,184335 690600,184500 C 690445,184687 690002,184801 689426,184802 C 688149,184806 686501,185275 685618,185887 C 684821,186440 684324,186513 683503,186201 C 682976,186001 681613,186493 681302,186997 C 681233,187109 680788,187200 680313,187200 C 679789,187200 679351,187318 679200,187500 C 678879,187887 677427,187883 676912,187494 C 676698,187332 676266,187200 675951,187200 C 675499,187200 675337,187078 675176,186616 C 675064,186295 674664,185823 674287,185566 C 673911,185310 673602,185033 673601,184950 C 673601,184868 673392,184800 673138,184800 C 672308,184800 671087,186831 671309,187842 C 671660,189440 667600,191905 666600,190700 C 666280,190315 665066,190316 664327,190701 C 663758,190998 663128,191061 662650,190868 z" + id="path108" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 639272,189610 C 639207,189286 638984,188867 638777,188679 C 638511,188438 638400,188065 638400,187407 C 638400,186895 638268,186302 638106,186088 C 637651,185486 637745,184963 638451,184182 C 638808,183787 639299,183187 639543,182850 L 639986,182236 L 639579,181718 C 639064,181064 639152,180450 639833,179944 C 641250,178890 642450,180929 641594,182937 C 641340,183531 641354,183600 641811,183980 C 642534,184582 643000,184523 643000,183830 C 643000,183133 643377,182000 643609,182000 C 643702,182000 643896,181756 644039,181458 C 644183,181161 644495,180868 644734,180808 C 644973,180749 645362,180453 645599,180150 C 646147,179449 646419,179457 646962,180192 C 647481,180893 647558,182152 647093,182330 C 646709,182478 646000,183916 646000,184547 C 646000,184806 645782,185237 645515,185504 C 643919,187100 644337,188479 646466,188640 C 647685,188732 648042,188987 647951,189700 C 647882,190242 646526,190376 645993,189894 C 645715,189642 645430,189593 644832,189695 C 644235,189796 643844,189729 643244,189423 L 642449,189017 L 641674,189603 C 640570,190438 639438,190442 639272,189610 z" + id="path110" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 595325,189093 C 594967,188160 595549,187263 596133,187848 C 596374,188088 596403,188292 596257,188730 C 596041,189377 595513,189583 595325,189093 z" + id="path112" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 654446,185366 C 654076,184996 654150,184307 654605,183896 C 655149,183404 655445,183727 655364,184722 C 655297,185539 654898,185818 654446,185366 z" + id="path114" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 708589,183136 C 708210,182771 707630,182154 707300,181765 C 706487,180807 704962,180135 704293,180440 C 703896,180620 703731,180600 703435,180332 C 703233,180148 702737,180000 702328,180000 C 700829,180000 701228,178443 702805,178138 C 703297,178043 703786,177883 703890,177782 C 704144,177538 704945,177550 705100,177800 C 705168,177910 705583,178000 706021,178000 C 706602,178000 706939,178128 707260,178472 C 707502,178732 707903,179008 708152,179086 C 708401,179164 708737,179486 708900,179800 C 709063,180114 709354,180423 709548,180485 C 710074,180655 711400,181936 711400,182274 C 711400,183621 709650,184158 708589,183136 z" + id="path116" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 714600,179325 C 714600,178669 716253,176800 716834,176800 C 717474,176800 717550,177111 717174,178188 C 716861,179087 714600,180086 714600,179325 z" + id="path118" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 719107,175612 C 718549,174709 720926,172112 721550,172943 C 722013,173561 721860,174766 721250,175303 C 720686,175800 719343,175993 719107,175612 z" + id="path120" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 723343,175076 C 723073,174807 723200,174187 723550,174063 C 723743,173995 724060,173802 724255,173634 C 724738,173219 725047,173563 724965,174425 C 724901,175093 723802,175535 723343,175076 z" + id="path122" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 653295,174131 C 652700,173726 651019,173364 650380,173504 C 649881,173614 649800,173563 649692,173064 C 649487,172123 649142,171580 648557,171278 C 647829,170901 647818,170173 648531,169611 C 649197,169087 649633,169208 650746,170226 C 651211,170652 651722,171000 651881,171000 C 652041,171000 652295,171123 652445,171274 C 652596,171424 652939,171611 653209,171690 C 655169,172258 655847,173136 654932,173924 C 654303,174464 653865,174520 653295,174131 z" + id="path124" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 641607,173813 C 641348,173329 641337,172600 641590,172600 C 641694,172600 642022,172375 642319,172100 C 643124,171354 644200,171883 644200,173026 C 644200,173900 642009,174565 641607,173813 z" + id="path126" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 633000,173300 C 632308,173051 632064,172644 632276,172092 C 632409,171744 633000,171931 633000,172321 C 633000,172709 633386,172668 634155,172199 C 634838,171783 635698,171673 635886,171978 C 635947,172076 636245,172216 636548,172289 C 638213,172691 638600,172840 638600,173081 C 638600,173616 634342,173783 633000,173300 z" + id="path128" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 725445,172289 C 724856,171877 724866,171125 725463,170853 C 726694,170292 728699,171333 728314,172334 C 728166,172721 726013,172687 725445,172289 z" + id="path130" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 639544,171277 C 639242,170975 639405,170225 639800,170100 C 640020,170030 640200,169899 640200,169808 C 640200,169517 640817,169395 641214,169608 C 641597,169812 641769,170877 641450,171065 C 641134,171252 639680,171414 639544,171277 z" + id="path132" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 687750,168108 C 687396,167682 687200,167211 687200,166788 C 687200,166427 687071,165989 686914,165815 C 686757,165642 686584,164990 686531,164367 C 686463,163581 686307,163107 686019,162819 C 685572,162372 685598,159625 686055,159046 C 686194,158869 686156,158683 685928,158431 C 685712,158192 685600,157710 685600,157018 C 685600,154979 682907,153223 681926,154623 C 681584,155111 680521,155800 680110,155800 C 679955,155800 679652,156025 679436,156300 C 679197,156604 678839,156800 678523,156800 C 678220,156800 677899,156967 677754,157200 C 677611,157428 677287,157600 677000,157600 C 676713,157600 676389,157772 676246,158000 C 676109,158220 675811,158400 675585,158400 C 674750,158400 673800,159370 673800,160224 C 673800,160651 673871,161000 673957,161000 C 674043,161000 674286,161293 674496,161650 C 674706,162008 674995,162419 675139,162564 C 675282,162710 675400,162943 675400,163083 C 675400,163223 675580,163501 675800,163700 C 676570,164397 675782,166297 674800,166112 C 674525,166060 673892,165941 673393,165847 C 672894,165753 672369,165604 672226,165516 C 672061,165414 671760,165555 671397,165903 C 670942,166339 670692,166429 670163,166351 C 669645,166274 669404,166356 669060,166726 C 668340,167500 666866,167243 666422,166268 C 666128,165624 664849,165073 664359,165379 C 663834,165707 663442,165648 663306,165218 C 663239,165009 663057,164788 662901,164728 C 662746,164668 662424,164233 662187,163760 C 661950,163287 661529,162658 661252,162362 C 660922,162009 660784,161682 660854,161414 C 661310,159673 659205,159437 657297,161016 L 655777,162273 L 655208,161936 C 654895,161751 654464,161600 654250,161600 C 654037,161600 653699,161420 653500,161200 C 653301,160980 652978,160800 652783,160800 C 652588,160800 652305,160677 652155,160526 C 652004,160375 651592,160103 651240,159921 C 650882,159736 650600,159432 650600,159232 C 650600,158494 647792,156000 646961,156000 C 645713,156000 644800,155038 644800,153724 C 644800,152235 642767,149600 641619,149600 C 641386,149600 641042,149420 640854,149200 C 640570,148869 640264,148800 639083,148800 C 637994,148800 637540,148711 637177,148428 C 636667,148030 635755,147788 634560,147734 C 634154,147715 633708,147588 633570,147450 C 633433,147313 633117,147200 632870,147200 C 632622,147200 632348,147087 632260,146949 C 632010,146556 630657,145600 630352,145600 C 630200,145600 629902,145468 629688,145306 C 629475,145145 629132,145010 628927,145006 C 628465,144998 627200,143650 627200,143166 C 627200,142970 627020,142515 626801,142155 C 626581,141795 626401,141174 626401,140774 C 626400,140374 626265,139937 626100,139800 C 625735,139497 625712,139076 626050,138860 C 626188,138772 626508,138403 626763,138040 L 627226,137381 L 626813,136527 C 626284,135434 626291,134842 626841,134256 C 627136,133942 627289,133516 627302,132969 C 627315,132450 627447,132061 627661,131903 C 627848,131767 628000,131460 628000,131220 C 628000,130801 628389,130142 629346,128940 C 629731,128455 629775,128224 629672,127233 C 629564,126197 629602,126028 630076,125465 C 630364,125122 630600,124709 630600,124546 C 630600,124382 630729,124142 630887,124011 C 631642,123384 631444,121816 630417,120295 C 629443,118851 629885,117860 631750,117307 C 631998,117233 632200,117099 632200,117008 C 632200,115897 636876,116213 638189,117413 C 639163,118303 639346,118385 640900,118632 C 643423,119032 643749,119043 644229,118742 C 644932,118302 647137,118509 647422,119042 C 647833,119809 648478,120400 648905,120400 C 649143,120400 649491,120569 649678,120775 C 649864,120982 650323,121200 650697,121261 C 651071,121321 651637,121563 651955,121798 C 652460,122172 652837,122231 654944,122270 C 656621,122301 657455,122396 657681,122584 C 658189,123006 659512,123249 661800,123341 C 662955,123387 663986,123509 664090,123613 C 664397,123915 664842,123830 665325,123377 C 665608,123110 666131,122919 666738,122861 C 667758,122763 668993,122267 669261,121848 C 669350,121710 669733,121466 670113,121308 C 670820,121012 672985,118844 673244,118173 C 673418,117720 673547,117715 674915,118113 C 675922,118406 676800,119171 676800,119756 C 676800,119863 676929,120058 677087,120189 C 677554,120577 678044,119645 677887,118667 C 677767,117911 677796,117857 678731,117159 C 680397,115914 681767,114709 681784,114474 C 681793,114350 681935,114137 682100,114000 C 682297,113836 682400,113390 682400,112695 C 682400,110947 685103,108731 686817,109073 C 687220,109154 687595,109081 687939,108856 C 688826,108275 690999,108302 691888,108904 C 692750,109490 693844,109554 694353,109050 C 695818,107599 696963,107613 698474,109100 C 699088,109705 699677,110200 699781,110200 C 699886,110200 700100,110329 700258,110487 C 700481,110709 700804,110738 701709,110615 C 703873,110321 705295,111769 705171,114137 L 705100,115492 L 705850,115848 C 706412,116114 706600,116324 706600,116687 C 706600,116954 706721,117292 706868,117440 C 707352,117923 707565,118495 707462,119033 C 707383,119447 707500,119685 708003,120131 C 709533,121486 711029,124439 711535,127100 C 711597,127430 711778,127848 711936,128029 C 712557,128739 712532,131813 711898,132565 C 711352,133215 711345,133254 711450,135305 C 711549,137246 711528,137411 711128,137778 C 710893,137995 710130,138696 709434,139336 C 707027,141548 706614,142004 706735,142320 C 706893,142732 705698,143947 704979,144105 C 704445,144222 703453,145647 702675,147417 C 702427,147980 701493,148800 701100,148800 C 700965,148800 700632,148974 700361,149188 C 700090,149401 699646,149631 699375,149699 C 698175,150000 697000,151351 697000,152430 C 697000,153393 696458,154679 695650,155634 C 695440,155882 695402,156250 695504,157066 C 695628,158052 695599,158187 695221,158389 C 694962,158528 694800,158810 694800,159125 C 694800,159948 693848,160800 692928,160800 C 691585,160800 690620,162071 690747,163673 C 690835,164788 690796,164951 690322,165460 C 689944,165866 689800,166236 689800,166803 C 689800,167372 689694,167642 689414,167793 C 689201,167907 688970,168180 688900,168400 C 688722,168962 688388,168877 687750,168108 z" + id="path134" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 662602,167303 C 662275,166909 662472,166450 663088,166169 C 663702,165889 664200,166218 664200,166903 C 664200,167599 663081,167879 662602,167303 z" + id="path136" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 488746,164848 C 488446,164535 488200,164097 488200,163875 C 488200,163646 487810,163133 487300,162689 C 486759,162218 486400,161736 486400,161480 C 486400,161019 484802,159291 484200,159100 C 484000,159037 483786,158853 483725,158692 C 483663,158532 483444,158400 483237,158400 C 483031,158400 482699,158220 482500,158000 C 482245,157718 481884,157600 481279,157600 C 479732,157600 478199,155673 478176,153700 C 478158,152117 478498,150452 478925,150042 C 479522,149466 479519,149323 478900,148836 C 478625,148619 478400,148245 478400,148003 C 478400,147761 478220,147334 478000,147055 C 477780,146775 477600,146401 477599,146223 C 477599,146045 477417,145603 477196,145239 C 476626,144305 476653,139995 477232,139471 C 477434,139288 477600,139015 477600,138865 C 477600,137272 481381,135734 482800,136750 C 483069,136943 483742,137325 484295,137600 C 484862,137882 485400,138318 485530,138600 C 486433,140560 486600,140989 486600,141341 C 486600,141559 486780,141901 487000,142100 C 487297,142369 487400,142716 487400,143452 C 487400,144213 487514,144578 487893,145029 C 488269,145475 488359,145757 488269,146207 C 488203,146533 488238,146912 488345,147050 C 488671,147470 489200,149334 489200,150063 C 489200,150441 489335,150863 489500,151000 C 489665,151137 489800,151462 489800,151723 C 489800,151983 489980,152309 490200,152446 C 490528,152651 490600,152913 490600,153904 C 490600,154690 490712,155271 490922,155571 C 491122,155857 491202,156240 491133,156586 C 491070,156898 491126,157246 491261,157381 C 491717,157837 491633,163554 491165,163882 C 490952,164031 490709,164411 490626,164727 C 490404,165561 489486,165620 488746,164848 z" + id="path138" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 739994,159386 C 739689,158650 739904,158135 740557,158038 C 741170,157946 741493,158652 741158,159351 C 740784,160131 740308,160145 739994,159386 z" + id="path140" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 741733,157667 C 741456,157389 741616,156448 742000,156100 C 742220,155901 742400,155569 742400,155363 C 742400,154877 742917,154682 743319,155016 C 743708,155338 743535,156910 743051,157450 C 742740,157798 741988,157922 741733,157667 z" + id="path142" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 766953,157401 C 766360,157222 765509,156436 764932,155535 C 764604,155021 764498,154982 763773,155105 C 761786,155440 761716,154096 763605,151850 C 764171,151178 765487,152112 766740,154073 C 767012,154498 767407,154891 767617,154947 C 767944,155032 768000,155234 768000,156323 C 768000,157680 767973,157708 766953,157401 z" + id="path144" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 732995,150087 C 732562,148948 732773,148381 733920,147608 C 736027,146185 736734,146389 735804,148151 C 734630,150377 733422,151209 732995,150087 z" + id="path146" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 753799,116698 C 753406,116225 754716,114510 756768,112812 C 757672,112064 757990,110593 757306,110330 C 757144,110268 756851,109913 756656,109542 C 756460,109170 756124,108533 755909,108125 C 755435,107225 755731,106512 756795,105988 C 757594,105595 757802,105260 757667,104584 C 757444,103471 758529,102432 759523,102807 C 760233,103075 760983,103953 760993,104527 C 760997,104762 761233,105107 761519,105294 C 761887,105535 762007,105752 761931,106043 C 761788,106587 762725,107752 763431,107907 C 764568,108157 765383,109537 764760,110160 C 764378,110542 762910,110453 762372,110016 C 761945,109669 761867,109662 761558,109940 C 761370,110109 760920,110310 760558,110387 C 759969,110512 759905,110592 759949,111152 C 759976,111496 759909,111833 759799,111900 C 759690,111968 759600,112249 759600,112525 C 759600,113101 757929,114883 756800,115511 C 756415,115725 755804,116147 755443,116450 C 754707,117066 754171,117147 753799,116698 z" + id="path148" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 698855,103696 C 698616,103529 698166,103411 697855,103435 C 697543,103459 697178,103410 697043,103326 C 696907,103243 696183,103323 695433,103506 C 693119,104068 692548,103722 693493,102330 C 693772,101919 694000,101417 694000,101215 C 694000,100996 694242,100748 694600,100600 C 694930,100463 695200,100237 695200,100098 C 695200,99423 695909,98970 697138,98859 L 698369,98747 L 699303,99762 C 701640,102298 701286,105399 698855,103696 z" + id="path150" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 751478,103268 C 751089,102845 750636,102230 750471,101900 C 749230,99406 749065,99208 748227,99203 C 747933,99201 747303,98783 746567,98101 C 745914,97497 745137,96944 744840,96873 C 743663,96591 741600,95083 741600,94504 C 741600,94366 741411,94014 741181,93721 C 740184,92454 745551,90836 746592,92090 C 746724,92249 747235,92575 747727,92813 C 748745,93306 749217,93916 749386,94957 C 749479,95530 749730,95856 750602,96540 C 756622,101262 757580,103530 753710,103893 L 752186,104035 L 751478,103268 z" + id="path152" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 224300,93200 C 224137,92936 224376,92562 224614,92709 C 224857,92859 224855,93400 224612,93400 C 224508,93400 224368,93310 224300,93200 z" + id="path154" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 531865,87061 C 530341,86764 531072,84599 532695,84601 C 534616,84603 535211,86198 533549,86892 C 532809,87202 532664,87216 531865,87061 z" + id="path156" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 223440,86160 C 222858,85578 223662,83800 224508,83800 C 224996,83800 224912,85926 224413,86193 C 223914,86460 223734,86454 223440,86160 z" + id="path158" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 255750,81803 C 255087,81107 255030,80305 255621,79989 C 256463,79538 259026,79647 259750,80164 C 261132,81150 260237,82049 258198,81723 C 257544,81618 257380,81664 257201,81999 C 256904,82554 256400,82485 255750,81803 z" + id="path160" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 304872,74900 C 304671,74376 304962,74000 305569,74000 C 306227,74000 306702,74445 306529,74897 C 306372,75306 305029,75308 304872,74900 z" + id="path162" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + d="M 600400,55870 C 600235,55815 599920,55691 599700,55594 C 599480,55497 598985,55281 598600,55113 C 598215,54945 597738,54694 597539,54554 C 597237,54341 597147,54356 596984,54642 C 596877,54830 596480,55042 596102,55113 C 595724,55184 595310,55367 595183,55521 C 594779,56008 593144,55375 591993,54287 C 591714,54023 591195,53749 590839,53678 C 590070,53524 589000,52285 589000,51548 C 589000,50788 587573,49857 586886,50170 C 586083,50536 585658,50443 585200,49800 C 584614,48977 584100,49034 582510,50101 L 581167,51001 L 579234,51041 C 577595,51075 577258,51139 577025,51460 C 576682,51933 575184,51774 574434,51184 C 573948,50801 573776,50824 573160,51352 C 572668,51774 570322,51888 570004,51505 C 569870,51343 569447,51152 569064,51080 C 568681,51008 568324,50835 568270,50694 C 568216,50554 567866,50382 567492,50312 C 567117,50241 566728,50036 566627,49855 C 566394,49439 564463,49481 563987,49912 C 563565,50294 561041,50305 560495,49928 C 560229,49745 559192,49621 557332,49552 C 554922,49463 554491,49395 553991,49025 C 553604,48739 553120,48600 552513,48600 C 551167,48600 550818,48005 551287,46514 C 551619,45459 551468,44600 550952,44600 C 550868,44600 550636,44436 550436,44236 C 549166,42966 546110,42944 544991,44196 C 544730,44489 544294,44543 542159,44546 L 539635,44551 L 538818,45434 L 538000,46318 L 535750,46276 C 534043,46244 533337,46310 532827,46550 C 532206,46843 532139,46841 531967,46534 C 531724,46100 531034,46107 530546,46549 C 530231,46834 529751,46901 527930,46918 C 518640,47003 514708,47208 514116,47638 C 513636,47986 513435,48025 512988,47857 C 512379,47627 509025,49095 508143,49977 C 508020,50100 507809,50200 507673,50200 C 507537,50200 507173,50311 506863,50447 C 506268,50709 506098,50717 500057,50787 C 495642,50838 494200,50630 493397,49828 C 493107,49538 492516,49129 492085,48920 C 491653,48710 491054,48414 490754,48261 C 490354,48057 490103,48038 489817,48191 C 489233,48504 488576,48444 488113,48037 C 487255,47282 485251,47008 480000,46930 C 477006,46885 476392,46740 475329,45821 C 475124,45644 474629,45500 474229,45500 C 473684,45500 473454,45396 473318,45087 C 473145,44692 472999,44675 470018,44716 C 468137,44742 466639,44671 466242,44536 C 465773,44378 465485,44375 465242,44527 C 465045,44650 463661,44750 461975,44762 C 459366,44782 458971,44830 458323,45213 C 457559,45664 456800,45627 456200,45111 C 455427,44445 453264,43982 452630,44346 C 452057,44675 452000,44671 451145,44244 C 450656,44000 450083,43800 449870,43800 C 449658,43800 449128,43617 448692,43393 C 448213,43147 447713,43032 447426,43103 C 447154,43170 446814,43102 446626,42944 C 445797,42243 444525,42000 441682,42000 C 439525,42000 438787,41932 438488,41706 C 437989,41329 436719,41316 436412,41685 C 436167,41981 433600,42152 427900,42254 C 425748,42292 425233,42360 424912,42650 C 424662,42876 424200,43000 423609,43000 C 423072,43000 422382,43167 421937,43406 C 421083,43863 417545,43958 417029,43537 C 416880,43416 416168,43255 415447,43181 C 414509,43084 414045,42935 413818,42658 C 413531,42309 413274,42278 411200,42334 C 409935,42368 407730,42309 406300,42203 C 403192,41973 400160,41942 398454,42123 C 397344,42240 397170,42209 396854,41836 C 396345,41234 391903,41115 391481,41692 C 391034,42303 383825,42443 382458,41867 C 382012,41679 381001,41528 380000,41500 C 378971,41471 377905,41308 377300,41088 C 376664,40857 375718,40720 374700,40712 C 373820,40706 372988,40627 372850,40538 C 372713,40449 372489,40445 372352,40530 C 371984,40757 368339,40774 368053,40549 C 367916,40442 367646,40427 367453,40514 C 366829,40795 364922,40784 364600,40498 C 364000,39964 362536,39606 361468,39731 C 360559,39836 360403,39800 360169,39425 C 360023,39191 359719,39000 359494,39000 C 359269,39000 358732,38820 358300,38600 C 357868,38380 357223,38200 356865,38200 C 356414,38200 356147,38074 355995,37790 C 355836,37494 355660,37417 355359,37513 C 354958,37640 354119,37451 352563,36883 C 352073,36704 351216,36640 350011,36692 C 348381,36762 348177,36731 347992,36385 C 347858,36135 347573,36000 347180,36000 C 346846,36000 346420,35918 346232,35817 C 346021,35704 345527,35718 344933,35854 L 343975,36073 L 343237,35274 C 342398,34363 340730,32979 340026,32609 C 339684,32430 339009,32399 337605,32500 C 335949,32618 335640,32593 335539,32331 C 335474,32161 335100,31962 334707,31888 C 333966,31749 332000,30144 332000,29678 C 332000,29505 331600,29440 330650,29458 C 329176,29487 328210,29111 327129,28086 C 326584,27569 326490,27550 324990,27653 C 323494,27756 323405,27738 323103,27277 C 322847,26886 322714,26832 322406,26997 C 321833,27304 321216,27243 320516,26810 C 320004,26493 319469,26412 317692,26379 C 315742,26343 315445,26290 315000,25895 C 314632,25567 314132,25414 313104,25315 C 312279,25235 311566,25050 311359,24863 C 311065,24596 310600,24561 308455,24644 C 306784,24708 305781,24667 305551,24523 C 305290,24360 305093,24371 304781,24566 C 304385,24813 302767,24774 301190,24481 C 300840,24415 300501,24539 300113,24872 C 299418,25469 297033,25493 295722,24914 C 294673,24452 288253,24588 287488,25090 C 286960,25436 286149,25493 285637,25221 C 285435,25114 284859,25123 284200,25244 C 283595,25355 282680,25459 282166,25473 C 281483,25493 281096,25628 280726,25975 C 280331,26347 280098,26420 279660,26309 C 279352,26231 278920,26176 278700,26187 C 276148,26312 275745,26365 275604,26594 C 275411,26906 273510,27235 272853,27070 C 272573,27000 272246,27072 272042,27248 C 271579,27648 270480,28000 269695,28000 C 269340,28000 268948,28122 268824,28271 C 268689,28434 267951,28597 266983,28677 C 266095,28751 265172,28940 264932,29097 C 264693,29254 264318,29386 264098,29391 C 262610,29422 261943,29551 261783,29837 C 261648,30079 261241,30164 260102,30192 C 257778,30248 257539,30285 256948,30680 C 256558,30940 256209,31012 255765,30923 C 255004,30771 254015,31295 254379,31659 C 254500,31780 254600,32017 254600,32185 C 254600,32487 256151,33999 256461,34000 C 256737,34000 257408,35742 257282,36131 C 256925,37232 256725,37600 256484,37600 C 256134,37600 255200,39203 255200,39805 C 255200,40063 255002,40485 254760,40743 C 253774,41792 254506,43268 256594,44441 C 257468,44932 257364,45438 256184,46433 C 255274,47201 255181,47353 255289,47895 C 255555,49226 258913,53200 259772,53200 C 260257,53200 262200,54340 262200,54624 C 262200,55728 261044,56043 259352,55400 C 258576,55105 258053,55033 257358,55125 C 256606,55224 256272,55164 255697,54825 C 255301,54591 254785,54400 254549,54400 C 254314,54400 253767,54154 253333,53854 C 252667,53392 252356,53312 251323,53336 C 250352,53359 250026,53286 249742,52983 C 249502,52726 249114,52600 248560,52600 C 247797,52600 246600,51742 246600,51196 C 246600,51124 245832,51053 244893,51039 C 242990,51012 242853,50966 242591,50277 C 242490,50011 242188,49709 241920,49608 C 241652,49506 241351,49277 241252,49099 C 241099,48827 240988,48814 240536,49020 C 238675,49868 236370,47474 237133,45487 C 237491,44554 235278,43469 234503,44197 C 234130,44548 233799,44595 231690,44595 C 230376,44595 228931,44596 228481,44597 C 227914,44599 227550,44476 227300,44200 C 227101,43980 226814,43800 226662,43800 C 226367,43800 225926,43549 224230,42415 C 223642,42022 222922,41576 222630,41425 C 220618,40380 220448,38400 222370,38400 C 222856,38400 223063,38281 223235,37903 C 223622,37053 224362,36714 225900,36681 C 228281,36630 228633,36485 228478,35624 C 228308,34685 228304,34682 227531,34962 C 227168,35093 226681,35200 226448,35200 C 226214,35200 225975,35279 225915,35376 C 225855,35473 225107,35611 224253,35683 C 223399,35755 222160,35938 221500,36090 C 218669,36740 218260,36789 216900,36646 L 215500,36499 L 215518,35636 C 215536,34795 215523,34777 215018,34936 C 213925,35282 211745,35094 211435,34628 C 211279,34392 211034,34200 210890,34200 C 210747,34200 210465,33993 210265,33741 C 209712,33045 209493,32975 208871,33300 C 208557,33464 208184,33598 208043,33599 C 207902,33599 207587,33724 207343,33876 C 206726,34261 205326,34438 204720,34208 C 204298,34047 204105,34106 203571,34555 C 202959,35070 202832,35094 200914,35066 C 199549,35046 198803,35117 198600,35288 C 198225,35602 196696,35983 195900,35960 C 195570,35950 194940,36104 194500,36302 C 193788,36622 192990,36665 187257,36690 C 180907,36717 180807,36724 180344,37159 C 180086,37401 179699,37600 179485,37600 C 179271,37600 178990,37770 178860,37978 C 178724,38196 178301,38403 177862,38466 C 177443,38527 176560,38684 175900,38815 C 175240,38946 173845,39041 172800,39026 C 171755,39010 170376,38999 169736,39001 C 169035,39002 168406,38887 168155,38711 C 167865,38508 167630,38477 167384,38609 C 166961,38835 165066,37989 163150,36719 C 162295,36152 162792,34421 163934,33987 C 164683,33702 164694,33285 163976,32429 C 163426,31775 163241,31671 162875,31810 C 162632,31902 161297,31923 159906,31858 C 157519,31745 157373,31760 157277,32126 C 157167,32549 154165,34213 153529,34205 C 153325,34202 152890,34425 152564,34700 C 152114,35078 151740,35200 151029,35200 C 150512,35200 149903,35330 149675,35490 C 148885,36043 147357,35123 147437,34142 C 147539,32894 144698,32063 143661,33037 C 143226,33445 142987,33476 140047,33504 C 137925,33524 136742,33617 136420,33789 C 136060,33982 135765,33993 135221,33832 C 133949,33458 132870,33396 131772,33637 C 131182,33766 130174,33851 129531,33827 C 128808,33799 128243,33881 128050,34041 C 127846,34210 127109,34301 125919,34303 C 124699,34306 123935,34402 123600,34597 C 123268,34789 122427,34898 121100,34922 C 118604,34966 117285,35157 116984,35519 C 116583,36003 113288,35907 112854,35400 C 112665,35180 112317,35000 112079,35000 C 111821,35000 111434,34720 111116,34303 C 110329,33272 110112,33211 107900,33400 C 106810,33493 105778,33498 105609,33410 C 105439,33322 104805,33336 104200,33442 C 102361,33762 101887,33714 101122,33130 C 100278,32487 96850,32305 94300,32769 C 93530,32909 92495,33072 92000,33131 C 91505,33190 91014,33320 90910,33419 C 90642,33674 89451,33645 89287,33380 C 88932,32805 87731,32584 84851,32562 C 81966,32541 81917,32533 81108,31963 C 80362,31437 80055,31366 77694,31172 C 75961,31030 74991,30862 74770,30667 C 74445,30379 73225,30287 67500,30122 C 65954,30077 65302,29968 64629,29640 C 63846,29259 61921,28889 60000,28750 C 59451,28711 59287,28605 59238,28262 C 59070,27086 57036,26045 55994,26603 C 55735,26742 55184,26736 54257,26585 C 53217,26416 52760,26422 52300,26610 C 51215,27055 49219,27003 48766,26519 C 48400,26128 48361,26123 48177,26450 C 47957,26841 46124,26962 45900,26600 C 45832,26490 45584,26400 45349,26400 C 45114,26400 44563,26153 44125,25850 L 43328,25300 L 39586,25300 C 36389,25300 35790,25252 35472,24969 C 35162,24694 34792,24657 33262,24746 C 31630,24842 31344,24806 30701,24427 C 29567,23758 7765,23755 6915,24424 C 6467,24776 6212,24827 5415,24721 C 4690,24625 4394,24666 4207,24891 C 3942,25211 3468,25313 1350,25508 L 0,25632 L 0,12816 L 0,0 L 384000,0 L 768000,0 L 768000,12476 L 768000,24951 L 767350,25225 C 766877,25424 765724,25494 763124,25484 C 759602,25471 759540,25478 759065,25953 C 758512,26506 756721,26446 756261,25859 C 755910,25410 754277,25270 753845,25652 C 753169,26249 748811,26593 748000,26113 C 746758,25378 746554,25352 745636,25811 C 745077,26090 744393,26246 743732,26245 C 743114,26245 742402,26396 741958,26622 C 741550,26830 741037,27000 740819,27000 C 739603,27000 739535,28520 740700,29669 C 741195,30157 741600,30696 741600,30868 C 741600,31131 741902,31175 743524,31151 C 745062,31128 745494,31185 745677,31435 C 745967,31831 747115,32099 747293,31812 C 747499,31479 747972,31563 748346,32000 C 748535,32220 748844,32400 749033,32400 C 749222,32400 749432,32490 749500,32600 C 749574,32720 750054,32750 750694,32675 C 751644,32563 751795,32597 752031,32975 C 752187,33225 752503,33400 752798,33400 C 753086,33400 753627,33691 754067,34083 C 754489,34458 755101,34876 755427,35011 C 757089,35700 757030,38200 755352,38200 C 755135,38200 754510,38425 753963,38700 C 753415,38975 752651,39200 752265,39200 C 751857,39200 751342,39374 751035,39615 C 750620,39942 750283,40017 749462,39965 C 748643,39914 748362,39976 748159,40254 C 747952,40536 747533,40623 746100,40683 C 745047,40726 743885,40908 743300,41119 C 742464,41422 741640,41483 738271,41491 C 734766,41499 734193,41544 733866,41840 C 733659,42028 733087,42244 732595,42321 C 732103,42397 731485,42627 731223,42830 C 730686,43246 730158,43299 729586,42992 C 729302,42841 728946,42870 728260,43103 C 727706,43291 727030,43376 726611,43309 C 726220,43247 725773,43278 725618,43379 C 725443,43493 725158,43481 724863,43347 C 724515,43188 724327,43193 724155,43365 C 724026,43494 723702,43600 723436,43600 C 723170,43600 722645,43870 722269,44200 C 721894,44530 721387,44801 721143,44801 C 720899,44802 720442,44937 720127,45101 C 719419,45471 719216,45474 718816,45124 C 718164,44553 717659,44554 717126,45128 C 716690,45599 716555,45644 716142,45455 C 715852,45323 715552,45308 715382,45416 C 715227,45514 714735,45595 714288,45597 C 713842,45599 713302,45732 713088,45894 C 712875,46055 712518,46190 712295,46194 C 712071,46197 711672,46352 711408,46537 C 710709,47027 708094,47036 707655,46550 C 707237,46089 706746,46107 706300,46600 C 706101,46820 705738,47000 705493,47000 C 705249,47000 704931,47142 704788,47315 C 704005,48258 702674,48573 701933,47990 C 701536,47678 701322,47628 701038,47780 C 700833,47890 700467,47928 700226,47865 C 699960,47795 699643,47880 699422,48080 C 699029,48436 693047,48926 691964,48691 C 691566,48604 691376,48671 691228,48949 C 691052,49277 690753,49326 688784,49353 C 686642,49381 686514,49407 685981,49918 C 685459,50418 685341,50445 684221,50318 C 683298,50214 682705,50275 681660,50584 C 680225,51007 677596,51049 674181,50701 C 672471,50528 670883,50900 670462,51575 C 670263,51893 670036,51938 668964,51869 C 665477,51647 663877,51727 662964,52169 C 661943,52663 661581,52701 661231,52351 C 661095,52215 660379,52042 659641,51969 C 658904,51895 657895,51744 657400,51634 C 656672,51471 656436,51491 656163,51736 C 655903,51969 655558,52009 654663,51909 C 654023,51837 653029,51781 652454,51784 C 651620,51787 651366,51710 651200,51400 C 651045,51110 650854,51039 650445,51121 C 649967,51217 649828,51117 649329,50329 C 648466,48964 647389,49042 645850,50581 C 644765,51666 644108,51426 644070,49930 C 644035,48516 641996,47324 641117,48203 C 641008,48312 640688,48400 640405,48400 C 638977,48400 638617,49441 639918,49805 C 641020,50114 641399,50704 641024,51528 C 640725,52182 638715,52103 637758,51399 C 637066,50890 636835,50897 636246,51450 C 635558,52095 632192,52050 631486,51387 C 631084,51009 630896,50979 629710,51106 C 628594,51226 628323,51193 627995,50896 C 627629,50564 627544,50563 626553,50871 C 624552,51495 621730,50908 620692,49651 C 620287,49162 617640,49267 616900,49802 C 616556,50050 614125,50768 613600,50776 C 611922,50801 610098,51205 609784,51621 C 609543,51941 609327,52025 608971,51936 C 608620,51847 608420,51922 608242,52207 C 608101,52433 607777,52600 607480,52600 C 607123,52600 606929,52730 606853,53019 C 606779,53304 606217,53690 605103,54221 C 603993,54751 603389,55166 603235,55502 C 603011,55995 601411,56203 600400,55870 z" + id="path164" + style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + </g> + </g> +</svg> diff --git a/applets/clock/set-timezone.c b/applets/clock/set-timezone.c new file mode 100644 index 00000000..3b4f1e56 --- /dev/null +++ b/applets/clock/set-timezone.c @@ -0,0 +1,291 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 David Zeuthen <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> +#include <sys/wait.h> + +#include <dbus/dbus-glib.h> +#include <dbus/dbus-glib-lowlevel.h> + +#include "set-timezone.h" + + +static DBusGConnection * +get_system_bus (void) +{ + GError *error; + static DBusGConnection *bus = NULL; + + if (bus == NULL) { + error = NULL; + bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); + if (bus == NULL) { + g_warning ("Couldn't connect to system bus: %s", + error->message); + g_error_free (error); + } + } + + return bus; +} + +#define CACHE_VALIDITY_SEC 2 + +typedef void (*CanDoFunc) (gint value); + +static void +notify_can_do (DBusGProxy *proxy, + DBusGProxyCall *call, + void *user_data) +{ + CanDoFunc callback = user_data; + GError *error = NULL; + gint value; + + if (dbus_g_proxy_end_call (proxy, call, + &error, + G_TYPE_INT, &value, + G_TYPE_INVALID)) { + callback (value); + } +} + +static void +refresh_can_do (const gchar *action, CanDoFunc callback) +{ + DBusGConnection *bus; + DBusGProxy *proxy; + + bus = get_system_bus (); + if (bus == NULL) + return; + + proxy = dbus_g_proxy_new_for_name (bus, + "org.mate.SettingsDaemon.DateTimeMechanism", + "/", + "org.mate.SettingsDaemon.DateTimeMechanism"); + + dbus_g_proxy_begin_call_with_timeout (proxy, + action, + notify_can_do, + callback, NULL, + INT_MAX, + G_TYPE_INVALID); +} + +static gint settimezone_cache = 0; +static time_t settimezone_stamp = 0; + +static void +update_can_settimezone (gint res) +{ + settimezone_cache = res; + time (&settimezone_stamp); +} + +gint +can_set_system_timezone (void) +{ + time_t now; + + time (&now); + if (ABS (now - settimezone_stamp) > CACHE_VALIDITY_SEC) { + refresh_can_do ("CanSetTimezone", update_can_settimezone); + settimezone_stamp = now; + } + + return settimezone_cache; +} + +static gint settime_cache = 0; +static time_t settime_stamp = 0; + +static void +update_can_settime (gint res) +{ + settime_cache = res; + time (&settime_stamp); +} + +gint +can_set_system_time (void) +{ + time_t now; + + time (&now); + if (ABS (now - settime_stamp) > CACHE_VALIDITY_SEC) { + refresh_can_do ("CanSetTime", update_can_settime); + settime_stamp = now; + } + + return settime_cache; +} + +typedef struct { + gint ref_count; + gchar *call; + gint64 time; + gchar *filename; + GFunc callback; + gpointer data; + GDestroyNotify notify; +} SetTimeCallbackData; + +static void +free_data (gpointer d) +{ + SetTimeCallbackData *data = d; + + data->ref_count--; + if (data->ref_count == 0) { + if (data->notify) + data->notify (data->data); + g_free (data->filename); + g_free (data); + } +} + +static void +set_time_notify (DBusGProxy *proxy, + DBusGProxyCall *call, + void *user_data) +{ + SetTimeCallbackData *data = user_data; + GError *error = NULL; + + if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) { + if (data->callback) + data->callback (data->data, NULL); + } + else { + if (error->domain == DBUS_GERROR && + error->code == DBUS_GERROR_NO_REPLY) { + /* these errors happen because dbus doesn't + * use monotonic clocks + */ + g_warning ("ignoring no-reply error when setting time"); + g_error_free (error); + if (data->callback) + data->callback (data->data, NULL); + } + else { + if (data->callback) + data->callback (data->data, error); + else + g_error_free (error); + } + } +} + +static void +set_time_async (SetTimeCallbackData *data) +{ + DBusGConnection *bus; + DBusGProxy *proxy; + + bus = get_system_bus (); + if (bus == NULL) + return; + + proxy = dbus_g_proxy_new_for_name (bus, + "org.mate.SettingsDaemon.DateTimeMechanism", + "/", + "org.mate.SettingsDaemon.DateTimeMechanism"); + + data->ref_count++; + if (strcmp (data->call, "SetTime") == 0) + dbus_g_proxy_begin_call_with_timeout (proxy, + "SetTime", + set_time_notify, + data, free_data, + INT_MAX, + /* parameters: */ + G_TYPE_INT64, data->time, + G_TYPE_INVALID, + /* return values: */ + G_TYPE_INVALID); + else + dbus_g_proxy_begin_call_with_timeout (proxy, + "SetTimezone", + set_time_notify, + data, free_data, + INT_MAX, + /* parameters: */ + G_TYPE_STRING, data->filename, + G_TYPE_INVALID, + /* return values: */ + G_TYPE_INVALID); +} + +void +set_system_time_async (gint64 time, + GFunc callback, + gpointer d, + GDestroyNotify notify) +{ + SetTimeCallbackData *data; + + if (time == -1) + return; + + data = g_new0 (SetTimeCallbackData, 1); + data->ref_count = 1; + data->call = "SetTime"; + data->time = time; + data->filename = NULL; + data->callback = callback; + data->data = d; + data->notify = notify; + + set_time_async (data); + free_data (data); +} + +void +set_system_timezone_async (const gchar *filename, + GFunc callback, + gpointer d, + GDestroyNotify notify) +{ + SetTimeCallbackData *data; + + if (filename == NULL) + return; + + data = g_new0 (SetTimeCallbackData, 1); + data->ref_count = 1; + data->call = "SetTimezone"; + data->time = -1; + data->filename = g_strdup (filename); + data->callback = callback; + data->data = d; + data->notify = notify; + + set_time_async (data); + free_data (data); +} diff --git a/applets/clock/set-timezone.h b/applets/clock/set-timezone.h new file mode 100644 index 00000000..5280b079 --- /dev/null +++ b/applets/clock/set-timezone.h @@ -0,0 +1,40 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 David Zeuthen <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef __SET_SYSTEM_TIMEZONE_H__ + +#include <glib.h> +#include <time.h> + +gint can_set_system_timezone (void); + +gint can_set_system_time (void); + +void set_system_time_async (gint64 time, + GFunc callback, + gpointer data, + GDestroyNotify notify); + +void set_system_timezone_async (const gchar *filename, + GFunc callback, + gpointer data, + GDestroyNotify notify); + +#endif diff --git a/applets/clock/system-timezone.c b/applets/clock/system-timezone.c new file mode 100644 index 00000000..336f5a9f --- /dev/null +++ b/applets/clock/system-timezone.c @@ -0,0 +1,1048 @@ +/* System timezone handling + * + * Copyright (C) 2008 Novell, Inc. + * + * Authors: Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + * + * Some code is based on previous code in clock-location.c and on code from + * tz.c (shipped with version <= 2.22.0). Those files were under the same + * license, with those authors and copyrights: + * + * clock-location.c: + * ================ + * No header, but most of the work was done (AFAIK) by + * Federico Mena Quintero <[email protected]> + * Matthias Clasen <[email protected]> + * + * tz.c: + * ==== + * Copyright (C) 2000-2001 Ximian, Inc. + * Copyright (C) 2004 Sun Microsystems, Inc. + * + * Authors: Hans Petter Jansson <[email protected]> + * additional functions by Erwann Chenede <[email protected]> + * reworked by Vincent Untz <[email protected]> + * + * Largely based on Michael Fulbright's work on Anaconda. + */ + +/* FIXME: it'd be nice to filter out the timezones that we might get when + * parsing config files that are not in zone.tab. Note that it's also wrong + * in some cases: eg, in tzdata2008b, Asia/Calcutta got renamed to + * Asia/Kolkata and the old name is not in zone.tab. */ + +#include <string.h> +#include <unistd.h> + +#include <glib.h> +#include <glib/gstdio.h> +#include <gio/gio.h> + +#include "system-timezone.h" + +/* Files that we look at and that should be monitored */ +#define CHECK_NB 5 +#define ETC_TIMEZONE "/etc/timezone" +#define ETC_TIMEZONE_MAJ "/etc/TIMEZONE" +#define ETC_RC_CONF "/etc/rc.conf" +#define ETC_SYSCONFIG_CLOCK "/etc/sysconfig/clock" +#define ETC_CONF_D_CLOCK "/etc/conf.d/clock" +#define ETC_LOCALTIME "/etc/localtime" + +/* The first 4 characters in a timezone file, from tzfile.h */ +#define TZ_MAGIC "TZif" + +static char *files_to_check[CHECK_NB] = { + ETC_TIMEZONE, + ETC_TIMEZONE_MAJ, + ETC_SYSCONFIG_CLOCK, + ETC_CONF_D_CLOCK, + ETC_LOCALTIME +}; + +static GObject *systz_singleton = NULL; + +G_DEFINE_TYPE (SystemTimezone, system_timezone, G_TYPE_OBJECT) + +typedef struct { + char *tz; + char *env_tz; + GFileMonitor *monitors[CHECK_NB]; +} SystemTimezonePrivate; + +enum { + CHANGED, + LAST_SIGNAL +}; + +static guint system_timezone_signals[LAST_SIGNAL] = { 0 }; + +static GObject *system_timezone_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties); +static void system_timezone_finalize (GObject *obj); + +static void system_timezone_monitor_changed (GFileMonitor *handle, + GFile *file, + GFile *other_file, + GFileMonitorEvent event, + gpointer user_data); +static char *system_timezone_find (void); + +#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezonePrivate)) + +SystemTimezone * +system_timezone_new (void) +{ + return g_object_new (SYSTEM_TIMEZONE_TYPE, NULL); +} + +const char * +system_timezone_get (SystemTimezone *systz) +{ + SystemTimezonePrivate *priv; + + g_return_val_if_fail (IS_SYSTEM_TIMEZONE (systz), NULL); + + priv = PRIVATE (systz); + return priv->tz; +} + +const char * +system_timezone_get_env (SystemTimezone *systz) +{ + SystemTimezonePrivate *priv; + + g_return_val_if_fail (IS_SYSTEM_TIMEZONE (systz), NULL); + + priv = PRIVATE (systz); + return priv->env_tz; +} + +static void +system_timezone_class_init (SystemTimezoneClass *class) +{ + GObjectClass *g_obj_class = G_OBJECT_CLASS (class); + + g_obj_class->constructor = system_timezone_constructor; + g_obj_class->finalize = system_timezone_finalize; + + system_timezone_signals[CHANGED] = + g_signal_new ("changed", + G_OBJECT_CLASS_TYPE (g_obj_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (SystemTimezoneClass, changed), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING); + + g_type_class_add_private (class, sizeof (SystemTimezonePrivate)); +} + +static void +system_timezone_init (SystemTimezone *systz) +{ + int i; + SystemTimezonePrivate *priv = PRIVATE (systz); + + priv->tz = NULL; + priv->env_tz = NULL; + for (i = 0; i < CHECK_NB; i++) + priv->monitors[i] = NULL; +} + +static GObject * +system_timezone_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + GObject *obj; + SystemTimezonePrivate *priv; + int i; + + /* This is a singleton, we don't need to have it per-applet */ + if (systz_singleton) + return g_object_ref (systz_singleton); + + obj = G_OBJECT_CLASS (system_timezone_parent_class)->constructor ( + type, + n_construct_properties, + construct_properties); + + priv = PRIVATE (obj); + + priv->tz = system_timezone_find (); + + priv->env_tz = g_strdup (g_getenv ("TZ")); + + for (i = 0; i < CHECK_NB; i++) { + GFile *file; + GFile *parent; + GFileType parent_type; + + file = g_file_new_for_path (files_to_check[i]); + + parent = g_file_get_parent (file); + parent_type = g_file_query_file_type (parent, G_FILE_QUERY_INFO_NONE, NULL); + g_object_unref (parent); + + /* We don't try to monitor the file if the parent directory + * doesn't exist: this means we're on a system where this file + * is not useful to determine the system timezone. + * Since gio does not monitor file in non-existing directories + * in a clever way (as of gio 2.22, it just polls every other + * seconds to see if the directory now exists), this avoids + * unnecessary wakeups. */ + if (parent_type == G_FILE_TYPE_DIRECTORY) + priv->monitors[i] = g_file_monitor_file (file, + G_FILE_MONITOR_NONE, + NULL, NULL); + g_object_unref (file); + + if (priv->monitors[i]) + g_signal_connect (G_OBJECT (priv->monitors[i]), + "changed", + G_CALLBACK (system_timezone_monitor_changed), + obj); + } + + systz_singleton = obj; + + return systz_singleton; +} + +static void +system_timezone_finalize (GObject *obj) +{ + int i; + SystemTimezonePrivate *priv = PRIVATE (obj); + + if (priv->tz) { + g_free (priv->tz); + priv->tz = NULL; + } + + if (priv->env_tz) { + g_free (priv->env_tz); + priv->env_tz = NULL; + } + + for (i = 0; i < CHECK_NB; i++) { + if (priv->monitors[i]) + g_object_unref (priv->monitors[i]); + priv->monitors[i] = NULL; + } + + G_OBJECT_CLASS (system_timezone_parent_class)->finalize (obj); + + g_assert (obj == systz_singleton); + + systz_singleton = NULL; +} + +static void +system_timezone_monitor_changed (GFileMonitor *handle, + GFile *file, + GFile *other_file, + GFileMonitorEvent event, + gpointer user_data) +{ + SystemTimezonePrivate *priv = PRIVATE (user_data); + char *new_tz; + + if (event != G_FILE_MONITOR_EVENT_CHANGED && + event != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT && + event != G_FILE_MONITOR_EVENT_DELETED && + event != G_FILE_MONITOR_EVENT_CREATED) + return; + + new_tz = system_timezone_find (); + + g_assert (priv->tz != NULL && new_tz != NULL); + + if (strcmp (priv->tz, new_tz) != 0) { + g_free (priv->tz); + priv->tz = new_tz; + + g_signal_emit (G_OBJECT (user_data), + system_timezone_signals[CHANGED], + 0, priv->tz); + } else + g_free (new_tz); +} + + +/* + * Code to deal with the system timezone on all distros. + * There's no dependency on the SystemTimezone GObject here. + * + * Here's what we know: + * + * + /etc/localtime contains the binary data of the timezone. + * It can be a symlink to the actual data file, a hard link to the data + * file, or just a copy. So we can determine the timezone with this + * (reading the symlink, comparing inodes, or comparing content). + * + * + However, most distributions also have the timezone setting + * configured somewhere else. This might be better to read it from there. + * + * Debian/Ubuntu/Gentoo (new): content of /etc/timezone + * Fedora/Mandriva: the ZONE key in /etc/sysconfig/clock + * openSUSE: the TIMEZONE key in /etc/sysconfig/clock + * Solaris/OpenSolaris: the TZ key in /etc/TIMEZONE + * Arch Linux: the TIMEZONE key in /etc/rc.conf + * Gentoo (old): the ZONE key in /etc/conf.d/clock + * + * FIXME: reading the system-tools-backends, it seems there's this too: + * Solaris: the TZ key in /etc/default/init + * /etc/TIMEZONE seems to be a link to /etc/default/init + * + * First, some functions to handle those system config files. + * + */ + +/* This works for Debian and derivatives (including Ubuntu), and new Gentoo */ +static char * +system_timezone_read_etc_timezone (void) +{ + FILE *etc_timezone; + GString *reading; + int c; + + etc_timezone = g_fopen (ETC_TIMEZONE, "r"); + if (!etc_timezone) + return NULL; + + reading = g_string_new (""); + + c = fgetc (etc_timezone); + /* only get the first line, we'll validate the value later */ + while (c != EOF && !g_ascii_isspace (c)) { + reading = g_string_append_c (reading, c); + c = fgetc (etc_timezone); + } + + fclose (etc_timezone); + + if (reading->str && reading->str[0] != '\0') + return g_string_free (reading, FALSE); + else + g_string_free (reading, TRUE); + + return NULL; +} + +static gboolean +system_timezone_write_etc_timezone (const char *tz, + GError **error) +{ + char *content; + GError *our_error; + gboolean retval; + + if (!g_file_test (ETC_TIMEZONE, G_FILE_TEST_IS_REGULAR)) + return TRUE; + + content = g_strdup_printf ("%s\n", tz); + + our_error = NULL; + retval = g_file_set_contents (ETC_TIMEZONE, content, -1, &our_error); + g_free (content); + + if (!retval) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_GENERAL, + ETC_TIMEZONE" cannot be overwritten: %s", + our_error->message); + g_error_free (our_error); + } + + return retval; +} + + +/* Read a file that looks like a key-file (but there's no need for groups) + * and get the last value for a specific key */ +static char * +system_timezone_read_key_file (const char *filename, + const char *key) +{ + GIOChannel *channel; + char *key_eq; + char *line; + char *retval; + + if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)) + return NULL; + + channel = g_io_channel_new_file (filename, "r", NULL); + if (!channel) + return NULL; + + key_eq = g_strdup_printf ("%s=", key); + retval = NULL; + + while (g_io_channel_read_line (channel, &line, NULL, + NULL, NULL) == G_IO_STATUS_NORMAL) { + if (g_str_has_prefix (line, key_eq)) { + char *value; + int len; + + value = line + strlen (key_eq); + g_strstrip (value); + + len = strlen (value); + + if (value[0] == '\"') { + if (value[len - 1] == '\"') { + if (retval) + g_free (retval); + + retval = g_strndup (value + 1, + len - 2); + } + } else { + if (retval) + g_free (retval); + + retval = g_strdup (line + strlen (key_eq)); + } + + g_strstrip (retval); + } + + g_free (line); + } + + g_free (key_eq); + g_io_channel_unref (channel); + + return retval; +} + +static gboolean +system_timezone_write_key_file (const char *filename, + const char *key, + const char *value, + GError **error) +{ + GError *our_error; + char *content; + gsize len; + char *key_eq; + char **lines; + gboolean replaced; + gboolean retval; + int n; + + if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)) + return TRUE; + + our_error = NULL; + + if (!g_file_get_contents (filename, &content, &len, &our_error)) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_GENERAL, + "%s cannot be read: %s", + filename, our_error->message); + g_error_free (our_error); + return FALSE; + } + + lines = g_strsplit (content, "\n", 0); + g_free (content); + + key_eq = g_strdup_printf ("%s=", key); + replaced = FALSE; + + for (n = 0; lines[n] != NULL; n++) { + if (g_str_has_prefix (lines[n], key_eq)) { + char *old_value; + gboolean use_quotes; + + old_value = lines[n] + strlen (key_eq); + g_strstrip (old_value); + use_quotes = old_value[0] == '\"'; + + g_free (lines[n]); + + if (use_quotes) + lines[n] = g_strdup_printf ("%s\"%s\"", + key_eq, value); + else + lines[n] = g_strdup_printf ("%s%s", + key_eq, value); + + replaced = TRUE; + } + } + + g_free (key_eq); + + if (!replaced) { + g_strfreev (lines); + return TRUE; + } + + content = g_strjoinv ("\n", lines); + g_strfreev (lines); + + retval = g_file_set_contents (filename, content, -1, &our_error); + g_free (content); + + if (!retval) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_GENERAL, + "%s cannot be overwritten: %s", + filename, our_error->message); + g_error_free (our_error); + } + + return retval; +} + +/* This works for Solaris/OpenSolaris */ +static char * +system_timezone_read_etc_TIMEZONE (void) +{ + return system_timezone_read_key_file (ETC_TIMEZONE_MAJ, + "TZ"); +} + +static gboolean +system_timezone_write_etc_TIMEZONE (const char *tz, + GError **error) +{ + return system_timezone_write_key_file (ETC_TIMEZONE_MAJ, + "TZ", tz, error); +} + +/* This works for Fedora and Mandriva */ +static char * +system_timezone_read_etc_sysconfig_clock (void) +{ + return system_timezone_read_key_file (ETC_SYSCONFIG_CLOCK, + "ZONE"); +} + +static gboolean +system_timezone_write_etc_sysconfig_clock (const char *tz, + GError **error) +{ + return system_timezone_write_key_file (ETC_SYSCONFIG_CLOCK, + "ZONE", tz, error); +} + +/* This works for openSUSE */ +static char * +system_timezone_read_etc_sysconfig_clock_alt (void) +{ + return system_timezone_read_key_file (ETC_SYSCONFIG_CLOCK, + "TIMEZONE"); +} + +static gboolean +system_timezone_write_etc_sysconfig_clock_alt (const char *tz, + GError **error) +{ + return system_timezone_write_key_file (ETC_SYSCONFIG_CLOCK, + "TIMEZONE", tz, error); +} + +/* This works for old Gentoo */ +static char * +system_timezone_read_etc_conf_d_clock (void) +{ + return system_timezone_read_key_file (ETC_CONF_D_CLOCK, + "TIMEZONE"); +} + +static gboolean +system_timezone_write_etc_conf_d_clock (const char *tz, + GError **error) +{ + return system_timezone_write_key_file (ETC_CONF_D_CLOCK, + "TIMEZONE", tz, error); +} + +/* This works for Arch Linux */ +static char * +system_timezone_read_etc_rc_conf (void) +{ + return system_timezone_read_key_file (ETC_RC_CONF, + "TIMEZONE"); +} + +static gboolean +system_timezone_write_etc_rc_conf (const char *tz, + GError **error) +{ + return system_timezone_write_key_file (ETC_RC_CONF, + "TIMEZONE", tz, error); +} + +/* + * + * First, getting the timezone. + * + */ + +static char * +system_timezone_strip_path_if_valid (const char *filename) +{ + int skip; + + if (!filename || !g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/")) + return NULL; + + /* Timezone data files also live under posix/ and right/ for some + * reason. + * FIXME: make sure accepting those files is valid. I think "posix" is + * okay, not sure about "right" */ + if (g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/posix/")) + skip = strlen (SYSTEM_ZONEINFODIR"/posix/"); + else if (g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/right/")) + skip = strlen (SYSTEM_ZONEINFODIR"/right/"); + else + skip = strlen (SYSTEM_ZONEINFODIR"/"); + + return g_strdup (filename + skip); +} + +/* Read the soft symlink from /etc/localtime */ +static char * +system_timezone_read_etc_localtime_softlink (void) +{ + char *file; + char *tz; + + if (!g_file_test (ETC_LOCALTIME, G_FILE_TEST_IS_SYMLINK)) + return NULL; + + file = g_file_read_link (ETC_LOCALTIME, NULL); + tz = system_timezone_strip_path_if_valid (file); + g_free (file); + + return tz; +} + +typedef gboolean (*CompareFiles) (struct stat *a_stat, + struct stat *b_stat, + const char *a_content, + gsize a_content_len, + const char *b_filename); + +static char * +recursive_compare (struct stat *localtime_stat, + const char *localtime_content, + gsize localtime_content_len, + char *file, + CompareFiles compare_func) +{ + struct stat file_stat; + + if (g_stat (file, &file_stat) != 0) + return NULL; + + if (S_ISREG (file_stat.st_mode)) { + if (compare_func (localtime_stat, + &file_stat, + localtime_content, + localtime_content_len, + file)) + return system_timezone_strip_path_if_valid (file); + else + return NULL; + } else if (S_ISDIR (file_stat.st_mode)) { + GDir *dir = NULL; + char *ret = NULL; + const char *subfile = NULL; + char *subpath = NULL; + + dir = g_dir_open (file, 0, NULL); + if (dir == NULL) + return NULL; + + while ((subfile = g_dir_read_name (dir)) != NULL) { + subpath = g_build_filename (file, subfile, NULL); + + ret = recursive_compare (localtime_stat, + localtime_content, + localtime_content_len, + subpath, + compare_func); + + g_free (subpath); + + if (ret != NULL) + break; + } + + g_dir_close (dir); + + return ret; + } + + return NULL; +} + + +static gboolean +files_are_identical_inode (struct stat *a_stat, + struct stat *b_stat, + const char *a_content, + gsize a_content_len, + const char *b_filename) +{ + return (a_stat->st_ino == b_stat->st_ino); +} + + +/* Determine if /etc/localtime is a hard link to some file, by looking at + * the inodes */ +static char * +system_timezone_read_etc_localtime_hardlink (void) +{ + struct stat stat_localtime; + + if (g_stat (ETC_LOCALTIME, &stat_localtime) != 0) + return NULL; + + if (!S_ISREG (stat_localtime.st_mode)) + return NULL; + + return recursive_compare (&stat_localtime, + NULL, + 0, + SYSTEM_ZONEINFODIR, + files_are_identical_inode); +} + +static gboolean +files_are_identical_content (struct stat *a_stat, + struct stat *b_stat, + const char *a_content, + gsize a_content_len, + const char *b_filename) +{ + char *b_content = NULL; + gsize b_content_len = -1; + int cmp; + + if (a_stat->st_size != b_stat->st_size) + return FALSE; + + if (!g_file_get_contents (b_filename, + &b_content, &b_content_len, NULL)) + return FALSE; + + if (a_content_len != b_content_len) { + g_free (b_content); + return FALSE; + } + + cmp = memcmp (a_content, b_content, a_content_len); + g_free (b_content); + + return (cmp == 0); +} + +/* Determine if /etc/localtime is a copy of a timezone file */ +static char * +system_timezone_read_etc_localtime_content (void) +{ + struct stat stat_localtime; + char *localtime_content = NULL; + gsize localtime_content_len = -1; + char *retval; + + if (g_stat (ETC_LOCALTIME, &stat_localtime) != 0) + return NULL; + + if (!S_ISREG (stat_localtime.st_mode)) + return NULL; + + if (!g_file_get_contents (ETC_LOCALTIME, + &localtime_content, + &localtime_content_len, + NULL)) + return NULL; + + retval = recursive_compare (&stat_localtime, + localtime_content, + localtime_content_len, + SYSTEM_ZONEINFODIR, + files_are_identical_content); + + g_free (localtime_content); + + return retval; +} + +typedef char * (*GetSystemTimezone) (void); +/* The order of the functions here define the priority of the methods used + * to find the timezone. First method has higher priority. */ +static GetSystemTimezone get_system_timezone_methods[] = { + /* cheap and "more correct" than data from a config file */ + system_timezone_read_etc_localtime_softlink, + /* reading various config files */ + system_timezone_read_etc_timezone, + system_timezone_read_etc_sysconfig_clock, + system_timezone_read_etc_sysconfig_clock_alt, + system_timezone_read_etc_TIMEZONE, + system_timezone_read_etc_rc_conf, + /* reading deprecated config files */ + system_timezone_read_etc_conf_d_clock, + /* reading /etc/timezone directly. Expensive since we have to stat + * many files */ + system_timezone_read_etc_localtime_hardlink, + system_timezone_read_etc_localtime_content, + NULL +}; + +static gboolean +system_timezone_is_valid (const char *tz) +{ + const char *c; + + if (!tz) + return FALSE; + + for (c = tz; *c != '\0'; c++) { + if (!(g_ascii_isalnum (*c) || + *c == '/' || *c == '-' || *c == '_')) + return FALSE; + } + + return TRUE; +} + +static char * +system_timezone_find (void) +{ + char *tz; + int i; + + for (i = 0; get_system_timezone_methods[i] != NULL; i++) { + tz = get_system_timezone_methods[i] (); + + if (system_timezone_is_valid (tz)) + return tz; + + g_free (tz); + } + + return g_strdup ("UTC"); +} + +/* + * + * Now, setting the timezone. + * + */ + +static gboolean +system_timezone_is_zone_file_valid (const char *zone_file, + GError **error) +{ + GError *our_error; + GIOChannel *channel; + GIOStatus status; + char buffer[strlen (TZ_MAGIC)]; + gsize read; + + /* First, check the zone_file is properly rooted */ + if (!g_str_has_prefix (zone_file, SYSTEM_ZONEINFODIR"/")) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE, + "Timezone file needs to be under "SYSTEM_ZONEINFODIR); + return FALSE; + } + + /* Second, check it's a regular file that exists */ + if (!g_file_test (zone_file, G_FILE_TEST_IS_REGULAR)) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE, + "No such timezone file %s", zone_file); + return FALSE; + } + + /* Third, check that it's a tzfile (see tzfile(5)). The file has a 4 + * bytes header which is TZ_MAGIC. + * + * TODO: is there glibc API for this? */ + our_error = NULL; + channel = g_io_channel_new_file (zone_file, "r", &our_error); + if (!our_error) + status = g_io_channel_read_chars (channel, + buffer, strlen (TZ_MAGIC), + &read, &our_error); + if (channel) + g_io_channel_unref (channel); + + if (our_error) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE, + "Timezone file %s cannot be read: %s", + zone_file, our_error->message); + g_error_free (our_error); + return FALSE; + } + + if (read != strlen (TZ_MAGIC) || strncmp (buffer, TZ_MAGIC, strlen (TZ_MAGIC)) != 0) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE, + "%s is not a timezone file", + zone_file); + return FALSE; + } + + return TRUE; +} + +static gboolean +system_timezone_set_etc_timezone (const char *zone_file, + GError **error) +{ + GError *our_error; + char *content; + gsize len; + + if (!system_timezone_is_zone_file_valid (zone_file, error)) + return FALSE; + + /* If /etc/localtime is a symlink, write a symlink */ + if (g_file_test (ETC_LOCALTIME, G_FILE_TEST_IS_SYMLINK)) { + if (g_unlink (ETC_LOCALTIME) == 0 && + symlink (zone_file, ETC_LOCALTIME) == 0) + return TRUE; + + /* If we couldn't symlink the file, we'll just fallback on + * copying it */ + } + + /* Else copy the file to /etc/localtime. We explicitly avoid doing + * hard links since they break with different partitions */ + our_error = NULL; + if (!g_file_get_contents (zone_file, &content, &len, &our_error)) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_GENERAL, + "Timezone file %s cannot be read: %s", + zone_file, our_error->message); + g_error_free (our_error); + return FALSE; + } + + if (!g_file_set_contents (ETC_LOCALTIME, content, len, &our_error)) { + g_set_error (error, SYSTEM_TIMEZONE_ERROR, + SYSTEM_TIMEZONE_ERROR_GENERAL, + ETC_LOCALTIME" cannot be overwritten: %s", + our_error->message); + g_error_free (our_error); + g_free (content); + return FALSE; + } + + g_free (content); + + return TRUE; +} + +typedef gboolean (*SetSystemTimezone) (const char *tz, + GError **error); +/* The order here does not matter too much: we'll try to change all files + * that already have a timezone configured. It matters in case of error, + * since the process will be stopped and the last methods won't be called. + * So we use the same order as in get_system_timezone_methods */ +static SetSystemTimezone set_system_timezone_methods[] = { + /* writing various config files if they exist and have the + * setting already present */ + system_timezone_write_etc_timezone, + system_timezone_write_etc_sysconfig_clock, + system_timezone_write_etc_sysconfig_clock_alt, + system_timezone_write_etc_TIMEZONE, + system_timezone_write_etc_rc_conf, + /* writing deprecated config files if they exist and have the + * setting already present */ + system_timezone_write_etc_conf_d_clock, + NULL +}; + +static gboolean +system_timezone_update_config (const char *tz, + GError **error) +{ + int i; + + for (i = 0; set_system_timezone_methods[i] != NULL; i++) { + if (!set_system_timezone_methods[i] (tz, error)) + return FALSE; + /* FIXME: maybe continue to change all config files if + * possible? */ + } + + return TRUE; +} + +gboolean +system_timezone_set_from_file (const char *zone_file, + GError **error) +{ + const char *tz; + + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + tz = zone_file + strlen (SYSTEM_ZONEINFODIR"/"); + + /* FIXME: is it right to return FALSE even when /etc/localtime was + * changed but not the config files? */ + return (system_timezone_set_etc_timezone (zone_file, error) && + system_timezone_update_config (tz, error)); +} + +gboolean +system_timezone_set (const char *tz, + GError **error) +{ + char *zone_file; + gboolean retval; + + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + zone_file = g_build_filename (SYSTEM_ZONEINFODIR, tz, NULL); + + /* FIXME: is it right to return FALSE even when /etc/localtime was + * changed but not the config files? */ + retval = system_timezone_set_etc_timezone (zone_file, error) && + system_timezone_update_config (tz, error); + + g_free (zone_file); + + return retval; +} + +GQuark +system_timezone_error_quark (void) +{ + static GQuark ret = 0; + + if (ret == 0) { + ret = g_quark_from_static_string ("system-timezone-error"); + } + + return ret; +} diff --git a/applets/clock/system-timezone.h b/applets/clock/system-timezone.h new file mode 100644 index 00000000..c67b5d37 --- /dev/null +++ b/applets/clock/system-timezone.h @@ -0,0 +1,87 @@ +/* System timezone handling + * + * Copyright (C) 2008 Novell, Inc. + * + * Authors: Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __SYSTEM_TIMEZONE_H__ +#define __SYSTEM_TIMEZONE_H__ + +#include <glib.h> +#include <glib-object.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_SOLARIS +#define SYSTEM_ZONEINFODIR "/usr/share/lib/zoneinfo/tab" +#else +#define SYSTEM_ZONEINFODIR "/usr/share/zoneinfo" +#endif + + +#define SYSTEM_TIMEZONE_TYPE (system_timezone_get_type ()) +#define SYSTEM_TIMEZONE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezone)) +#define SYSTEM_TIMEZONE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), SYSTEM_TIMEZONE_TYPE, SystemTimezoneClass)) +#define IS_SYSTEM_TIMEZONE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SYSTEM_TIMEZONE_TYPE)) +#define IS_SYSTEM_TIMEZONE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), SYSTEM_TIMEZONE_TYPE)) +#define SYSTEM_TIMEZONE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezoneClass)) + +typedef struct +{ + GObject g_object; +} SystemTimezone; + +typedef struct +{ + GObjectClass g_object_class; + + void (* changed) (SystemTimezone *systz, + const char *tz); +} SystemTimezoneClass; + +GType system_timezone_get_type (void); + +SystemTimezone *system_timezone_new (void); + +const char *system_timezone_get (SystemTimezone *systz); +const char *system_timezone_get_env (SystemTimezone *systz); + +/* Functions to set the timezone. They won't be used by the applet, but + * by a program with more privileges */ + +#define SYSTEM_TIMEZONE_ERROR system_timezone_error_quark () +GQuark system_timezone_error_quark (void); + +typedef enum +{ + SYSTEM_TIMEZONE_ERROR_GENERAL, + SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE, + SYSTEM_TIMEZONE_NUM_ERRORS +} SystemTimezoneError; + +gboolean system_timezone_set_from_file (const char *zone_file, + GError **error); +gboolean system_timezone_set (const char *tz, + GError **error); + +#ifdef __cplusplus +} +#endif +#endif /* __SYSTEM_TIMEZONE_H__ */ diff --git a/applets/clock/test-system-timezone.c b/applets/clock/test-system-timezone.c new file mode 100644 index 00000000..42a80611 --- /dev/null +++ b/applets/clock/test-system-timezone.c @@ -0,0 +1,122 @@ +/* Test for system timezone handling + * + * Copyright (C) 2008-2010 Novell, Inc. + * + * Authors: Vincent Untz <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <glib.h> +#include "system-timezone.h" + +static void +timezone_print (void) +{ + SystemTimezone *systz; + + systz = system_timezone_new (); + g_print ("Current timezone: %s\n", system_timezone_get (systz)); + g_object_unref (systz); +} + +static int +timezone_set (const char *new_tz) +{ + GError *error; + + error = NULL; + if (!system_timezone_set (new_tz, &error)) { + g_printerr ("%s\n", error->message); + g_error_free (error); + return 1; + } + + return 0; +} + +static void +timezone_changed (SystemTimezone *systz, + const char *new_tz, + gpointer data) +{ + g_print ("Timezone changed to: %s\n", new_tz); +} + +static void +timezone_monitor (void) +{ + SystemTimezone *systz; + GMainLoop *mainloop; + + systz = system_timezone_new (); + g_signal_connect (systz, "changed", + G_CALLBACK (timezone_changed), NULL); + + mainloop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (mainloop); + g_main_loop_unref (mainloop); + + g_object_unref (systz); +} + +int +main (int argc, + char **argv) +{ + int retval; + + gboolean get = FALSE; + gboolean monitor = FALSE; + char *tz_set = NULL; + + GError *error; + GOptionContext *context; + GOptionEntry options[] = { + { "get", 'g', 0, G_OPTION_ARG_NONE, &get, "Get the current timezone", NULL }, + { "set", 's', 0, G_OPTION_ARG_STRING, &tz_set, "Set the timezone to TIMEZONE", "TIMEZONE" }, + { "monitor", 'm', 0, G_OPTION_ARG_NONE, &monitor, "Monitor timezone changes", NULL }, + { NULL, 0, 0, 0, NULL, NULL, NULL } + }; + + retval = 0; + + g_type_init (); + + context = g_option_context_new (""); + g_option_context_add_main_entries (context, options, NULL); + + error = NULL; + if (!g_option_context_parse (context, &argc, &argv, &error)) { + g_printerr ("%s\n", error->message); + g_error_free (error); + g_option_context_free (context); + + return 1; + } + + g_option_context_free (context); + + if (get || (!tz_set && !monitor)) + timezone_print (); + else if (tz_set) + retval = timezone_set (tz_set); + else if (monitor) + timezone_monitor (); + else + g_assert_not_reached (); + + return retval; +} |