diff --git a/ChangeLog b/ChangeLog index 9538016d8607b468beb9e74d3d9c489cd665abcf..b4abf68ad4e9ea7df64ee749fe92b46cead3924a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,37 +1,45 @@ -2007-12-10 enrico +2007-12-14 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * Fix small memory leak. + * Always store all settings from the properties dialog. + * Remove search mode selection from properties dialog. + * Add aspell support (should also work with ispell). + + +2007-12-10 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Added search method radio buttons. -2007-10-22 enrico +2007-10-22 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Fixed missing application icon in taskbar and window frame. * Added missing include of stdlib to avoid compiler warnings. -2007-01-20 enrico +2007-01-20 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Fixed possible crashes when showing the main window after it was closed. -2007-01-16 enrico +2007-01-16 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * New release: 0.2.1 -2006-12-05 enrico +2006-12-05 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Fixed possible segfault after retrieving the dictionary list from a server. -2006-12-04 enrico +2006-12-04 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Fixed wrong display of panel text entry when panel orientation changed. * Panel text entry grows and shrinks now according to the given size. * Removed dependency on libexo, use exo-open(and some other fallbacks) instead. -2006-11-25 enrico +2006-11-25 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Enabled website link to goodies.xfce.org in the about dialog. * Added missing includes to fix compilation on FreeBSD. @@ -39,7 +47,7 @@ for reporting). -2006-11-16 enrico +2006-11-16 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Added dependency of libexo. * Added alternative search mode via a web site dictionary and provide three @@ -48,12 +56,12 @@ * Added UTF8_STRING as drop target. Might be it helps. -2006-11-07 enrico +2006-11-07 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Prefixed all functions with dict. -2006-10-15 enrico +2006-10-15 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Improved the threading code to do GTK-related stuff in the main thread. * Fixed some compiler warnings. @@ -61,19 +69,19 @@ * Handle non-UTF8 input better, try to convert it, otherwise stop query. -2006-10-14 enrico +2006-10-14 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Implemented threading to not freeze the GUI while searching on a slow server (needs testing). -2006-10-02 enrico +2006-10-02 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Again fixed display of panel text field when panel has no horizontal orientation. -2006-10-01 enrico +2006-10-01 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Fixed display of panel text field when panel has no horizontal orientation. * Fixed some minor GUI issues to improve usability @@ -86,18 +94,18 @@ * Added "Clear" button to the main window(suggested by Joe Klemmer). -2006-09-26 enrico +2006-09-26 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Added optional text field in the panel. -2006-09-25 enrico +2006-09-25 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Changed application icon * Added Cancel button to the properties dialog to cancel current changes. -2006-09-20 enrico +2006-09-20 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * New Release: 0.1.1 * Set icon for the main window @@ -107,6 +115,6 @@ (thanks Remco den Breeje for reporting). -2006-09-20 enrico +2006-09-20 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Initial release 0.1.0. diff --git a/panel-plugin/Makefile.am b/panel-plugin/Makefile.am index 7fecd511a78abbd236cf58001ad5c65c40369bde..89f88d6fa51dc1690c73f551c014268246c9f669 100644 --- a/panel-plugin/Makefile.am +++ b/panel-plugin/Makefile.am @@ -3,6 +3,8 @@ plugin_PROGRAMS = xfce4-dict-plugin xfce4_dict_plugin_SOURCES = \ inline-icon.h \ + aspell.c \ + dict.h \ dict.c xfce4_dict_plugin_CFLAGS = \ @@ -40,6 +42,4 @@ CLEANFILES = \ $(desktop_DATA) hicolor48dir = $(datadir)/icons/hicolor/scalable/apps - -hicolor48_DATA = \ - dict-icon.svg +hicolor48_DATA = dict-icon.svg diff --git a/panel-plugin/aspell.c b/panel-plugin/aspell.c new file mode 100644 index 0000000000000000000000000000000000000000..6b031e21ab973f5b227e407e6a0c68af8da6dba4 --- /dev/null +++ b/panel-plugin/aspell.c @@ -0,0 +1,180 @@ +/* $Id$ + * + * Copyright © 2007 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + * + * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#include <stdlib.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <string.h> + +#include <gtk/gtk.h> + +#include <libxfcegui4/libxfcegui4.h> +#include <libxfce4panel/xfce-panel-plugin.h> + +#include "dict.h" + + + +static GIOChannel *set_up_io_channel(gint fd, GIOCondition cond, GIOFunc func, gpointer data) +{ + GIOChannel *ioc; + + ioc = g_io_channel_unix_new(fd); + + g_io_channel_set_flags(ioc, G_IO_FLAG_NONBLOCK, NULL); + g_io_channel_set_encoding(ioc, NULL, NULL); + // "auto-close" ;-) + g_io_channel_set_close_on_unref(ioc, TRUE); + + g_io_add_watch(ioc, cond, func, data); + g_io_channel_unref(ioc); + + return ioc; +} + + +static gboolean iofunc_read(GIOChannel *ioc, GIOCondition cond, gpointer data) +{ + if (cond & (G_IO_IN | G_IO_PRI)) + { + gchar *msg, *tmp; + GtkTextIter iter; + DictData *dd = data; + + gtk_text_buffer_get_start_iter(dd->main_textbuffer, &iter); + while (g_io_channel_read_line(ioc, &msg, NULL, NULL, NULL) && msg != NULL) + { + if (msg[0] == '&') + { // & cmd 17 7: ... + tmp = strchr(msg + 2, ' ') + 1; + dict_status_add(dd, _("%d suggestion(s) found."), atoi(tmp)); + + tmp = g_strdup_printf(_("Suggestions for \"%s\":\n"), dd->searched_word); + gtk_text_buffer_insert_with_tags(dd->main_textbuffer, &iter, tmp, -1, + dd->main_boldtag, NULL); + g_free(tmp); + + tmp = strchr(msg, ':') + 2; + gtk_text_buffer_insert(dd->main_textbuffer, &iter, g_strchomp(tmp), -1); + } + else if (msg[0] == '*') + { + tmp = g_strdup_printf(_("\"%s\" is spelled correctly.\n"), dd->searched_word); + gtk_text_buffer_insert(dd->main_textbuffer, &iter, tmp, -1); + g_free(tmp); + } + else if (msg[0] == '#') + { + tmp = g_strdup_printf(_("No suggestions could be found for \"%s\".\n"), + dd->searched_word); + gtk_text_buffer_insert(dd->main_textbuffer, &iter, tmp, -1); + g_free(tmp); + } + g_free(msg); + } + } + if (cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) + return FALSE; + + return TRUE; +} + + +static gboolean iofunc_read_err(GIOChannel *ioc, GIOCondition cond, gpointer data) +{ + if (cond & (G_IO_IN | G_IO_PRI)) + { + gchar *msg; + DictData *dd = data; + + while (g_io_channel_read_line(ioc, &msg, NULL, NULL, NULL) && msg != NULL) + { + dict_status_add(dd, _("%s"), g_strstrip(msg)); + g_free(msg); + } + } + if (cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) + return FALSE; + + return TRUE; +} + + +static gboolean iofunc_write(GIOChannel *ioc, GIOCondition cond, gpointer data) +{ + gsize written; + + if (NZV((const gchar *) data)) + g_io_channel_write_chars(ioc, (const gchar *) data, -1, &written, NULL); + + return FALSE; +} + + +void dict_start_aspell_query(DictData *dd, const gchar *word) +{ + GError *error = NULL; + gchar **argv; + gchar *locale_cmd; + gint stdout_fd; + gint stderr_fd; + gint stdin_fd; + + if (! NZV(dd->spell_bin)) + { + dict_status_add(dd, _("Please set an appropriate aspell command.")); + return; + } + if (! NZV(word)) + { + dict_status_add(dd, _("Invalid input.")); + return; + } + locale_cmd = g_locale_from_utf8(dd->spell_bin, -1, NULL, NULL, NULL); + if (locale_cmd == NULL) + locale_cmd = g_strdup(dd->spell_bin); + + argv = g_new0(gchar*, 5); + argv[0] = locale_cmd; + argv[1] = g_strdup("-a"); + argv[2] = g_strdup("-l"); + argv[3] = g_strdup(dd->spell_dictionary); + argv[4] = NULL; + + dict_clear_text_buffer(dd); + + if (g_spawn_async_with_pipes(NULL, argv, NULL, + G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, NULL, + &stdin_fd, &stdout_fd, &stderr_fd, &error)) + { + set_up_io_channel(stdin_fd, G_IO_OUT, iofunc_write, (const gpointer) word); + set_up_io_channel(stdout_fd, G_IO_IN|G_IO_PRI|G_IO_HUP|G_IO_ERR|G_IO_NVAL, iofunc_read, dd); + set_up_io_channel(stderr_fd, G_IO_IN|G_IO_PRI|G_IO_HUP|G_IO_ERR|G_IO_NVAL, iofunc_read_err, dd); + dict_status_add(dd, _("Ready.")); + } + else + { + dict_status_add(dd, _("Process failed (%s)"), error->message); + g_error_free(error); + error = NULL; + } + + g_strfreev(argv); +} diff --git a/panel-plugin/dict.c b/panel-plugin/dict.c index c3acfd3cbc2bd88f90cc075f33443a039474136c..7daf89164d1836b8a1d6ec3319379b3af9979390 100644 --- a/panel-plugin/dict.c +++ b/panel-plugin/dict.c @@ -1,6 +1,6 @@ /* $Id$ * - * Copyright © 2006-2007 Enrico Tröger <enrico.troeger@uvena.de> + * Copyright © 2006-2007 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * * 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 @@ -39,95 +39,17 @@ #include <signal.h> #include <string.h> +#include "dict.h" #include "inline-icon.h" #define BUF_SIZE 256 -typedef enum -{ - DICTMODE_DICT, - DICTMODE_WEB, - DICTMODE_SPELL -} _dict_mode; - -typedef enum -{ - WEBMODE_OTHER, - WEBMODE_LEO_GERENG, - WEBMODE_LEO_GERFRE, - WEBMODE_LEO_GERSPA -} _web_mode; - - -enum -{ - NO_CONNECTION, - NO_ERROR -}; - - -typedef struct -{ - XfcePanelPlugin *plugin; - - _dict_mode mode; - _web_mode web_mode; - - GtkWidget *window; - GtkWidget *statusbar; - GtkWidget *main_entry; - GtkWidget *panel_entry; - GtkWidget *main_textview; - GtkTextBuffer *main_textbuffer; - GtkTextTag *main_boldtag; - //GtkWidget *main_dict_combo; - - GtkWidget *server_entry; - GtkWidget *dict_combo; - GtkWidget *port_spinner; - GtkWidget *panel_entry_size_label; - GtkWidget *panel_entry_size_spinner; - GtkWidget *check_panel_entry; - - GtkWidget *panel_button; - GtkWidget *panel_button_image; - GtkTooltips *tooltips; - - gboolean show_panel_entry; - gint panel_entry_size; - gint port; - gchar *server; - gchar *dictionary; - - gchar *searched_word; // word to query the server - gboolean query_is_running; - gint query_status; - gchar *query_buffer; - - GtkWidget *radio_dict; - GtkWidget *radio_web; - - GtkWidget *web_entry_label; - GtkWidget *web_entry; - GtkWidget *web_radio_leo_gereng; - GtkWidget *web_radio_leo_gerfre; - GtkWidget *web_radio_leo_gerspa; - GtkWidget *web_radio_other; - gchar *web_url; - - GtkWidget *frame_dict; - GtkWidget *frame_web; - - GdkPixbuf *icon; -} DictData; - /* Panel Plugin Interface */ static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd); static void dict_construct(XfcePanelPlugin *plugin); - -XFCE_PANEL_PLUGIN_REGISTER_INTERNAL(dict_construct); +static void dict_write_rc_file(XfcePanelPlugin *plugin, DictData *dd); /* internal functions */ @@ -169,8 +91,8 @@ static gint dict_str_pos(const gchar *haystack, const gchar *needle) } -/* replaces all occurrences of needle in haystack with replacement - * all strings have to NULL-terminated and needle and replacement have to be different, +/* Replaces all occurrences of needle in haystack with replacement. + * All strings have to be NULL-terminated and needle and replacement have to be different, * e.g. needle "%" and replacement "%%" causes an endless loop */ static gchar *dict_str_replace(gchar *haystack, const gchar *needle, const gchar *replacement) { @@ -180,12 +102,20 @@ static gchar *dict_str_replace(gchar *haystack, const gchar *needle, const gchar gchar *result; GString *str; - if (haystack == NULL) return NULL; + if (haystack == NULL) + return NULL; + + if (needle == NULL || replacement == NULL) + return haystack; + + if (strcmp(needle, replacement) == 0) + return haystack; start = strstr(haystack, needle); lt_pos = dict_str_pos(haystack, needle); - if (start == NULL || lt_pos == -1) return haystack; + if (start == NULL || lt_pos == -1) + return haystack; // substitute by copying str = g_string_sized_new(strlen(haystack)); @@ -324,24 +254,6 @@ static gchar *dict_get_answer(gint fd) } -/* old code, never worked correctly with big results -static void get_answer(gint fd, gchar *buf) -{ - gint len; - - len = recv(fd, buf, BUF_SIZE - 1, 0); - - if (len <= 0) return; - - while (len > 1 && (buf[len - 1] == '\n' || buf[len - 1] == '\r')) - { - buf[len - 1] = '\0'; - len--; - } -} -*/ - - static void dict_show_main_window(DictData *dd) { gtk_widget_show(dd->window); @@ -350,7 +262,7 @@ static void dict_show_main_window(DictData *dd) } -static void dict_status_add(DictData *dd, const gchar *format, ...) +void dict_status_add(DictData *dd, const gchar *format, ...) { static gchar string[512]; va_list args; @@ -365,7 +277,7 @@ static void dict_status_add(DictData *dd, const gchar *format, ...) } -static void dict_clear_text_buffer(DictData *dd) +void dict_clear_text_buffer(DictData *dd) { GtkTextIter start_iter, end_iter; @@ -376,7 +288,7 @@ static void dict_clear_text_buffer(DictData *dd) } -static gboolean dict_process_server_response(DictData *dd) +gboolean dict_process_server_response(DictData *dd) { gint max_lines, i; gint defs_found = 0; @@ -590,7 +502,7 @@ static void dict_search_word(DictData *dd, const gchar *word) gboolean show = TRUE; // sanity checks - if (word == NULL || strlen(word) == 0 || strlen(word) > (BUF_SIZE - 11)) + if (! NZV(word) || strlen(word) > (BUF_SIZE - 11)) { dict_status_add(dd, _("Invalid input.")); return; @@ -612,62 +524,82 @@ static void dict_search_word(DictData *dd, const gchar *word) } else { - dd->searched_word = g_strdup(word); // copy the string because it will be freed by the caller + dd->searched_word = g_strdup(word); } - - if (dd->mode == DICTMODE_DICT) + switch (dd->mode) { - dict_start_server_query(dd, dd->searched_word); - } - else if (dd->mode == DICTMODE_WEB) - { - gboolean use_leo = FALSE; - gchar *uri, *base; - - switch (dd->web_mode) + case DICTMODE_DICT: { - case WEBMODE_LEO_GERENG: + dict_start_server_query(dd, dd->searched_word); + break; + } + case DICTMODE_WEB: + { + gboolean use_leo = FALSE; + gchar *uri, *base; + + switch (dd->web_mode) { - base = "http://dict.leo.org/ende?search={word}"; - use_leo = TRUE; - break; + case WEBMODE_LEO_GERENG: + { + base = "http://dict.leo.org/ende?search={word}"; + use_leo = TRUE; + break; + } + case WEBMODE_LEO_GERFRE: + { + base = "http://dict.leo.org/frde?search={word}"; + use_leo = TRUE; + break; + } + case WEBMODE_LEO_GERSPA: + { + base = "http://dict.leo.org/esde?search={word}"; + use_leo = TRUE; + break; + } + default: base = dd->web_url; } - case WEBMODE_LEO_GERFRE: + + if (use_leo) { - base = "http://dict.leo.org/frde?search={word}"; - use_leo = TRUE; - break; + // convert the text into ISO-8869-15 because dict.leo.org expects it ;-( + gchar *tmp = g_convert(dd->searched_word, -1, + "ISO-8859-15", "UTF-8", NULL, NULL, NULL); + if (tmp != NULL) + { + g_free(dd->searched_word); + dd->searched_word = tmp; + } } - case WEBMODE_LEO_GERSPA: + uri = dict_str_replace(g_strdup(base), "{word}", dd->searched_word); + if (! dict_open_browser(dd, uri)) { - base = "http://dict.leo.org/esde?search={word}"; - use_leo = TRUE; - break; + xfce_err(_("Browser could not be opened. Please check your preferences.")); } - default: base = dd->web_url; - } + g_free(uri); - if (use_leo) + show = FALSE; // don't display main window + break; + } + case DICTMODE_SPELL: { - // convert the text into ISO-8869-15 because dict.leo.org expects it ;-( - gchar *tmp = g_convert(dd->searched_word, -1, - "ISO-8859-15", "UTF-8", NULL, NULL, NULL); - if (tmp != NULL) + /// TODO search only for the first word when working on a sentence, + /// workout a better solution + gchar *first_word_end = dd->searched_word; + if ((first_word_end = strchr(dd->searched_word, ' ')) || + (first_word_end = strchr(dd->searched_word, '-')) || + (first_word_end = strchr(dd->searched_word, '_')) || + (first_word_end = strchr(dd->searched_word, '.')) || + (first_word_end = strchr(dd->searched_word, ','))) { - g_free(dd->searched_word); - dd->searched_word = tmp; + *first_word_end = '\0'; } - } - uri = dict_str_replace(g_strdup(base), "{word}", dd->searched_word); - if (! dict_open_browser(dd, uri)) - { - xfce_err(_("Browser could not be opened. Please check your preferences.")); + dict_start_aspell_query(dd, dd->searched_word); + break; } - g_free(uri); - - show = FALSE; // don't display main window } if (show) @@ -684,10 +616,12 @@ static void dict_search_word(DictData *dd, const gchar *word) static void dict_free_data(XfcePanelPlugin *plugin, DictData *dd) { + dict_write_rc_file(plugin, dd); g_free(dd->searched_word); g_free(dd->dictionary); g_free(dd->server); g_free(dd->web_url); + g_free(dd->spell_bin); g_object_unref(dd->icon); gtk_object_sink(GTK_OBJECT(dd->tooltips)); g_free(dd); @@ -747,6 +681,8 @@ static void dict_read_rc_file(XfcePanelPlugin *plugin, DictData *dd) const gchar *server = "dict.org"; const gchar *dict = "*"; const gchar *weburl = NULL; + const gchar *spell_bin = "aspell"; + const gchar *spell_dictionary = "en"; if ((file = xfce_panel_plugin_lookup_rc_file(plugin)) != NULL) { @@ -762,6 +698,8 @@ static void dict_read_rc_file(XfcePanelPlugin *plugin, DictData *dd) port = xfce_rc_read_int_entry(rc, "port", port); server = xfce_rc_read_entry(rc, "server", server); dict = xfce_rc_read_entry(rc, "dict", dict); + spell_bin = xfce_rc_read_entry(rc, "spell_bin", spell_bin); + spell_dictionary = xfce_rc_read_entry(rc, "spell_dictionary", spell_dictionary); xfce_rc_close(rc); } @@ -775,6 +713,8 @@ static void dict_read_rc_file(XfcePanelPlugin *plugin, DictData *dd) dd->port = port; dd->server = g_strdup(server); dd->dictionary = g_strdup(dict); + dd->spell_bin = g_strdup(spell_bin); + dd->spell_dictionary = g_strdup(spell_dictionary); } @@ -799,6 +739,8 @@ static void dict_write_rc_file(XfcePanelPlugin *plugin, DictData *dd) xfce_rc_write_int_entry(rc, "port", dd->port); xfce_rc_write_entry(rc, "server", dd->server); xfce_rc_write_entry(rc, "dict", dd->dictionary); + xfce_rc_write_entry(rc, "spell_bin", dd->spell_bin); + xfce_rc_write_entry(rc, "spell_dictionary", dd->spell_dictionary); xfce_rc_close(rc); } @@ -886,48 +828,50 @@ static void dict_properties_dialog_response(GtkWidget *dlg, gint response, DictD if (response == GTK_RESPONSE_OK) { + gchar *tmp; // MODE DICT - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->radio_dict))) + tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo)); + if (tmp == NULL || tmp[0] == '0' || tmp[0] == '-') { - gchar *tmp; - - dd->mode = DICTMODE_DICT; + xfce_err(_("You have chosen an invalid dictionary entry.")); + g_free(tmp); + return; + } - tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo)); - if (tmp == NULL || tmp[0] == '-') - { - xfce_err(_("You have chosen an invalid dictionary entry.")); - return; - } + dd->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner)); - dd->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner)); + g_free(dd->server); + dd->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->server_entry))); - g_free(dd->server); - dd->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->server_entry))); + g_free(dd->dictionary); + dd->dictionary = tmp; - g_free(dd->dictionary); - dd->dictionary = g_strdup(tmp); - } // MODE WEB - else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->radio_web))) + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng))) + dd->web_mode = WEBMODE_LEO_GERENG; + else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre))) + dd->web_mode = WEBMODE_LEO_GERFRE; + else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa))) + dd->web_mode = WEBMODE_LEO_GERSPA; + else { - dd->mode = DICTMODE_WEB; - - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng))) - dd->web_mode = WEBMODE_LEO_GERENG; - else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre))) - dd->web_mode = WEBMODE_LEO_GERFRE; - else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa))) - dd->web_mode = WEBMODE_LEO_GERSPA; - else - { - dd->web_mode = WEBMODE_OTHER; + dd->web_mode = WEBMODE_OTHER; - g_free(dd->web_url); - dd->web_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->web_entry))); - } + g_free(dd->web_url); + dd->web_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->web_entry))); } + // MODE SPELL + tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->spell_combo)); + if (NZV(tmp)) + { + g_free(dd->spell_dictionary); + dd->spell_dictionary = tmp; + } + + g_free(dd->spell_bin); + dd->spell_bin = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->spell_entry))); + // general settings dd->show_panel_entry = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(dd->check_panel_entry)); @@ -942,7 +886,6 @@ static void dict_properties_dialog_response(GtkWidget *dlg, gint response, DictD else gtk_widget_hide(dd->panel_entry); - // save settings dict_set_size(dd->plugin, xfce_panel_plugin_get_size(dd->plugin), dd); dict_write_rc_file(dd->plugin, dd); @@ -966,10 +909,42 @@ static void dict_use_webserver_toggled(GtkToggleButton *tb, DictData *dd) } +static void dict_get_spell_dictionaries(DictData *dd) +{ + if (NZV(dd->spell_bin)) + { + gchar *tmp = NULL, *cmd, *locale_cmd; + + cmd = g_strconcat(dd->spell_bin, " dump dicts", NULL); + locale_cmd = g_locale_from_utf8(cmd, -1, NULL, NULL, NULL); + if (locale_cmd == NULL) + locale_cmd = g_strdup(cmd); + g_spawn_command_line_sync(locale_cmd, &tmp, NULL, NULL, NULL); + if (NZV(tmp)) + { + gchar **list = g_strsplit_set(tmp, "\n\r", -1); + gchar *item; + guint i, len = g_strv_length(list); + for (i = 0; i < len; i++) + { + item = g_strstrip(list[i]); + gtk_combo_box_append_text(GTK_COMBO_BOX(dd->spell_combo), item); + if (strcmp(dd->spell_dictionary, item) == 0) + gtk_combo_box_set_active(GTK_COMBO_BOX(dd->spell_combo), i); + } + g_strfreev(list); + } + + g_free(cmd); + g_free(locale_cmd); + g_free(tmp); + } +} + + static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd) { GtkWidget *dlg, *header, *vbox, *label3; - GSList *radio_group; xfce_panel_plugin_block_menu(plugin); @@ -1003,7 +978,7 @@ static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd) * Mode: DICT */ { - GtkWidget *label1, *label2, *table, *button_get_list; + GtkWidget *label1, *label2, *table, *button_get_list, *frame1; /* server address */ label1 = gtk_label_new_with_mnemonic(_("Server :")); @@ -1092,27 +1067,19 @@ static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd) (GtkAttachOptions) (0), 5, 5); - dd->radio_dict = gtk_radio_button_new_with_label(NULL, _("Use a DICT server")); - radio_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->radio_dict)); - if (dd->mode == DICTMODE_DICT) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->radio_dict), TRUE); - - gtk_widget_show(dd->radio_dict); - gtk_box_pack_start(GTK_BOX(vbox), dd->radio_dict, FALSE, FALSE, 0); - - dd->frame_dict = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(dd->frame_dict), GTK_SHADOW_ETCHED_OUT); - gtk_widget_show(dd->frame_dict); - gtk_container_set_border_width(GTK_CONTAINER(dd->frame_dict), 5); - gtk_container_add(GTK_CONTAINER(dd->frame_dict), table); - gtk_box_pack_start(GTK_BOX(vbox), dd->frame_dict, FALSE, FALSE, 0); + frame1 = gtk_frame_new(_("Use a DICT server")); + gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_ETCHED_OUT); + gtk_widget_show(frame1); + gtk_container_set_border_width(GTK_CONTAINER(frame1), 3); + gtk_container_add(GTK_CONTAINER(frame1), table); + gtk_box_pack_start(GTK_BOX(vbox), frame1, FALSE, FALSE, 0); } /* * Mode: WEB */ { - GtkWidget *web_vbox, *entry_hbox, *help_label; + GtkWidget *web_vbox, *entry_hbox, *help_label, *frame2; GSList *web_type; web_vbox = gtk_vbox_new(FALSE, 5); @@ -1167,25 +1134,73 @@ static void dict_properties_dialog(XfcePanelPlugin *plugin, DictData *dd) gtk_label_set_line_wrap(GTK_LABEL(help_label), TRUE); gtk_misc_set_alignment(GTK_MISC(help_label), 0, 0); gtk_widget_show(help_label); - gtk_box_pack_start(GTK_BOX(web_vbox), help_label, FALSE, FALSE, 0); - - dd->radio_web = gtk_radio_button_new_with_label(radio_group, _("Use a web site")); - gtk_widget_show(dd->radio_web); - if (dd->mode == DICTMODE_WEB) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->radio_web), TRUE); - gtk_box_pack_start(GTK_BOX(vbox), dd->radio_web, FALSE, FALSE, 0); - - dd->frame_web = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(dd->frame_web), GTK_SHADOW_ETCHED_OUT); - gtk_widget_show(dd->frame_web); - gtk_container_set_border_width(GTK_CONTAINER(dd->frame_web), 5); - gtk_container_add(GTK_CONTAINER(dd->frame_web), web_vbox); - gtk_box_pack_start(GTK_BOX(vbox), dd->frame_web, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(web_vbox), help_label, TRUE, TRUE, 0); + + frame2 = gtk_frame_new(_("Use a web site")); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_OUT); + gtk_widget_show(frame2); + gtk_container_set_border_width(GTK_CONTAINER(frame2), 3); + gtk_container_add(GTK_CONTAINER(frame2), web_vbox); + gtk_box_pack_start(GTK_BOX(vbox), frame2, TRUE, TRUE, 0); } + /* + * Mode: ASPELL + */ + { + GtkWidget *label4, *label5, *table, *frame3; - /* Display text entry in the panel */ - { + label4 = gtk_label_new_with_mnemonic(_("Aspell program :")); + gtk_widget_show(label4); + + dd->spell_entry = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(dd->spell_entry), 256); + if (dd->spell_bin != NULL) + { + gtk_entry_set_text(GTK_ENTRY(dd->spell_entry), dd->spell_bin); + } + gtk_widget_show(dd->spell_entry); + + label5 = gtk_label_new_with_mnemonic(_("Dictionary :")); + gtk_widget_show(label5); + + dd->spell_combo = gtk_combo_box_new_text(); + dict_get_spell_dictionaries(dd); + gtk_widget_show(dd->spell_combo); + + table = gtk_table_new(2, 2, FALSE); + gtk_widget_show(table); + gtk_table_set_row_spacings(GTK_TABLE(table), 5); + gtk_table_set_col_spacings(GTK_TABLE(table), 5); + + gtk_table_attach(GTK_TABLE(table), label4, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 5, 5); + gtk_misc_set_alignment(GTK_MISC(label4), 1, 0); + + gtk_table_attach(GTK_TABLE(table), dd->spell_entry, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), + (GtkAttachOptions) (0), 5, 5); + + gtk_table_attach(GTK_TABLE(table), label5, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 5, 0); + gtk_misc_set_alignment(GTK_MISC(label5), 1, 0); + + gtk_table_attach(GTK_TABLE(table), dd->spell_combo, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), + (GtkAttachOptions) (0), 5, 5); + + frame3 = gtk_frame_new(_("Use Aspell")); + gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_OUT); + gtk_widget_show(frame3); + gtk_container_set_border_width(GTK_CONTAINER(frame3), 3); + gtk_container_add(GTK_CONTAINER(frame3), table); + gtk_box_pack_start(GTK_BOX(vbox), frame3, TRUE, FALSE, 0); + } + + /* Display text entry in the panel */ + { GtkWidget *pe_hbox, *label; /* show panel entry check box */ @@ -1271,19 +1286,22 @@ static void dict_close_button_clicked(GtkWidget *button, DictData *dd) static void dict_search_mode_dict_toggled(GtkToggleButton *togglebutton, DictData *dd) { - dd->mode = DICTMODE_DICT; + if (gtk_toggle_button_get_active(togglebutton)) + dd->mode = DICTMODE_DICT; } static void dict_search_mode_web_toggled(GtkToggleButton *togglebutton, DictData *dd) { - dd->mode = DICTMODE_WEB; + if (gtk_toggle_button_get_active(togglebutton)) + dd->mode = DICTMODE_WEB; } static void dict_search_mode_spell_toggled(GtkToggleButton *togglebutton, DictData *dd) { - dd->mode = DICTMODE_SPELL; + if (gtk_toggle_button_get_active(togglebutton)) + dd->mode = DICTMODE_SPELL; } @@ -1367,7 +1385,7 @@ static void dict_create_main_dialog(DictData *dd) gtk_widget_show(method_chooser); gtk_box_pack_start(GTK_BOX(main_box), method_chooser, FALSE, FALSE, 0); - label = gtk_label_new(_("Search in:")); + label = gtk_label_new(_("Search with:")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(method_chooser), label, FALSE, FALSE, 6); @@ -1382,13 +1400,13 @@ static void dict_create_main_dialog(DictData *dd) g_signal_connect(radio, "toggled", G_CALLBACK(dict_search_mode_web_toggled), dd); gtk_widget_show(radio); gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6); -/* + radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Spellcheck")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_SPELL)); g_signal_connect(radio, "toggled", G_CALLBACK(dict_search_mode_spell_toggled), dd); gtk_widget_show(radio); gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6); -*/ + // results area scrolledwindow_results = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scrolledwindow_results); @@ -1404,6 +1422,7 @@ static void dict_create_main_dialog(DictData *dd) gtk_text_view_set_editable(GTK_TEXT_VIEW(dd->main_textview), FALSE); gtk_text_view_set_left_margin(GTK_TEXT_VIEW(dd->main_textview), 5); gtk_text_view_set_right_margin(GTK_TEXT_VIEW(dd->main_textview), 5); + gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(dd->main_textview), GTK_WRAP_WORD); dd->main_textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dd->main_textview)); dd->main_boldtag = gtk_text_buffer_create_tag(dd->main_textbuffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL); @@ -1511,8 +1530,6 @@ static void dict_construct(XfcePanelPlugin *plugin) dd->query_is_running = FALSE; dd->query_status = NO_ERROR; - //dd->icon = load_and_scale(dict_icon_data, 24, -1); - dict_read_rc_file(plugin, dd); dd->panel_button = xfce_create_panel_button(); diff --git a/panel-plugin/dict.h b/panel-plugin/dict.h new file mode 100644 index 0000000000000000000000000000000000000000..78cf077a90735b6e79571f880fe1695cac9d1586 --- /dev/null +++ b/panel-plugin/dict.h @@ -0,0 +1,112 @@ +/* $Id$ + * + * Copyright © 2007 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + * + * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifndef DICT_H +#define DICT_H 1 + + +// Returns: TRUE if ptr points to a non-zero value. +#define NZV(ptr) \ + ((ptr) && (ptr)[0]) + + +typedef enum +{ + DICTMODE_DICT = 0, + DICTMODE_WEB, + DICTMODE_SPELL +} _dict_mode; + +typedef enum +{ + WEBMODE_OTHER, + WEBMODE_LEO_GERENG, + WEBMODE_LEO_GERFRE, + WEBMODE_LEO_GERSPA +} _web_mode; + + +enum +{ + NO_CONNECTION, + NO_ERROR +}; + + +typedef struct +{ + XfcePanelPlugin *plugin; + + _dict_mode mode; + _web_mode web_mode; + + GtkWidget *window; + GtkWidget *statusbar; + GtkWidget *main_entry; + GtkWidget *panel_entry; + GtkWidget *main_textview; + GtkTextBuffer *main_textbuffer; + GtkTextTag *main_boldtag; + + GtkWidget *server_entry; + GtkWidget *dict_combo; + GtkWidget *port_spinner; + GtkWidget *panel_entry_size_label; + GtkWidget *panel_entry_size_spinner; + GtkWidget *check_panel_entry; + + GtkWidget *panel_button; + GtkWidget *panel_button_image; + GtkTooltips *tooltips; + + gboolean show_panel_entry; + gint panel_entry_size; + gint port; + gchar *server; + gchar *dictionary; + + gchar *searched_word; // word to query the server + gboolean query_is_running; + gint query_status; + gchar *query_buffer; + + GtkWidget *web_entry_label; + GtkWidget *web_entry; + GtkWidget *web_radio_leo_gereng; + GtkWidget *web_radio_leo_gerfre; + GtkWidget *web_radio_leo_gerspa; + GtkWidget *web_radio_other; + gchar *web_url; + + GtkWidget *spell_entry; + GtkWidget *spell_combo; + gchar *spell_bin; + gchar *spell_dictionary; + + GdkPixbuf *icon; +} DictData; + + + +void dict_status_add(DictData *dd, const gchar *format, ...); +void dict_clear_text_buffer(DictData *dd); +void dict_start_aspell_query(DictData *dd, const gchar *word); + +#endif diff --git a/panel-plugin/inline-icon.h b/panel-plugin/inline-icon.h index c0c8196f3e598f1422f128eae5a562c23e317d37..96a61415511c16ef3768f5d0667d1f31a3a4183f 100644 --- a/panel-plugin/inline-icon.h +++ b/panel-plugin/inline-icon.h @@ -62,328 +62,330 @@ static const guint8 dict_icon_data[] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314" - "\314\314#\314\314\314Z\315\315\315\223\320\320\320\327\320\320\320\342" - "\322\322\322\346\321\321\321\350\320\320\320\353\316\316\316\350\315" - "\315\315\240\314\314\314\\\314\314\314\1\314\314\314\2\314\314\314`\316" - "\316\316\255\316\316\316\351\316\316\316\353\320\320\320\350\321\321" - "\321\346\320\320\320\342\315\315\315\333\312\312\312\240\311\311\311" - "h\307\307\3072\306\306\306\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314\314\314\13\314\314\314" - "`\320\320\320\277\314\314\314\373\320\320\320\364\342\342\342\365\360" - "\360\360\376\371\371\371\377\374\374\374\377\371\371\371\377\366\366" - "\366\377\364\364\363\377\361\362\361\377\347\350\346\377\325\325\323" - "\367\314\312\312\336\233RR\372\315\314\314\372\337\340\337\377\353\354" - "\353\377\370\370\370\377\367\367\367\377\366\366\366\377\366\366\366" - "\377\363\363\363\377\353\353\353\377\336\336\336\370\321\321\321\363" - "\303\303\303\374\304\304\304\312\300\300\300{\277\277\277\26\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\314\314\314\17\314\314\314]\317\317\317" - "\301\315\315\315\371\333\333\333\364\362\362\362\377\376\376\376\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\367\370\367\377\356\360\356\377\347\350\346\377\337\341" - "\336\377\342\344\341\377\352\353\351\377\343\344\342\377|\10\7\377\307" - "\266\265\377\305\305\304\377\311\311\310\377\361\361\360\377\360\360" - "\360\377\357\357\357\377\356\356\356\377\357\357\357\377\360\360\360" - "\377\362\362\362\377\365\365\365\377\364\364\364\377\346\346\346\377" - "\320\320\320\370\275\275\275\371\275\275\275\317\271\271\271e\270\270" - "\270\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\314\314\314\4\314\314\314\367\332\332\332\370\355\355\355" - "\377\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\370\370\367\377\357\360\356\377\350\350\346\377\337\340" - "\335\377\327\331\325\377\320\322\315\377\321\323\316\377\200\27\27\377" - "\225sq\377\264\265\262\377\310\311\307\377\360\360\357\377\360\360\360" - "\377\357\357\357\377\356\356\356\377\355\355\355\377\353\353\353\377" - "\352\352\352\377\351\351\351\377\353\353\353\377\360\360\360\377\365" - "\365\365\377\353\353\353\377\326\326\326\377\304\304\304\371\264\264" - "\264\367\263\263\263\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0>&;\3R=P\356\312\310\311\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\367\367\366\377\356\357\355\377\346\347\344\377\336\337\334" - "\377\327\330\324\377\320\322\315\377\310\313\305\377\204&%\377\221^[" - "\377\265\266\263\377\310\311\307\377\356\356\356\377\360\360\360\377" - "\356\356\356\377\355\355\355\377\354\354\354\377\353\353\353\377\351" - "\351\351\377\350\350\350\377\347\347\347\377\346\346\346\377\347\347" - "\347\377\363\363\363\377\343\343\343\377\343\343\343\377\260\257\260" - "\377N9L\356>&;\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>&;'" - "iXg\365\320\316\320\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\366\366" - "\366\377\355\356\355\377\346\347\345\377\335\336\334\377\326\327\324" - "\377\320\322\315\377\310\313\305\377\20676\377\213++\377\265\266\263" - "\377\311\311\307\377\355\355\355\377\357\357\357\377\356\356\356\377" - "\355\355\355\377\354\354\354\377\352\352\352\377\351\351\351\377\350" - "\350\350\377\347\347\347\377\345\345\345\377\344\344\344\377\364\364" - "\364\377\344\344\344\377\343\343\343\377\263\262\263\377`O^\365>&;'\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>&;M\177q\177\366\330\327" - "\331\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\366\367\366\377\355" - "\357\355\377\346\347\345\377\335\337\334\377\326\330\324\377\320\322" - "\315\377\310\313\305\377\205^[\377\201\10\10\377\252\222\217\377\310" - "\311\307\377\353\353\353\377\357\357\357\377\356\356\356\377\355\355" - "\355\377\353\353\353\377\352\352\352\377\351\351\351\377\350\350\350" - "\377\346\346\346\377\345\345\345\377\343\343\343\377\360\360\360\377" - "\350\350\350\377\343\343\343\377\271\270\271\377qcp\366>&;M\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>&;s\223\211\223\374\345\345\345" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\366\366\365\377\355\356" - "\354\377\346\346\344\377\335\336\333\377\325\327\323\377\317\321\314" - "\377\310\312\304\377\210\206\201\377\207\23\23\377\227BA\377\311\312" - "\310\377\352\352\352\377\357\357\357\377\356\356\356\377\355\355\355" - "\377\353\353\353\377\352\352\352\377\351\351\351\377\350\350\350\377" - "\346\346\346\377\345\345\345\377\343\343\343\377\355\355\355\377\354" - "\354\354\377\343\343\343\377\304\303\304\377~t~\374>&;s\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77'=\242\253\244\254\377\354\354\354" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\366\366\365\377\355\356" - "\354\377\346\347\344\377\335\336\333\377\326\327\323\377\320\322\315" - "\377\310\313\305\377\210\212\205\377\224GE\377\207\15\15\377\262\207" - "\206\377\351\351\351\377\357\357\357\377\356\356\356\377\355\355\355" - "\377\353\353\353\377\352\352\352\377\351\351\351\377\350\350\350\377" - "\346\346\346\377\345\345\345\377\343\343\343\377\351\351\351\377\360" - "\360\360\377\343\343\343\377\313\313\313\377\216\207\217\377\77'=\242" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77'=\316\275\271\275" - "\377\363\363\363\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\366\367" - "\366\377\355\357\355\377\345\346\344\377\335\337\334\377\326\330\324" - "\377\316\320\313\377\307\312\304\377\210\212\205\377\237\222\216\377" - "\215\27\27\377\216\31\31\377\333\310\307\377\356\356\356\377\355\355" - "\355\377\354\354\354\377\353\353\353\377\351\351\351\377\350\350\350" - "\377\347\347\347\377\346\346\346\377\344\344\344\377\343\343\343\377" - "\345\345\345\377\364\364\364\377\343\343\343\377\323\323\323\377\227" - "\223\227\377\77'=\316\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\77'<\357\306\304\306\377\371\371\371\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\365\366\365\377\354\356\354\377\344\345\343\377\334\336" - "\333\377\325\327\323\377\316\320\313\377\307\312\304\377\210\212\205" - "\377\242\243\240\377\244lk\377\214\23\23\377\23300\377\346\334\334\377" - "\355\355\355\377\354\354\354\377\353\353\353\377\351\351\351\377\350" - "\350\350\377\347\347\347\377\346\346\346\377\344\344\344\377\343\343" - "\343\377\343\343\343\377\363\363\363\377\345\345\345\377\333\333\333" - "\377\233\231\233\377\77'<\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - ">&;\14E.B\372\305\305\306\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\376\376\376\377\365\365\364\377\355\356\354\377\345\345\343\377\335" - "\336\333\377\325\327\323\377\316\320\313\377\310\312\304\377\210\212" - "\205\377\242\244\240\377\264\265\262\377\236==\377\221\27\27\377\244" - "==\377\350\340\340\377\353\353\353\377\352\352\352\377\351\351\351\377" - "\350\350\350\377\346\346\346\377\345\345\345\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\360\360\360\377\351\351\351\377\342\342" - "\342\377\233\233\233\377D,A\372>&;\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - ">&;1\\GY\363\303\302\303\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\376\376\376\377\364\364\363\377\354\355\353\377\344\345\342\377\334" - "\335\332\377\325\326\322\377\316\320\313\377\307\312\304\377\210\212" - "\205\377\243\245\241\377\265\267\264\377\301\267\265\377\23711\377\236" - "((\377\247EE\377\351\346\346\377\352\352\352\377\351\351\351\377\350" - "\350\350\377\346\346\346\377\345\345\345\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\354\354\354\377\355\355\355\377\343\343\343" - "\377\237\236\237\377UAS\363>&;1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>&;Vo" - "_n\366\307\305\307\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376" - "\376\377\365\366\365\377\356\356\355\377\345\346\344\377\336\337\334" - "\377\327\330\324\377\317\321\314\377\311\312\305\377\210\212\205\377" - "\234\236\232\377\260\261\256\377\303\304\302\377\340\313\313\377\234" - "&&\377\24511\377\262ZZ\377\351\347\347\377\351\351\351\377\350\350\350" - "\377\346\346\346\377\345\345\345\377\343\343\343\377\343\343\343\377" - "\343\343\343\377\350\350\350\377\360\360\360\377\343\343\343\377\247" - "\245\247\377dTc\366>&;V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>&;~~q\177\375" - "\320\317\320\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376" - "\377\365\366\365\377\355\356\354\377\345\346\344\377\336\337\334\377" - "\327\331\325\377\317\322\315\377\311\313\306\377\210\212\205\377\235" - "\236\232\377\260\261\256\377\303\303\301\377\357\357\357\377\324\260" - "\260\377\236**\377\25399\377\273pp\377\351\351\351\377\350\350\350\377" - "\346\346\346\377\345\345\345\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\344\344\344\377\364\364\364\377\343\343\343\377\263\262" - "\263\377qcq\375>&;~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77'=\256\220\205" - "\221\377\334\334\334\377\377\377\377\377\377\377\377\377\377\377\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\252\252" + "\3\312\312\3125\313\313\313l\317\317\317\243\320\320\320\324\320\320" + "\320\351\322\322\322\367\324\324\324\367\323\323\323\361\321\321\321" + "\337\317\317\317\241\313\313\313S\377\377\377\2\306\306\306\11\315\315" + "\315\\\320\320\320\251\321\321\321\341\323\323\323\356\324\324\324\364" + "\322\322\322\366\317\317\317\351\313\313\313\330\311\311\311\257\306" + "\306\306y\306\306\306G\304\304\304\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\317\317\317\20\315" + "\315\315`\317\317\317\300\315\315\315\366\326\326\326\362\350\350\350" + "\371\363\363\363\377\372\372\372\377\374\374\374\377\373\373\372\377" + "\367\370\367\377\364\365\363\377\361\362\360\377\351\352\350\377\333" + "\333\332\370\312\307\307\360y\0\0\377\330\331\327\370\352\353\352\377" + "\366\366\366\377\370\370\370\377\367\367\367\377\367\367\367\377\366" + "\366\366\377\364\364\364\377\355\355\355\377\341\341\341\374\320\320" + "\320\361\300\300\300\370\300\300\300\330\276\276\276\205\274\274\274" + ".\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\310\16\313\313\313]\317" + "\317\317\300\316\316\316\370\333\333\333\364\362\362\362\377\375\375" + "\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\375\375\375\377\366\366\365\377\357\360\355\377\346\347\344\377" + "\335\337\333\377\334\335\331\377\345\346\344\377\344\345\343\377y\0\0" + "\377\326\315\314\377\337\340\336\377\352\353\352\377\360\360\360\377" + "\356\356\356\377\355\355\355\377\354\354\354\377\353\353\353\377\355" + "\355\355\377\360\360\360\377\364\364\364\377\363\363\363\377\345\345" + "\345\377\320\320\320\371\274\274\274\363\271\271\271\343\266\266\266" + "t\270\270\270\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\314\314\314\5\314\314\314\377\326\326\326\365\352" + "\352\352\377\375\375\375\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\375\375\375\377\366\366\365\377\356\357\354\377\346\347\344\377" + "\335\337\333\377\324\326\321\377\311\314\306\377\313\315\307\377z\1\1" + "\377\256\223\220\377\331\332\327\377\352\353\352\377\357\357\357\377" + "\356\356\356\377\355\355\355\377\353\353\353\377\352\352\352\377\351" + "\351\351\377\350\350\350\377\346\346\346\377\351\351\351\377\357\357" + "\357\377\365\365\365\377\356\356\356\377\330\330\330\377\303\303\303" + "\365\261\261\261\377\231\231\231\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0""333\5Q<N\377\311\310\311\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\375\375\374\377\366\366\365\377\356\357\354\377\346\347\344" + "\377\335\337\333\377\324\326\321\377\311\314\306\377\277\302\273\377" + "}\4\4\377\230SR\377\331\333\330\377\353\353\352\377\357\357\357\377\356" + "\356\356\377\355\355\355\377\353\353\353\377\352\352\352\377\351\351" + "\351\377\347\347\347\377\346\346\346\377\345\345\345\377\343\343\343" + "\377\346\346\346\377\363\363\363\377\343\343\343\377\343\343\343\377" + "\254\253\254\377M8J\377333\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0;';'iZh\365\320\316\320\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\375\374" + "\377\364\365\364\377\355\357\354\377\345\347\344\377\334\336\332\377" + "\324\326\321\377\311\314\306\377\277\302\273\377\201\14\14\377\200\7" + "\7\377\332\333\330\377\352\352\351\377\357\357\357\377\356\356\356\377" + "\354\354\354\377\353\353\353\377\352\352\352\377\350\350\350\377\347" + "\347\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343" + "\343\377\364\364\364\377\344\344\344\377\343\343\343\377\261\257\261" + "\377`O_\365;';'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<%<L\201" + "r\200\366\330\327\330\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\374\374\373\377\364" + "\365\364\377\355\357\354\377\344\346\343\377\334\336\332\377\324\326" + "\321\377\311\314\306\377\277\302\273\377\221ea\377\202\11\11\377\321" + "\307\305\377\352\352\351\377\357\357\357\377\355\355\355\377\354\354" + "\354\377\353\353\353\377\352\352\352\377\350\350\350\377\347\347\347" + "\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343\343\377" + "\360\360\360\377\350\350\350\377\343\343\343\377\266\265\267\377qbp\366" + "<%<L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77&:r\224\212\224" + "\374\345\345\345\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\373\374\373\377\364\365" + "\363\377\354\355\353\377\344\346\343\377\334\335\331\377\323\325\320" + "\377\310\313\305\377\277\301\273\377\232\225\221\377\205\14\14\377\245" + "TS\377\352\353\352\377\356\356\356\377\355\355\355\377\354\354\354\377" + "\352\352\352\377\351\351\351\377\350\350\350\377\347\347\347\377\345" + "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\355\355" + "\355\377\354\354\354\377\343\343\343\377\302\302\302\377|q{\374\77&:" + "r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77'<\242\252\244\253" + "\377\354\354\354\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\373\374\373\377\364\365" + "\363\377\354\355\353\377\344\346\343\377\334\335\331\377\322\324\317" + "\377\310\313\305\377\277\301\273\377\234\235\231\377\240SR\377\210\17" + "\17\377\314\247\247\377\356\356\356\377\355\355\355\377\354\354\354\377" + "\352\352\352\377\351\351\351\377\350\350\350\377\346\346\346\377\345" + "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\351\351" + "\351\377\360\360\360\377\343\343\343\377\312\312\312\377\213\204\213" + "\377\77'<\242\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@'<\317" + "\275\271\275\377\362\362\362\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\374\373" + "\377\364\365\363\377\354\355\353\377\344\346\343\377\334\335\331\377" + "\322\324\317\377\310\313\305\377\277\301\273\377\234\235\231\377\273" + "\262\256\377\213\21\21\377\215\26\26\377\342\323\323\377\355\355\355" + "\377\353\353\353\377\352\352\352\377\351\351\351\377\347\347\347\377" + "\346\346\346\377\345\345\345\377\344\344\344\377\343\343\343\377\343" + "\343\343\377\345\345\345\377\364\364\364\377\343\343\343\377\322\322" + "\322\377\226\222\226\377@'<\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0>'<\356\304\302\304\377\371\371\371\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345\342\377" + "\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273\377\234" + "\237\231\377\300\302\276\377\275\216\214\377\216\24\24\377\24077\377" + "\344\333\333\377\353\353\353\377\352\352\352\377\351\351\351\377\347" + "\347\347\377\346\346\346\377\345\345\345\377\343\343\343\377\343\343" + "\343\377\343\343\343\377\343\343\343\377\363\363\363\377\345\345\345" + "\377\333\333\333\377\232\231\233\377>'<\356\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0@+@\14E.B\372\303\303\303\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" - "\376\376\377\364\365\364\377\355\355\354\377\345\346\344\377\335\337" - "\334\377\325\327\323\377\317\321\314\377\310\312\305\377\211\213\206" - "\377\235\236\232\377\261\262\257\377\304\304\302\377\356\356\356\377" - "\355\355\355\377\305\211\211\377\263CC\377\25055\377\320\250\250\377" - "\347\347\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\363\363\363\377\346\346" - "\346\377\300\300\300\377\200u\201\377\77'=\256\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\77'=\327\241\233\242\377\345\345\345\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\376\376\376\377\375\375\375\377\364\365\364\377\354\354\353\377" - "\344\345\343\377\335\336\333\377\326\327\323\377\317\321\314\377\310" - "\311\304\377\211\213\206\377\234\236\232\377\261\262\257\377\304\305" - "\303\377\356\356\356\377\355\355\355\377\353\351\351\377\255FF\377\304" - "TT\377\24655\377\340\324\324\377\345\345\345\377\344\344\344\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\357\357" - "\357\377\352\352\352\377\312\312\312\377\217\210\217\377\77'=\327\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77&<\365\253\247\253\377\356\356\356\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\376\376\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345" + "\342\377\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273" + "\377\235\237\232\377\300\302\276\377\332\332\330\377\251NN\377\227!!" + "\377\247BB\377\347\341\341\377\352\352\352\377\350\350\350\377\347\347" + "\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343\343" + "\377\343\343\343\377\343\343\343\377\360\360\360\377\351\351\351\377" + "\342\342\342\377\234\233\234\377D-A\372@+@\14\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0@%:0\\HZ\363\300\277\300\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\376\376\376\377\375\375\375\377\364\365\364" - "\377\354\354\353\377\344\345\343\377\335\336\333\377\325\326\322\377" - "\316\320\313\377\307\310\303\377\211\213\206\377\235\236\232\377\260" - "\261\256\377\304\304\302\377\356\356\356\377\355\355\355\377\353\353" - "\353\377\334\305\305\377\25255\377\305TT\377\276rr\377\345\345\345\377" - "\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\353\353\353\377\355\355\355\377\323\323\323\377\227\224" - "\230\377\77&<\365\0\0\0\0\0\0\0\0\0\0\0\0>&;\24C+@\370\254\253\255\377" - "\370\370\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\376\376\376\377\374\374\374" - "\377\363\364\363\377\353\354\352\377\343\344\342\377\334\335\332\377" - "\325\327\323\377\316\321\314\377\307\311\304\377\212\214\207\377\235" - "\237\233\377\261\262\257\377\304\305\303\377\356\356\356\377\355\355" - "\355\377\353\353\353\377\352\352\352\377\261HH\377\316ZZ\377\25144\377" - "\342\334\334\377\343\343\343\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\347\347\347\377\361\361\361\377\335\335" - "\335\377\233\232\233\377C+@\370>&;\24\0\0\0\0\0\0\0\0>&;:N8L\362\253" - "\252\253\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376" + "\376\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345\342" + "\377\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273\377" + "\234\236\231\377\300\302\276\377\333\334\331\377\345\335\334\377\242" + "66\377\24522\377\254NN\377\350\345\345\377\350\350\350\377\347\347\347" + "\377\345\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377" + "\343\343\343\377\343\343\343\377\354\354\354\377\355\355\355\377\343" + "\343\343\377\237\236\237\377VBT\363@%:0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0>&;Wn^n\366\304\302\304\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377" - "\375\375\375\377\364\365\364\377\354\354\353\377\344\345\343\377\334" - "\336\333\377\325\327\323\377\317\321\314\377\307\311\304\377\213\214" - "\210\377\236\237\234\377\262\263\260\377\305\306\303\377\356\356\356" - "\377\355\355\355\377\353\353\353\377\352\352\352\377\313\221\221\377" - "\275HH\377\270EE\377\316\236\236\377\343\343\343\377\343\343\343\377" - "\343\343\343\377\343\343\343\377\343\343\343\377\344\344\344\377\364" - "\364\364\377\343\343\343\377\234\233\234\377M7K\362>&;:\0\0\0\0\0\0\0" - "\0>&;``M_\366\255\253\255\377\377\377\377\377\377\377\377\377\377\377" + "\372\372\372\377\363\364\362\377\354\355\352\377\343\345\342\377\333" + "\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377\235\237" + "\232\377\301\303\277\377\333\334\331\377\351\352\351\377\340\316\316" + "\377\240--\377\255<<\377\265``\377\347\345\345\377\346\346\346\377\345" + "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343" + "\343\377\343\343\343\377\350\350\350\377\361\361\361\377\343\343\343" + "\377\246\244\246\377dTd\366>&;W\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77';" + "}\177q\177\375\317\316\317\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377" + "\371\371\371\377\363\364\362\377\354\355\352\377\342\344\341\377\333" + "\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377\235\237" + "\233\377\301\303\277\377\332\333\331\377\351\352\351\377\355\355\355" + "\377\326\266\266\377\24411\377\260@@\377\275uu\377\346\346\346\377\345" + "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343" + "\343\377\343\343\343\377\344\344\344\377\364\364\364\377\343\343\343" + "\377\263\262\263\377ses\375\77';}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77" + "(<\256\217\205\220\377\334\334\334\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\376\376\376\377\373\373\373\377\362\363\362\377\353\353\352\377\343" - "\344\342\377\334\335\332\377\325\326\322\377\316\320\313\377\310\311" - "\304\377\212\214\207\377\236\237\233\377\261\262\257\377\304\304\302" - "\377\355\355\355\377\354\354\354\377\353\353\353\377\351\351\351\377" - "\332\301\301\377\263AA\377\304GG\377\273aa\377\343\343\343\377\343\343" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376" + "\376\377\371\371\371\377\363\364\362\377\354\355\352\377\342\344\341" + "\377\333\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377" + "\235\237\233\377\301\302\277\377\332\334\331\377\352\352\351\377\355" + "\355\355\377\353\353\353\377\311\222\222\377\271KK\377\260@@\377\316" + "\244\244\377\345\345\345\377\343\343\343\377\343\343\343\377\343\343" + "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\363\363\363" + "\377\346\346\346\377\301\301\301\377\177u\200\377\77(<\256\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\77)=\326\237\231\240\377\344\344\344\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\375\375\375\377\371\371\371\377\363\363\362\377\352" + "\353\351\377\342\344\340\377\332\335\330\377\321\323\316\377\310\312" + "\304\377\276\301\272\377\236\240\233\377\301\303\277\377\333\334\331" + "\377\352\352\351\377\354\354\354\377\353\353\353\377\352\351\351\377" + "\262QQ\377\316aa\377\253<<\377\337\325\325\377\343\343\343\377\343\343" "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\362\362\362\377\347\347\347\377\240\236\240\377]K]\366>&;`\0\0\0" - "\0\0\0\0\0>&<\211n^n\376\264\263\265\377\377\377\377\377\377\377\377" + "\377\357\357\357\377\352\352\352\377\312\312\312\377\216\210\217\377" + "\77)=\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77(<\365\250\245\251\377\355" + "\355\355\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\376\376\376\377\375\375\375\377\371\371\371\377" + "\362\362\361\377\352\353\351\377\342\344\340\377\332\335\330\377\321" + "\323\316\377\310\312\304\377\276\301\272\377\237\241\234\377\302\303" + "\277\377\333\334\331\377\351\351\351\377\354\354\354\377\353\353\353" + "\377\351\351\351\377\335\312\312\377\255<<\377\310XX\377\300tt\377\343" + "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343" + "\343\377\343\343\343\377\353\353\353\377\355\355\355\377\323\323\323" + "\377\227\224\230\377\77(<\365\0\0\0\0\0\0\0\0\0\0\0\0=$=\25D+A\370\252" + "\250\252\377\367\367\367\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\376\376\376\377\375\375\375\377" + "\370\370\367\377\361\362\361\377\352\353\351\377\342\344\340\377\331" + "\334\327\377\321\323\316\377\310\312\304\377\276\301\272\377\237\241" + "\235\377\302\303\277\377\332\333\331\377\351\352\351\377\354\354\354" + "\377\352\352\352\377\351\351\351\377\350\350\350\377\270\\\\\377\313" + "UU\377\255;;\377\335\323\323\377\343\343\343\377\343\343\343\377\343" + "\343\343\377\343\343\343\377\343\343\343\377\347\347\347\377\361\361" + "\361\377\335\335\335\377\233\231\233\377D+A\370=$=\25\0\0\0\0\0\0\0\0" + "='=;N9N\361\250\247\250\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377\375" + "\375\375\377\370\370\367\377\361\362\361\377\352\353\351\377\342\344" + "\340\377\331\334\327\377\321\323\316\377\307\312\304\377\275\300\272" + "\377\237\241\235\377\302\304\300\377\333\334\331\377\351\352\351\377" + "\354\354\354\377\352\352\352\377\351\351\351\377\350\350\350\377\316" + "\236\236\377\274FF\377\274EE\377\313\227\227\377\343\343\343\377\343" + "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\344\344" + "\344\377\364\364\364\377\343\343\343\377\233\233\233\377M8M\361='=;\0" + "\0\0\0\0\0\0\0=%:`_M_\366\252\251\252\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\376\376\376\377\373\373\373\377\362\363\362\377\353\354" - "\352\377\343\344\342\377\334\335\332\377\325\327\322\377\316\321\313" - "\377\310\312\304\377\213\215\210\377\236\240\234\377\262\263\260\377" - "\304\305\303\377\355\355\355\377\354\354\354\377\353\353\353\377\351" - "\351\351\377\337\316\316\377\262==\377\303@@\377\267PP\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377" - "\343\343\343\377\356\356\356\377\352\352\352\377\250\247\250\377k[k\376" - ">&<\211\0\0\0\0\0\0\0\0\77'=\271zmz\377\302\302\302\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\376\376\376\377\376\376\376\377\375\375\375\377\370\370\370" - "\377\362\363\362\377\353\354\353\377\344\345\343\377\326\330\324\377" - "\315\320\313\377\307\311\304\377\213\215\210\377\237\240\234\377\264" - "\265\262\377\323\323\321\377\363\363\363\377\363\363\363\377\363\363" - "\363\377\362\362\362\377\354\344\344\377\262;;\377\27755\377\265DD\377" - "\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\352\352\352\377\356\356\356\377\265\264" - "\265\377xkx\377\77'=\271\0\0\0\0\0\0\0\0\77'=\340\207~\210\377\322\322" - "\322\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\371\371\371\377\356\356\356\377\341\341\341\377\331\331\331\377\321" - "\321\321\377\313\313\313\377\327\327\327\377\340\340\340\377\350\350" - "\350\377\357\360\357\377\343\344\342\377\312\314\307\377\223\225\220" - "\377\312\312\310\377\344\344\343\377\340\340\340\377\335\335\335\377" - "\322\322\322\377\306\306\306\377\313\313\313\377\320\312\312\377\260" - "77\377\271''\377\262::\377\365\365\365\377\361\361\361\377\355\355\355" - "\377\350\350\350\377\343\343\343\377\343\343\343\377\347\347\347\377" - "\362\362\362\377\303\303\303\377\205|\206\377\77'=\340\0\0\0\0>&;\2\77" - "'<\371\223\215\224\377\340\340\340\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\372\372\372\377\354\354\354\377\325\325\325\377\272" - "\272\272\377\237\237\237\377\236\236\236\377\241\241\237\377\240\242" - "\237\377\240\242\236\377\242\245\240\377\242\244\237\377\237\241\235" - "\377\241\242\240\377\236\236\236\377\234\234\234\377\313\314\312\377" - "\352\352\351\377\322\322\321\377\272\272\271\377\233\233\233\377\236" - "\236\235\377\241\242\237\377\240\242\237\377\244\246\242\377\245\247" - "\242\377\246\207\204\377\26077\377\261\31\31\377\25788\377\237\237\237" - "\377\266\266\265\377\315\314\315\377\343\343\343\377\361\361\361\377" - "\357\357\357\377\351\351\351\377\365\365\365\377\315\315\315\377\222" - "\214\222\377\77'<\371>&;\2>&;\36D,B\365\232\227\232\377\356\356\356\377" - "\371\371\371\377\344\344\344\377\276\276\276\377\242\242\242\377\240" - "\241\240\377\235\237\232\377\244\247\241\377\257\263\252\377\256\261" - "\251\377\251\254\244\377\245\250\237\377\243\250\236\377\242\247\234" - "\377\245\250\237\377\247\252\241\377\251\255\244\377\257\263\253\377" - "\254\257\250\377\233\234\232\377\243\243\243\377\247\247\246\377\233" - "\234\233\377\256\260\252\377\262\265\256\377\260\263\253\377\260\264" - "\253\377\260\264\253\377\260\264\255\377\261rn\377\255$$\377\252\21\21" - "\377\260DC\377\265\271\262\377\253\255\247\377\241\243\240\377\237\240" - "\237\377\241\242\241\377\273\273\273\377\335\335\335\377\360\360\360" - "\377\334\334\334\377\230\225\231\377D,B\365>&;\36>&;DK4I\361\234\234" - "\234\377\251\251\251\377\237\237\236\377\233\233\230\377\240\243\235" - "\377\257\262\252\377\255\261\250\377\245\252\240\377\237\244\232\377" - "\231\236\223\377\232\236\223\377\233\237\225\377\234\240\226\377\235" - "\242\227\377\236\243\230\377\240\244\232\377\241\245\233\377\242\246" - "\234\377\244\250\240\377\256\262\252\377\264\267\257\377\250\254\244" - "\377\243\246\241\377\264\270\260\377\261\265\254\377\255\260\250\377" - "\255\260\250\377\256\262\251\377\257\263\252\377\260\264\254\377\260" - "IH\377\252\34\34\377\253\36\36\377\261SR\377\266\272\262\377\271\274" - "\264\377\272\275\266\377\272\275\266\377\272\275\266\377\252\254\250" - "\377\236\236\234\377\236\236\236\377\247\247\247\377\233\233\233\377" - "K4I\361>&;D>&;iZGY\367\221\222\220\377\232\235\225\377\260\263\253\377" - "\262\265\256\377\255\260\247\377\243\247\235\377\242\246\234\377\244" - "\250\237\377\246\252\241\377\251\254\243\377\252\255\245\377\252\256" - "\245\377\253\257\246\377\253\260\246\377\251\255\244\377\246\252\241" - "\377\244\250\236\377\253\257\247\377\262\265\255\377\244\247\241\377" - "\227\231\224\377\214\215\212\377\214\214\211\377\227\231\224\377\245" - "\247\241\377\264\267\260\377\262\265\255\377\257\263\252\377\261\265" - "\255\377\264\262\252\377\26099\377\261[Y\377\26077\377\263jg\377\271" - "\274\264\377\271\274\265\377\273\276\267\377\272\275\266\377\272\275" - "\266\377\272\275\266\377\272\275\266\377\272\275\266\377\254\256\251" - "\377\222\223\221\377ZGY\367>&;i\77'<\225gXg\377\207\210\204\377\244\250" - "\237\377\253\256\245\377\251\254\245\377\250\252\243\377\245\250\240" - "\377\242\245\235\377\237\243\234\377\235\240\231\377\231\233\224\377" - "\227\231\224\377\226\230\223\377\226\227\222\377\224\226\221\377\237" - "\242\233\377\247\253\243\377\260\264\253\377\244\247\241\377\212\213" - "\207\377vnv\377hYi\377^Ja\377^Ja\377hYi\377wov\377\211\212\206\377\245" - "\251\242\377\263\267\257\377\252\254\246\377\242\236\231\377\226\226" - "\222\377\227\230\224\377\236\201}\377\243sp\377\233\235\231\377\241\243" - "\235\377\244\247\241\377\247\252\244\377\251\254\246\377\254\257\251" - "\377\257\262\254\377\262\265\257\377\265\270\261\377\220\221\215\377" - "gXg\377\77'<\226\77'=\304sjs\377\210\211\205\377\205\206\203\377\203" - "\203\201\377\201\177\177\377~z|\377zuy\377vov\377rhq\377mam\377j\\k\377" - "i[j\377hYi\377gXh\377fVg\377nbn\377}x{\377\207\210\204\377\201\177\200" - "\377lZm\377ZA^\377R8V\377R8V\377R8V\377R8V\377ZA^\377lZm\377\202\177" - "\200\377\207\211\205\377~z}\377nco\377fWh\377gXh\377hYi\377iZj\377j\\" - "k\377l`m\377rgq\377wov\377|v{\377\200|~\377\203\201\201\377\205\205\203" - "\377\207\207\204\377\210\212\205\377sjs\377\77'=\305\77'<\347cLe\377" - "gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377" - "gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377hQk\377M6L\374G1E\365_G`\377" - "hQj\377eNi\377eNi\377hQj\377_G`\377H1F\371M6L\371hQk\377gPj\377gPj\377" - "gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377gPj\377" - "gPj\377gPj\377gPj\377gPj\377cLe\377\77'<\350\77'<\340\77'<\377@(=\377" - "@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" - "@(=\377@(=\377@(=\377@(=\377@(=\377\77(<\377A,>\326J@H\201A+>\337>&;" - "\376C+@\377D,A\373>&;\376A+\77\337JAH\204A,>\321\77(<\377@(=\377@(=\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" + "\376\376\377\374\374\374\377\370\370\367\377\361\362\361\377\351\352" + "\350\377\342\344\340\377\331\334\327\377\321\323\316\377\307\312\304" + "\377\275\300\272\377\240\242\235\377\303\304\301\377\333\334\331\377" + "\351\352\351\377\353\353\353\377\352\352\352\377\351\351\351\377\347" + "\347\347\377\334\306\306\377\262\77\77\377\302BB\377\273__\377\343\343" + "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" + "\377\343\343\343\377\362\362\362\377\347\347\347\377\240\237\240\377" + "]K]\366=%:`\0\0\0\0\0\0\0\0\77%<\211m\\m\376\261\260\262\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\375\375\375\377\374\374\374\377\370\370\367\377\360" + "\361\357\377\351\352\347\377\342\344\340\377\331\333\327\377\320\323" + "\316\377\307\312\304\377\275\300\271\377\241\243\236\377\303\304\301" + "\377\333\334\332\377\351\351\350\377\353\353\353\377\352\352\352\377" + "\351\351\351\377\347\347\347\377\343\336\336\377\25788\377\30299\377" + "\264CC\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" + "\377\343\343\343\377\343\343\343\377\356\356\356\377\352\352\352\377" + "\250\246\250\377kZk\376\77%<\211\0\0\0\0\0\0\0\0A'>\271xly\377\301\300" + "\301\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\376\376\376\377\376\376\376\377\375\375\375\377\372" + "\372\372\377\367\367\366\377\362\362\361\377\353\355\352\377\343\344" + "\341\377\323\326\321\377\307\312\304\377\275\300\271\377\241\243\236" + "\377\303\305\301\377\334\335\334\377\357\357\357\377\362\362\362\377" + "\362\362\362\377\362\362\362\377\361\361\361\377\360\360\360\377\260" + "66\377\272++\377\26199\377\344\344\344\377\343\343\343\377\343\343\343" + "\377\343\343\343\377\343\343\343\377\343\343\343\377\352\352\352\377" + "\356\356\356\377\265\264\265\377wkx\377A'>\271\0\0\0\0\0\0\0\0@'<\340" + "\206|\207\377\322\322\322\377\377\377\377\377\377\377\377\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" + "\377\376\376\376\377\366\366\366\377\353\353\353\377\341\341\341\377" + "\332\332\332\377\322\322\322\377\321\321\321\377\333\333\332\377\341" + "\342\341\377\350\350\347\377\355\356\354\377\342\343\340\377\304\307" + "\300\377\254\255\251\377\340\341\337\377\360\361\360\377\350\350\350" + "\377\336\336\336\377\325\325\325\377\313\313\313\377\314\314\314\377" + "\320\313\313\377\26177\377\263\34\34\377\26066\377\364\364\364\377\362" + "\362\362\377\356\356\356\377\351\351\351\377\344\344\344\377\343\343" + "\343\377\347\347\347\377\362\362\362\377\303\303\303\377\206|\206\377" + "@'<\340\0\0\0\0\0\0\0\1@)>\372\223\215\224\377\340\340\340\377\377\377" + "\377\377\377\377\377\377\377\377\377\377\372\372\372\377\353\353\353" + "\377\317\317\317\377\261\261\260\377\236\236\236\377\240\240\240\377" + "\241\242\240\377\240\242\237\377\240\242\236\377\242\244\240\377\242" + "\244\237\377\241\243\237\377\241\242\237\377\237\237\236\377\241\241" + "\241\377\315\315\313\377\351\352\350\377\337\337\335\377\306\307\306" + "\377\241\241\241\377\237\237\236\377\242\242\240\377\243\245\241\377" + "\245\247\243\377\245\247\243\377\247\206\204\377\25755\377\254\20\20" + "\377\26098\377\235\236\235\377\256\256\255\377\310\310\310\377\342\342" + "\342\377\360\360\360\377\360\360\360\377\352\352\352\377\365\365\365" + "\377\316\316\316\377\222\214\222\377@)>\372\0\0\0\1>#>\35D-C\365\231" + "\227\232\377\356\356\356\377\367\367\367\377\336\336\336\377\270\270" + "\270\377\241\241\241\377\235\235\233\377\237\240\233\377\250\254\244" + "\377\260\264\253\377\255\260\247\377\251\254\244\377\245\251\240\377" + "\244\251\237\377\244\250\237\377\245\251\240\377\247\253\242\377\252" + "\256\246\377\257\264\253\377\255\261\250\377\234\235\232\377\251\251" + "\250\377\243\243\242\377\234\235\233\377\257\261\253\377\263\267\256" + "\377\261\265\255\377\262\264\255\377\262\264\255\377\263\265\257\377" + "\261ro\377\252\37\37\377\246\12\12\377\261DC\377\270\273\264\377\262" + "\264\256\377\245\246\242\377\236\236\235\377\240\240\240\377\266\266" + "\266\377\330\330\330\377\357\357\357\377\333\333\333\377\230\225\230" + "\377D-C\365>#>\35@&<DK5I\361\233\233\233\377\246\246\246\377\242\243" + "\242\377\231\231\226\377\241\244\236\377\257\263\252\377\255\261\250" + "\377\245\251\237\377\237\243\230\377\232\236\224\377\232\237\224\377" + "\233\240\225\377\235\241\227\377\236\242\230\377\237\243\231\377\240" + "\245\233\377\242\246\234\377\243\247\235\377\245\251\241\377\256\261" + "\251\377\264\267\257\377\246\250\243\377\246\250\242\377\264\270\260" + "\377\262\264\255\377\256\261\251\377\256\261\251\377\257\263\253\377" + "\260\264\254\377\262\265\255\377\260EC\377\253\"\"\377\252\36\36\377" + "\260TR\377\270\273\264\377\271\274\265\377\272\275\266\377\272\275\266" + "\377\272\275\266\377\253\257\251\377\235\236\233\377\241\242\241\377" + "\245\245\245\377\233\233\233\377K5I\361@&<D\77&<jZGZ\367\222\223\221" + "\377\233\240\230\377\262\266\255\377\263\266\256\377\254\260\250\377" + "\245\251\237\377\242\247\234\377\245\251\240\377\247\253\241\377\251" + "\254\243\377\252\256\245\377\253\257\246\377\254\260\246\377\255\260" + "\250\377\253\257\246\377\251\255\244\377\247\253\242\377\255\262\251" + "\377\261\264\254\377\243\246\237\377\223\223\220\377\216\216\213\377" + "\215\215\213\377\223\223\220\377\243\246\240\377\262\266\257\377\264" + "\267\257\377\262\265\255\377\264\267\260\377\265\264\254\377\26066\377" + "\261DC\377\26066\377\262[Y\377\271\275\265\377\273\276\267\377\272\275" + "\266\377\272\275\266\377\272\275\266\377\272\275\266\377\272\275\266" + "\377\272\275\266\377\254\256\251\377\222\223\221\377ZGZ\367\77&<j>%;" + "\227gYg\377\207\210\204\377\246\252\241\377\262\266\255\377\252\255\245" + "\377\250\253\243\377\245\251\242\377\242\246\236\377\240\244\234\377" + "\236\241\232\377\232\234\226\377\227\231\224\377\227\231\223\377\225" + "\226\222\377\226\226\222\377\232\234\226\377\242\245\236\377\257\262" + "\253\377\237\243\235\377\210\211\206\377wov\377bQd\377YB\\\377YB\\\377" + "bQd\377wov\377\207\211\205\377\240\244\236\377\260\263\255\377\244\247" + "\240\377\235\232\224\377\231\222\217\377\227\230\224\377\236\202~\377" + "\243sp\377\233\235\230\377\241\243\236\377\244\247\241\377\250\252\245" + "\377\253\256\247\377\256\262\253\377\261\264\256\377\264\267\257\377" + "\267\271\263\377\220\221\216\377gYg\377>%;\227@'=\304sis\377\210\212" + "\205\377\206\207\203\377\204\204\202\377\203\202\200\377\201\177\177" + "\377~y{\377ysx\377tks\377nbo\377j]k\377gYi\377gYi\377gYi\377gYi\377i" + "\\k\377sjs\377\207\210\204\377\203\202\201\377hSk\377ZA^\377S9W\377R" + "8V\377R8V\377S9W\377ZA^\377hSk\377\203\202\202\377\210\211\205\377tk" + "t\377j\\k\377gYi\377gYi\377gYi\377gYi\377i\\k\377mam\377tjs\377ysx\377" + "\177y}\377\203\200\200\377\205\203\202\377\206\206\204\377\207\210\204" + "\377\210\212\205\377sis\377@'=\304\77(<\350fPi\377iSm\377hQk\377hQk\377" + "hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377" + "hQk\377hQk\377hQk\377iTm\377O9M\372G1E\373^G_\377hQk\377fOi\377fOi\377" + "hQk\377^G_\377G1E\373N8M\372iTm\377hQk\377hQk\377hQk\377hQk\377hQk\377" + "hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377" + "iSm\377fPi\377\77(<\350>&;\377\77'<\377@(=\377@(=\377@(=\377@(=\377@" + "(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" + "@(=\377@(=\377@(=\377B-\77\316F8D\226A,\77\334A)=\365D,A\370D,A\370A" + ")=\365A,\77\334F8D\226B,A\315@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" "@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" - "@(=\377@(=\377@(=\377@(=\377\77'<\377\77'<\340\0\0\0\0\0\0\0\0\177\177" - "\0\0]]]\5UUU\13RRR\20SYS\24SXS\31VVR\36VVR\"VVS'VVS+TWT/UWR3VXS7TVR;" - "VXT\77UWSBUWSEVWTHTXSJVWRLUWRNNHLbNILcUWSNUWRNVWRLTXSJVWTHUWSEUWSBVX" - "T\77TVR;VXS7UWR3TWT/VVS+VVS'VVR\"VVR\36SXS\31SYS\24RRR\20UUU\11]]]\2" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202\202\202\0]]]\3Y" - "YM\11R[R\16UUU\22UUU\27WWR\33UYU\36VVR\"UUR&UXR)TWT,TWQ/UXR2VVS4UWS6" - "UWS8UWS9VXS:UWS;TVR;UWS;VXS:UWS9UWS8UWS6VVS4UXR2TWQ/TWT,UXR)UUR&VVR\"" - "UYU\36WWR\33UUU\27UUU\22R[R\15YYL\6]]]\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177" - "\177\0MMM\2ZZZ\5UUU\11R[R\16SZS\23SYS\26SXS\31UZU\33VVR\36UYU\40TXT\"" - "VVS$TWT%TWT&VVS'UXR'UXU'UXR'VVS'TWT&TWT%VVS$TXT\"UYU\40VVR\36UZU\33S" - "XS\31SYS\26SZS\21RZR\13UUU\7ZZZ\3LLL\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "@(=\377\77'<\377>&;\377\0\0\0\0\0\0\0\0\0\0\0\0UUU\3```\10NNN\15UUU\22" + "Q]Q\26XXN\32RZR\37WWP#UUU'SYS+WWQ/WWR2UUU6UUU9UUU<VVR>TXT@UYQBTXTCVV" + "SDRRNKRRNKVVSDTXTCUYQBTXT@VVR>UUU<UUU9UUU6WWR2WWQ/SYS+UUU'WWP#RZR\37" + "XXN\32Q]Q\26UUU\22NNN\15```\10UUU\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1fff\5MMM\12[[[\16UUU\22U" + "UU\25R\\R\31R[R\34RZR\37SZS\"SZS%SYS(UUU*WWQ,SYS.WWQ/UUU0SXS1SXS1SXS" + "1SXS1UUU0WWQ/SYS.WWQ,UUU*SYS(SZS%SZS\"RZR\37R[R\34R\\R\31UUU\25UUU\22" + "[[[\16MMM\12fff\5\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\200\200\200\2fff\5UUU\11UUU\14UUU\17ZZZ\21YYY\24Q]Q\26UUU\30R" + "\\R\31UUU\33R[R\34XXO\35XXO\35UUU\36UUU\36XXO\35XXO\35R[R\34UUU\33R\\" + "R\31UUU\30Q]Q\26YYY\24ZZZ\21UUU\17UUU\14UUU\11fff\5\200\200\200\2\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0AAA\0LLL\1[[[\3" - "PPP\5YYY\7UUU\11UUU\12UUU\14WWP\16SZS\20WWP\21UUU\23UUU\23UUU\22WWQ\20" - "SZS\17WWP\15UUU\14UUU\12UUU\10YYY\6PPP\4[[[\2LLL\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\200\200" + "\200\2@@@\4fff\5UUU\6mmm\7```\10UUU\11MMM\12MMM\12UUU\11```\10mmm\7U" + "UU\6fff\5@@@\4\200\200\200\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" @@ -413,6 +415,6 @@ static const guint8 dict_icon_data[] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0"}; + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};