# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bert@linvala-20100714130458-9lboxuu6eevln25q # target_branch: bzr+ssh://bazaar.launchpad.net/~ubuntu-\ # branches/ubuntu/maverick/nvidia-settings/maverick/ # testament_sha1: 6daed5e515e9c6ffb7cc8701250cd96cd4260d89 # timestamp: 2010-07-14 15:14:13 +0200 # base_revision_id: james.westby@ubuntu.com-20100627185946-\ # zpgnp08qs5do500z # # Begin patch === modified file 'src/gtk+-2.x/ctkdisplayconfig.c' --- src/gtk+-2.x/ctkdisplayconfig.c 2010-06-27 18:59:46 +0000 +++ src/gtk+-2.x/ctkdisplayconfig.c 2010-07-14 13:04:58 +0000 @@ -55,8 +55,7 @@ static void setup_display_page(CtkDisplayConfig *ctk_object); -static void display_config_clicked(GtkWidget *widget, gpointer user_data); - +static void display_config_changed(GtkWidget *widget, gpointer user_data); static void display_resolution_changed(GtkWidget *widget, gpointer user_data); static void display_refresh_changed(GtkWidget *widget, gpointer user_data); static void display_modelname_changed(GtkWidget *widget, gpointer user_data); @@ -166,6 +165,10 @@ static const char * __dpy_model_help = "The Display drop-down allows you to select a desired display device."; +static const char * __dpy_configuration_mnu_help = +"The Configure drop-down allows you to select the desired configuration " +"for the currently selected display device."; + static const char * __dpy_resolution_mnu_help = "The Resolution drop-down allows you to select a desired resolution " "for the currently selected display device."; @@ -662,7 +665,7 @@ GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, - msg); + "%s", msg); gtk_dialog_add_buttons(GTK_DIALOG(dlg), "Truncate MetaModes", @@ -1238,41 +1241,22 @@ G_CALLBACK(display_modelname_changed), (gpointer) ctk_object); - /* Display configuration (Disabled, TwinView, Separate X screen */ - ctk_object->btn_display_config = - gtk_button_new_with_label("Configure..."); - g_signal_connect(G_OBJECT(ctk_object->btn_display_config), "clicked", - G_CALLBACK(display_config_clicked), + /* Display configuration (Disabled, TwinView, Separate X screen) */ + ctk_object->mnu_display_config = gtk_option_menu_new(); + menu = gtk_menu_new(); + ctk_object->mnui_display_config_disabled = gtk_menu_item_new_with_label("Disabled"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), ctk_object->mnui_display_config_disabled); + ctk_object->mnui_display_config_xscreen = gtk_menu_item_new_with_label("Separate X screen (requires X restart)"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), ctk_object->mnui_display_config_xscreen); + ctk_object->mnui_display_config_twinview = gtk_menu_item_new_with_label("TwinView"); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), ctk_object->mnui_display_config_twinview); + gtk_option_menu_set_menu + (GTK_OPTION_MENU(ctk_object->mnu_display_config), menu); + ctk_config_set_tooltip(ctk_config, ctk_object->mnu_display_config, + __dpy_configuration_mnu_help); + g_signal_connect(G_OBJECT(ctk_object->mnu_display_config), "changed", + G_CALLBACK(display_config_changed), (gpointer) ctk_object); - ctk_object->txt_display_config = gtk_label_new("Disabled"); - gtk_misc_set_alignment(GTK_MISC(ctk_object->txt_display_config), 0.0f, 0.5f); - - - /* Display configuration dialog */ - ctk_object->dlg_display_config = gtk_dialog_new_with_buttons - ("Configure Display Device", - GTK_WINDOW(gtk_widget_get_parent(GTK_WIDGET(ctk_object))), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT - | GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_OK, - GTK_RESPONSE_ACCEPT, - NULL); - ctk_object->btn_display_config_cancel = - gtk_dialog_add_button(GTK_DIALOG(ctk_object->dlg_display_config), - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); - ctk_object->rad_display_config_disabled = - gtk_radio_button_new_with_label(NULL, "Disabled"); - ctk_object->rad_display_config_xscreen = - gtk_radio_button_new_with_label_from_widget - (GTK_RADIO_BUTTON(ctk_object->rad_display_config_disabled), - "Separate X screen"); - ctk_object->rad_display_config_twinview = - gtk_radio_button_new_with_label_from_widget - (GTK_RADIO_BUTTON(ctk_object->rad_display_config_disabled), - "TwinView"); - gtk_window_set_resizable(GTK_WINDOW(ctk_object->dlg_display_config), - FALSE); /* Display disable dialog */ ctk_object->txt_display_disable = gtk_label_new(""); @@ -1596,26 +1580,11 @@ { /* Display page */ - GtkWidget *longest_hbox; - /* Generate the major vbox for the display section */ vbox = gtk_vbox_new(FALSE, 5); ctk_object->display_page = vbox; gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); - /* Display Configuration */ - hbox = gtk_hbox_new(FALSE, 5); - /* XXX Pack widget later. Create it here so we can get its size */ - longest_hbox = hbox; - label = gtk_label_new("Configuration:"); - gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); - gtk_widget_size_request(label, &req); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 5); - gtk_box_pack_start(GTK_BOX(hbox), ctk_object->txt_display_config, - FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(hbox), ctk_object->btn_display_config, - FALSE, FALSE, 0); - /* Display model name */ hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); @@ -1626,9 +1595,17 @@ gtk_box_pack_start(GTK_BOX(hbox), ctk_object->mnu_display_model, TRUE, TRUE, 0); - /* Pack the display configuration line */ - gtk_box_pack_start(GTK_BOX(vbox), longest_hbox, FALSE, TRUE, 0); - + /* Display Configuration */ + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); + label = gtk_label_new("Configuration:"); + gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f); + gtk_widget_size_request(label, &req); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 5); + gtk_box_pack_start(GTK_BOX(hbox), ctk_object->mnu_display_config, + TRUE, TRUE, 0); + ctk_object->box_display_config = hbox; + /* Display resolution and refresh dropdowns */ hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); @@ -1816,24 +1793,6 @@ { /* Dialogs */ - /* Display Configuration Dialog */ - label = gtk_label_new("How should this display device be configured?"); - hbox = gtk_hbox_new(TRUE, 0); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 20); - gtk_box_pack_start - (GTK_BOX(GTK_DIALOG(ctk_object->dlg_display_config)->vbox), - hbox, TRUE, TRUE, 20); - gtk_box_pack_start - (GTK_BOX(GTK_DIALOG(ctk_object->dlg_display_config)->vbox), - ctk_object->rad_display_config_disabled, FALSE, FALSE, 0); - gtk_box_pack_start - (GTK_BOX(GTK_DIALOG(ctk_object->dlg_display_config)->vbox), - ctk_object->rad_display_config_xscreen, FALSE, FALSE, 0); - gtk_box_pack_start - (GTK_BOX(GTK_DIALOG(ctk_object->dlg_display_config)->vbox), - ctk_object->rad_display_config_twinview, FALSE, FALSE, 0); - gtk_widget_show_all(GTK_DIALOG(ctk_object->dlg_display_config)->vbox); - /* Display Disable Dialog */ hbox = gtk_hbox_new(TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), ctk_object->txt_display_disable, @@ -2101,22 +2060,63 @@ static void setup_display_config(CtkDisplayConfig *ctk_object) { + nvGpuPtr gpu; nvDisplayPtr display = ctk_display_layout_get_selected_display (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout)); + int num_screens; if (!display) return; + /* Don't allow disabling the last display device */ + num_screens = 0; + for (gpu = ctk_object->layout->gpus; gpu; gpu = gpu->next) { + num_screens += gpu->num_screens; + } + if (num_screens == 1 && display->screen && + display->screen->num_displays == 1) { + gtk_widget_set_sensitive(ctk_object->mnui_display_config_disabled, + FALSE); + } else { + gtk_widget_set_sensitive(ctk_object->mnui_display_config_disabled, + TRUE); + } + + + /* We can only enable as many X screens as the GPU supports */ + if (!display->screen && + (display->gpu->num_screens >= display->gpu->max_displays)) { + gtk_widget_set_sensitive(ctk_object->mnui_display_config_xscreen, + FALSE); + } else { + gtk_widget_set_sensitive(ctk_object->mnui_display_config_xscreen, + TRUE); + } + + + /* We can't setup TwinView if there is only one display connected, + * there are no existing X screens on the GPU, or this display is + * the only enabled device on the GPU, or when SLI is enabled. + */ + if (display->gpu->num_displays == 1 || !display->gpu->num_screens || + display->gpu->screens->sli || + (display->gpu->num_screens == 1 && + display->gpu->screens->num_displays == 1 && + display->screen == display->gpu->screens)) { + gtk_widget_set_sensitive(ctk_object->mnui_display_config_twinview, + FALSE); + } else { + gtk_widget_set_sensitive(ctk_object->mnui_display_config_twinview, + TRUE); + } + + /* Select the current configuration option */ if (!display->screen) { - gtk_label_set_text(GTK_LABEL(ctk_object->txt_display_config), - "Disabled"); - } else if (display->screen->num_displays == 1) { - gtk_label_set_text(GTK_LABEL(ctk_object->txt_display_config), - "Separate X screen"); + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_object->mnu_display_config), 0); // Disabled + } else if (display->screen->num_displays > 1) { + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_object->mnu_display_config), 2); // TwinView } else { - gtk_label_set_text(GTK_LABEL(ctk_object->txt_display_config), - "TwinView"); - } - + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_object->mnu_display_config), 1); // XScreen + } } /* setup_display_config() */ @@ -4365,7 +4365,7 @@ GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, - msg); + "%s", msg); gtk_dialog_run(GTK_DIALOG(dlg)); gtk_widget_destroy(dlg); @@ -4864,140 +4864,27 @@ -/** display_config_clicked() ***************************************** +/** display_config_changed() ***************************************** * - * Called when user clicks on the display configuration button. + * Called when user selects an option in the display configuration menu. * **/ -static void display_config_clicked(GtkWidget *widget, gpointer user_data) +static void display_config_changed(GtkWidget *widget, gpointer user_data) { + CtkDisplayConfig *ctk_object = CTK_DISPLAY_CONFIG(user_data); nvDisplayPtr display = ctk_display_layout_get_selected_display (CTK_DISPLAY_LAYOUT(ctk_object->obj_layout)); - gint result; gboolean update = FALSE; - nvGpuPtr gpu; - int num_screens; - - if (!display) return; - - - /* Don't allow disabling the last display device */ - num_screens = 0; - for (gpu = ctk_object->layout->gpus; gpu; gpu = gpu->next) { - num_screens += gpu->num_screens; - } - if (num_screens == 1 && display->screen && - display->screen->num_displays == 1) { - gtk_widget_set_sensitive(ctk_object->rad_display_config_disabled, - FALSE); - } else { - gtk_widget_set_sensitive(ctk_object->rad_display_config_disabled, - TRUE); - } - - - /* We can only enable as many X screens as the GPU supports */ - if (!display->screen && - (display->gpu->num_screens >= display->gpu->max_displays)) { - gtk_widget_set_sensitive(ctk_object->rad_display_config_xscreen, - FALSE); - } else { - gtk_widget_set_sensitive(ctk_object->rad_display_config_xscreen, - TRUE); - } - - - /* We can't setup TwinView if there is only one display connected, - * there are no existing X screens on the GPU, or this display is - * the only enabled device on the GPU, or when SLI is enabled. - */ - if (display->gpu->num_displays == 1 || !display->gpu->num_screens || - display->gpu->screens->sli || - (display->gpu->num_screens == 1 && - display->gpu->screens->num_displays == 1 && - display->screen == display->gpu->screens)) { - gtk_widget_set_sensitive(ctk_object->rad_display_config_twinview, - FALSE); - } else { - gtk_widget_set_sensitive(ctk_object->rad_display_config_twinview, - TRUE); - } - - - /* Setup the button state */ - if (!display->screen) { - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_disabled), - TRUE); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_disabled), - "Disabled"); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_xscreen), - "Separate X screen (requires X restart)"); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_twinview), - "TwinView"); - - } else if (display->screen->num_displays > 1) { - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_twinview), - TRUE); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_disabled), - "Disabled"); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_xscreen), - "Separate X screen (requires X restart)"); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_twinview), - "TwinView"); - - } else { - gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_xscreen), - TRUE); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_disabled), - "Disabled (requires X restart)"); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_xscreen), - "Separate X screen"); - gtk_button_set_label - (GTK_BUTTON(ctk_object->rad_display_config_twinview), - "TwinView (requires X restart)"); - } - - - /* Show the display config dialog */ - gtk_window_set_transient_for - (GTK_WINDOW(ctk_object->dlg_display_config), - GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(ctk_object)))); - gtk_widget_show_all(ctk_object->dlg_display_config); - gtk_widget_grab_focus(ctk_object->btn_display_config_cancel); - result = gtk_dialog_run(GTK_DIALOG(ctk_object->dlg_display_config)); - gtk_widget_hide(ctk_object->dlg_display_config); - switch (result) - { - case GTK_RESPONSE_ACCEPT: - /* OK */ - break; - - case GTK_RESPONSE_CANCEL: - default: - /* Cancel */ - return; - } - - - - if (gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_disabled))) { - if (display->screen) { + gint position_idx = gtk_option_menu_get_history(GTK_OPTION_MENU( + ctk_object->mnu_display_config)); + + /* Disabled was selected. */ + if (position_idx == 0) { + if (display->screen) { do_disable_display(ctk_object, display); update = TRUE; } @@ -5022,15 +4909,14 @@ if (!display->screen) { /* Enable display as a separate X screen */ - if (gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_xscreen))) { + if (position_idx == 1) { + do_enable_display_for_xscreen(ctk_object, display); update = TRUE; } /* Enable display in TwinView with an existing screen */ - if (gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_twinview))) { + if (position_idx == 2) { do_enable_display_for_twinview(ctk_object, display); update = TRUE; } @@ -5039,16 +4925,14 @@ /* Move display to a new X screen */ if (display->screen->num_displays > 1 && - gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_xscreen))) { + position_idx == 1) { do_configure_display_for_xscreen(ctk_object, display); update = TRUE; } /* Setup TwinView on the first X screen */ if (display->screen->num_displays == 1 && - gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(ctk_object->rad_display_config_twinview))) { + position_idx == 2) { do_configure_display_for_twinview(ctk_object, display); update = TRUE; } @@ -5090,7 +4974,7 @@ user_changed_attributes(ctk_object); } -} /* display_config_clicked() */ +} /* display_config_changed() */ @@ -6042,7 +5926,7 @@ GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, - msg); + "%s", msg); } else { msg = g_strdup_printf("Failed to set MetaMode (%d) '%s' " "(Mode %dx%d, id: %d) on X screen %d.", @@ -6054,7 +5938,7 @@ GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, - msg); + "%s", msg); } result = gtk_dialog_run(GTK_DIALOG(dlg)); === modified file 'src/gtk+-2.x/ctkdisplayconfig.h' --- src/gtk+-2.x/ctkdisplayconfig.h 2010-06-27 18:59:46 +0000 +++ src/gtk+-2.x/ctkdisplayconfig.h 2010-07-14 12:46:23 +0000 @@ -82,9 +82,12 @@ int display_model_table_len; GtkWidget *txt_display_gpu; - GtkWidget *btn_display_config; - GtkWidget *txt_display_config; - + GtkWidget *box_display_config; + GtkWidget *mnu_display_config; + GtkWidget *mnui_display_config_disabled; + GtkWidget *mnui_display_config_xscreen; + GtkWidget *mnui_display_config_twinview; + /* Display - Settings */ GtkWidget *box_display_resolution; GtkWidget *mnu_display_resolution; @@ -137,12 +140,6 @@ int screen_depth_table_len; /* Dialogs */ - GtkWidget *dlg_display_config; - GtkWidget *rad_display_config_disabled; - GtkWidget *rad_display_config_xscreen; - GtkWidget *rad_display_config_twinview; - GtkWidget *btn_display_config_cancel; - GtkWidget *dlg_display_disable; GtkWidget *txt_display_disable; GtkWidget *btn_display_disable_off; # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWdDwQBQABu3/gGZ2IIJ7//// ///fwL////5gDN9LbZotQGqpBQIyqqEkmgAABoAASKaQmp6CU/EYqbU/KMUe1T/UTU0GmT0m1Gnq aB5T1Gnpqe1J7SNQShNNCNNECnqankJiBpoAAGgAAAADQOBo0Yg0aZMIMQGIxNGjRoA000AAAA4G jRiDRpkwgxAYjE0aNGgDTTQAAADgaNGINGmTCDEBiMTRo0aANNNAAAAEiQgETBpGjCKeBJmqe0ZC Rg1NGIeoZAAMTBJBU0JNVgNjE/w7THn55lDnq/JOJFO2vznC+m5usevBG5veGrZxNV1BcunX2Gkw +40mLh2KYvnDNF5okwkZXliTDs6ZK7m2+3vt2JSqDIKcrHEzFQlWgf12wTfIzHXppzUxE5a+OY2C iZCEQT9U49VU7KDiFGoUynlRq0bt0eTyysSpEJ3QEAOmEERPPUEMm5j6pFxR1Q12zkEVTxwzPn9s 9aU7+deBdazJoGxIbBtbswWuP8IDds3auXlvqrVizTKyRvZfdZZFdwrM0ldaqjL2Oy0KjwkWLUnW tUJXnlPs51eId1rVRInOJtSMSLjSk75jgRVszLMydHtOVharVXp7TXt757+44Nvx0Ubo6gY2USN/ 4aPngMhCpiAneluEyZWhXK06UoUFXuqPUwo0m7PYug6OQu0ilprQ8q45HcCxTvum/wzNDxrmzMgS Wmt91fqnRdGmoeOj75tSGkxBW9Ur/DIKG2Voi/7VEvFyKK3Pid/EeI1MGUuTh12gWNtv5o3/H9jl utnBd7nauAr+l8Ndfo9C9eHbo/XK4OlL15Jag8XQWLFJqN3APjRIW46I4u9sykiHoU5qW8HJKDj/ nVsBvCsuDPY7R9Fn+KET1+fKYt06o7pN85ebjv1s5GePemQX2bpcTVWXLdy1rbT7xd3S6enKatWf 28jSfTH0kQyXsYTaRr0YYkaNTiKcekgzsgyzrkq6WNbBq4Og9IeBevkRtEG1BvFcdoDJNCHwekYT E1LJwoVHqBYHMgvLj1Iv0nbZwXFiKpDWZHBb0HBej9Pm95DOibFr0ZiIjrwOLMY2C0NEmjM0lDS+ ZoKDS+emurtrGgrSRRIhNAFRLgSn6vnpYT7YQRcYCpfagpIpvK0YMQdQ86HaRuBCBaqI6G2CC6P/ kiV3LCktoHSqUYlDC6UXMRWzi0VYSmp1VSRYgfWQkjyzGUWfeCXLB7BMqZJsWhaljSECugIpRbmW 3HOL8DWYUvF95VIrMH1JYiCudafGZyCt/QVQDG2jHXYNDJBvbrtx6CQao1OJuOamU6sY5PJctCcT TZJx/BBgRUgkki2xBNLBq4yERnBSlRCycpeYzNhfwFhbS9GyFXWVGMxGafNrzrcagWSrXZpnAxcr zjfXKk9kyBJ2RJPgbe5saaFVcbJrZbcjNSNzqgSLz6SZYzbQ14E741m8t18zE0Sk2ECFUjaWiB1U kkmOkMHOMUoBusI4Is2hrISVOSoQKJJU1LE+IjGyDyNqGxFbrNyGXdgiV2hN9UhA8CMhOTyvVyt6 cMcELUWTESqJqi1dzRBTLZCsoZI41LbrIFuQWl7d5fBSWF7RfX8HE3MFlR0JKnXz5uNinGmZyVp4 rztWOiOYwnOxu6nNSpg7wi1UvhejrU5NulOcpZ3K8BA3Cdocgya01gmZ5R0UMgXgXRNdd5s/hNSX Wxrumq6RumrcVk8xIeImUJxLtglZQ9q8JCnOjJJCY0LkalqQ4UYYFFQfA+4rUtpvTm2EhA0bNsm2 WWMJihF45MK6BjNJyqZKolC+bu7bUJSGzZsNjYFjW20HQJ4spGoWHFKTFIiQ8hkHQtReSRBQkkys dEWAV2DPzd5te3hCPV3mbRMMjQVMFXEazuQ/mbQP9UR/FiN50GI3kMjchjYUSMx6VBynOMEKloI4 kaOTm6hYS8xibH9+r3rk8hrjrnhMbmyX4SXpVSabZd1al7gParlwvX5KELnfw5USLqv4f+/dF7Nm hCoCvFawNaCAMyIpsRCLVNH7l3XJaq7BWLV+153g1osQsimuymQ3RrQzuSkoOAGHrSaMKfSrHUhh DR0Kd/X6/lVy8UdyRDBNgpfYTRy+xihknzJLoCMxOtlgYi1SUhQoA6FQUUSBoYMwKiy1UElCs91t ALRe+wIFkahOGFqcIkBsqSILBBfKxFhyer8zmOXy0lZ3xIRjxDYmz9gVHvLJnIBV4gjZnfZuVF9i MT8Tmo7jjFtuUfNoK2CtDi5pt6rbGYl5BYoAigkB6ft+05Vm8/hQ5TB++sfAmoKc5aY1lZYaKFBH vMEzBDIHH4HwAVELE4Ns+v7o2rWLuQXGWEcqPqQI6V8BYlXPz5tJkU2zTbv4DwaCsppHnsPDshiv 356SjRkRg3JjVwjaQ8ZSC40DSRAMbZy7QhVCS9X5dMqYiSJEnBEQREGQ6hpuqY0ZRm9pZkxH7zkg 35DE5Ow7S8i4VhdalOZyzpUA434nDDeTOzKZtulF1IOJFiIAyLul2+yIic3QhTCUkl5UDRbvLogp sMDFew2haeTRPvOKkPkppXilN1S4prjFOlTPEXT21+6U9aDfTybrrnZ0cKLyXVIxbZBlVoFUzUaN OBqgsI9oCiGEnfqeMlgJyYPqCKu7fS84sYGVIglRPI0NgPxjgeTZip3BgoedQOSHbDqNk9+okxgU XmUIVYs/M0N8gmlAIvIU7jdjBIvH7jiBGBZcjm6S+R5Mp0I3oL2xDAYVBNBnFYHKhoa0vMBcTQbd lew5ZHoM/sHWb11Hlbb1I6zIjMJC9y8FpUvGPW1eHNYVDS2AwF3OxiPjEUFzIO9gUocFeel+ZsG0 x2GALKvBUStUQeSlIC4R7AXtW0+JPSIaUVZS4z/ZRBjYpnYTCAkcYkuOa6TSkuM65r0BHGeJ5GAH kllEVkyYrD882NN7Dl1Qf+Iyo+IEjVphILgoZA8QMZ1Mu79BsoCOk2Fhci1LIDaGknyZPAZ8M7Gm z04oJEkgD56g5FergW1BaYC7AX3UDR3mhHrAXkC9B2K4BJpoCxBBlA9yDrRe0iiCCAGu+BgjuKlt NkDzgAd7R6xbc/egvRAYNLmy5ZfkCIOBWoVpwFaTJsIOjzrXMkisITAz7kaLVZu1dWtWEkKpG0xC VZkVyD6JkBDBsHlsLEWh5wU7GNsuhVHRMhtk5xKEoDQJw1MGAQuyxVElQCmZMyAZIEhTVQmXklbo gukrkgk6hpMaTaVENLiENjBNJWht0RoZc/jtELQNGXzZ9e1aQFz8mw4GMwL0uI7YAUdJMSR9LGxu SawuCReLKoJgQi8gQxX+Hc6uTd91NEulIHu0RdirT0IL8y3mwkmlRGZWGtYAutCA5yhZvPxb3Ksv LgLBL63qPkDiZig9qkV3PliUhjYmBQkXgTblt/UZaM6Qs9KG0tWbHVtYy0ki9TpQbKPijHlNkqMo MSKz3gpQI8DLdwXxNp2VzlRSiIPPKs/EHFjLESLDwUzCVwjnK485p8YhwmPSiQ5JlDaGAc46goK9 ckAuMn1BMk05imzBBdiLMKYZgXIwfFWhAVlWuFWnsTRTABhfEkqtp+WNzZG8pRTlTXOsmaWJFR9R rBWlYIrRRNCsTaZMtEmSLKMtyKRoMouMmoErDU1gZgwsJm5tqwUCgtkLiXUk1lGkMBMSaDJk1XgS GDD4PLVyEXIJpM0kIdiIyjzsOtBIRGdGkUlJAuCDxRzb+v0gqklK/vJAsakYZwWJrEYnFWrjmFch HXz8YqTFxg0mkqyYKCbbSG1I6z5UQeRygfKGhEKw86B8gr4RamuhhhWhoIFLJjZIXQSIggIEmHGi EAahoOwFnhL3mUG+QFkOhVCX4pr2o8zD/4u5IpwoSGh4IAoA