From 9e5f007f3b9c16617289c4e319c88ca187225008 Mon Sep 17 00:00:00 2001 From: Xun Li Date: Mon, 19 Oct 2020 00:00:13 -0700 Subject: [PATCH 1/7] =?UTF-8?q?Add=20=E2=80=9CSet=20as=20Unique=20Value?= =?UTF-8?q?=E2=80=9D=20option=20in=20conditional=20histogram=20#2241?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Explore/ConditionalHistogramView.cpp | 143 ++- Explore/ConditionalHistogramView.h | 16 +- rc/GdaAppResources.cpp | 1208 +++++++++++++------------- rc/menus.xrc | 5 + 4 files changed, 739 insertions(+), 633 deletions(-) diff --git a/Explore/ConditionalHistogramView.cpp b/Explore/ConditionalHistogramView.cpp index ec20c99b8..ea43d6bf8 100644 --- a/Explore/ConditionalHistogramView.cpp +++ b/Explore/ConditionalHistogramView.cpp @@ -65,13 +65,15 @@ ConditionalHistogramCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size) : ConditionalNewCanvas(parent, t_frame, project_s, v_info, col_ids, false, true, pos, size), -show_axes(true), scale_x_over_time(true), scale_y_over_time(true) +show_axes(true), scale_x_over_time(true), scale_y_over_time(true), set_uniquevalue(false) { full_map_redraw_needed = true; - int hist_var_tms = data[HIST_VAR].shape()[0]; + int hist_var_tms = (int)data[HIST_VAR].shape()[0]; data_stats.resize(hist_var_tms); data_sorted.resize(hist_var_tms); + s_data_sorted.resize(hist_var_tms); + VAR_STRING.resize(hist_var_tms); // create bins for histogram for (int t=0; t undefs(num_obs, false); @@ -145,6 +147,61 @@ void ConditionalHistogramCanvas::DisplayRightClickMenu(const wxPoint& pos) template_frame->UpdateOptionMenuItems(); } +void ConditionalHistogramCanvas::OnSetUniqueValue(wxCommandEvent& event) +{ + set_uniquevalue = !set_uniquevalue; + + if (set_uniquevalue) { + for (int t=0; t sel_data(num_obs); + data[HIST_VAR]; + for (int i=0; i unique_dict; + // data_sorted is a pair value {string value: index} + VAR_STRING[t].resize(num_obs); + for (int i=0; i undefs(num_obs, false); + + for (int i=0; i& hs = highlight_state->GetHighlight(); // determine correct ivals for each obs in current time period @@ -726,27 +780,49 @@ void ConditionalHistogramCanvas::InitIntervals() ival_breaks.resize(boost::extents[num_time_vals][cur_intervals-1]); for (int t=0; t undefs = undef_tms[t]; - if (scale_x_over_time) { - min_ival_val[t] = data_min_over_time; - max_ival_val[t] = data_max_over_time; - } else { - min_ival_val[t] = data_sorted[t][0].first; - max_ival_val[t] = data_sorted[t][num_obs-1].first; - } - if (min_ival_val[t] == max_ival_val[t]) { - if (min_ival_val[t] == 0) { - max_ival_val[t] = 1; - } else { - max_ival_val[t] += fabs(max_ival_val[t])/2.0; - } - } - double range = max_ival_val[t] - min_ival_val[t]; - double ival_size = range/((double) cur_intervals); - - for (int i=0; i unique_dict; + // data_sorted is a pair value {string value: index} + for (int i=0; i::iterator it; + for (it=unique_dict.begin(); it!=unique_dict.end();it++){ + wxString lbl = it->first; + s_ival_breaks[t][cur_ival] = lbl; + cur_ival += 1; + } + + } else { + std::vector undefs = undef_tms[t]; + if (scale_x_over_time) { + min_ival_val[t] = data_min_over_time; + max_ival_val[t] = data_max_over_time; + } else { + min_ival_val[t] = data_sorted[t][0].first; + max_ival_val[t] = data_sorted[t][num_obs-1].first; + } + if (min_ival_val[t] == max_ival_val[t]) { + if (min_ival_val[t] == 0) { + max_ival_val[t] = 1; + } else { + max_ival_val[t] += fabs(max_ival_val[t])/2.0; + } + } + double range = max_ival_val[t] - min_ival_val[t]; + double ival_size = range/((double) cur_intervals); + + for (int i=0; iSetCheckMarks(optMenu); GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); UpdateOptionMenuItems(); + + // connect menu item ID_VIEW_HISTOGRAM_SET_UNIQUE + wxMenuItem* uniquevalue_menu = optMenu->FindItem(XRCID("ID_VIEW_HISTOGRAM_SET_UNIQUE")); + Connect(uniquevalue_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(ConditionalHistogramFrame::OnSetUniqueValue)); +} + +void ConditionalHistogramFrame::OnSetUniqueValue(wxCommandEvent& event) +{ + ((ConditionalHistogramCanvas*) template_canvas)->OnSetUniqueValue(event); } void ConditionalHistogramFrame::UpdateOptionMenuItems() diff --git a/Explore/ConditionalHistogramView.h b/Explore/ConditionalHistogramView.h index 2d8737e10..249fae7bf 100644 --- a/Explore/ConditionalHistogramView.h +++ b/Explore/ConditionalHistogramView.h @@ -68,14 +68,17 @@ class ConditionalHistogramCanvas : public ConditionalNewCanvas { virtual void UpdateStatusBar(); virtual void TimeSyncVariableToggle(int var_index); - + virtual void UserChangedCellCategories(); + void ShowAxes(bool show_axes); bool IsShowAxes() { return show_axes; } void HistogramIntervals(); void InitIntervals(); void UpdateIvalSelCnts(); - virtual void UserChangedCellCategories(); + + void OnSetUniqueValue(wxCommandEvent& event); + protected: void sel_shp_to_cell_gen(int i, int& r, int& c, int& ival, int cols, int ivals); @@ -85,7 +88,10 @@ class ConditionalHistogramCanvas : public ConditionalNewCanvas { static const int HIST_VAR; // histogram variable - // size = time_steps if HIST_VAR is time variant + bool set_uniquevalue; + std::vector > VAR_STRING; + std::vector s_data_sorted; + std::vector data_sorted; std::vector data_stats; std::vector > undef_tms; @@ -101,6 +107,7 @@ class ConditionalHistogramCanvas : public ConditionalNewCanvas { bool show_axes; + s_array_type s_ival_breaks; double data_min_over_time; double data_max_over_time; d_array_type ival_breaks; // size = num_time_vals * cur_num_intervals-1 @@ -147,7 +154,8 @@ class ConditionalHistogramFrame : public ConditionalNewFrame { void OnShowAxes(wxCommandEvent& event); void OnHistogramIntervals(wxCommandEvent& event); - + void OnSetUniqueValue(wxCommandEvent& event); + DECLARE_EVENT_TABLE() }; diff --git a/rc/GdaAppResources.cpp b/rc/GdaAppResources.cpp index aa86b4f9f..6c27d80e9 100644 --- a/rc/GdaAppResources.cpp +++ b/rc/GdaAppResources.cpp @@ -37882,7 +37882,7 @@ static unsigned char xml_res_file_11[] = { 47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62, 10}; -static size_t xml_res_size_12 = 243470; +static size_t xml_res_size_12 = 243661; static unsigned char xml_res_file_12[] = { 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101, 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,53,34,63, @@ -41834,787 +41834,795 @@ static unsigned char xml_res_file_12[] = { 62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73, -83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32, -68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110, -32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +101,61,34,73,68,95,86,73,69,87,95,72,73,83,84,79,71,82,65,77,95,83,69,84, +95,85,78,73,81,85,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,116,32,97,115,32,85,110,105,113,117,101,32,86,97,108,117, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, 101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97, -116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, -97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, -95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, -32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, -68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, -95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, -32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, -65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,66,79,88,80,76,79,84,95,86,73,69,87,95, -77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76,69,83, -83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101, -109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32, +68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65, +68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, +108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78, -84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,86,69,82,84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79, +85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76, +85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65, -78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79, +95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,66,79,88,80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, +79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67, +65,84,95,67,76,65,83,83,73,70,95,66,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,86,69,82,84,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84, +95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, +79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, 34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85, -65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,55,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108, +95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,52,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, -95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,57,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,54,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,86,69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69, -78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -80,101,114,99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +84,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,49,53,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97, -112,32,40,72,105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,51,48, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32, -77,97,112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82,79,80, -76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116, -105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108, -117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, -65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97, -107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, -95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83, -95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, -65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,56,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,54, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,49,48,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82, +79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65, -84,95,66,82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,57, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46, +53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51, +46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114, +100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69, -78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, -97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,85,78,73,81,85,69,95,86,65, +76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, +110,105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, +116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,50,34, +73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,50,34, 62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32,32,32,32, +69,82,84,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32, 32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, 99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95, -73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95, +66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,53,34,62,10, +95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,53,34,62,10, 32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, +84,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, 32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, +75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, 62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32, +79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32, 32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, +84,95,78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, 32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, +75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, 108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95, -66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, -67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, -117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,86,101,114,116,105,99,97,108,32, -66,105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,84,72,69,77,69,76,69,83,83,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101, -108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78, -84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81, -85,65,78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,53,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81, +85,95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118, +97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,52,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,81,85,65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,55,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, -79,82,73,90,95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84, -95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84, -72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,72,73, -78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48,41, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100, -32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,85,78,73,81,85,69,95,86,65,76, -85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110, -105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,83,85,66,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, -116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,50, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85, +66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83, +73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,86,101,114,116,105,99,97,108,32,66,105,110,115,32,66,114,101, +97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65, +84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, +79,82,73,90,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,83, +85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,52,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83, -95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,54,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, +79,82,73,90,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, -90,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +68,95,72,79,82,73,90,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85, +65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114, +99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72, +105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,51,48,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32, +40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66, -82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84,72, +95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117, +101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +78,65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101, +97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95, +66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,57,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, +95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69,78, -85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, -97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +82,73,90,95,78,65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84, +95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,50, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -69,81,85,95,73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83, -95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, +95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118,97, +108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, -90,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +90,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, 109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, -78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +78,84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,57,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, +95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116, -111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78, -69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101, -97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,111, -114,105,122,111,110,116,97,108,32,66,105,110,115,32,66,114,101,97,107,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66,79,88,80,76,79, -84,95,72,73,78,71,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -72,105,110,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,66,79,88,80,76,79,84,95, -72,73,78,71,69,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,49,46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,66,79,88, -80,76,79,84,95,72,73,78,71,69,51,48,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32, +82,73,90,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, +95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65,84,84,69,82,95,86, -73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83, -80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80, -114,101,99,105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83, -95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99, -105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82, +69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65, +84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115, +116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,66, -79,88,80,76,79,84,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, -83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115, -32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, -99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, -71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,60,108,97,98,101,108,62,72,111,114,105,122,111,110,116,97,108,32,66, +105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,66,79,88,80,76,79,84,95,72,73,78,71,69,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,72,105,110,103,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,66,79,88,80,76,79,84,95,72,73,78,71,69,49,53,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,49,46,53,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,66,79,88,80,76,79,84,95,72,73,78,71,69,51, +48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,46,48,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73, +79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116, +32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105, +115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65, +120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, -79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, -69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +101,61,34,73,68,95,67,79,78,68,95,66,79,88,80,76,79,84,95,83,72,79,87,95, +65,88,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +104,111,119,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, -65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,67,65,82,84,79,71,82,65,77,95,78,69,87,95,86,73,69,87,95,77, -69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109, -101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, +95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107, +103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69, +95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99, +116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66, +79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112, +121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, +32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, +115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,82,84,79,71,82,65, +77,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76, +65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, +73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, +76,69,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, -76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81, +85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, +95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, +73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82, +79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72, -95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73, -78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89, +83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61, +49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65, +76,89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103, +101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68, +68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116, +97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,85, +78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, +95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83, -95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48, -41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76, -89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97, -114,100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69, -95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, -116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76, +95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, diff --git a/rc/menus.xrc b/rc/menus.xrc index 49d680096..85472f707 100644 --- a/rc/menus.xrc +++ b/rc/menus.xrc @@ -2333,6 +2333,11 @@ + + + 1 + 0 + From 8e3851fe2f68b4c68fa261e884c24563714137f1 Mon Sep 17 00:00:00 2001 From: Xun Li Date: Mon, 19 Oct 2020 09:01:31 -0700 Subject: [PATCH 2/7] Quantile Lisa negative spatial autocorrelation #2242 --- DialogTools/MultiQuantileLisaDlg.cpp | 24 ++++++++++++++++++++---- DialogTools/MultiQuantileLisaDlg.h | 1 + version.h | 4 ++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/DialogTools/MultiQuantileLisaDlg.cpp b/DialogTools/MultiQuantileLisaDlg.cpp index fc04f13ad..06621b295 100644 --- a/DialogTools/MultiQuantileLisaDlg.cpp +++ b/DialogTools/MultiQuantileLisaDlg.cpp @@ -58,7 +58,7 @@ MultiQuantileLisaDlg::~MultiQuantileLisaDlg() void MultiQuantileLisaDlg::CreateControls() { wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, - wxSize(800,560), wxHSCROLL|wxVSCROLL ); + wxSize(800,520), wxHSCROLL|wxVSCROLL ); scrl->SetScrollRate(5, 5); wxPanel *panel = new wxPanel(scrl); @@ -108,7 +108,7 @@ void MultiQuantileLisaDlg::CreateControls() var_box->Add(gbox, 0, wxEXPAND); // list contrl - lst_quantile = new wxListCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(400, 180), wxLC_REPORT); + lst_quantile = new wxListCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(400, 160), wxLC_REPORT); lst_quantile->AppendColumn(_("Variable")); lst_quantile->SetColumnWidth(0, 80); lst_quantile->AppendColumn(_("Number of Quantiles"), wxLIST_FORMAT_RIGHT); @@ -118,7 +118,6 @@ void MultiQuantileLisaDlg::CreateControls() lst_quantile->AppendColumn(_("New Field")); lst_quantile->SetColumnWidth(3, 80); - // move buttons move_left = new wxButton(panel, wxID_ANY, "<", wxDefaultPosition, wxSize(25,25)); move_right = new wxButton(panel, wxID_ANY, ">", wxDefaultPosition, wxSize(25,25)); @@ -127,7 +126,10 @@ void MultiQuantileLisaDlg::CreateControls() left_box->Add(var_box); right_box->Add(lst_quantile, 1, wxALL|wxEXPAND, 5); - + + chk_nocolocation = new wxCheckBox(panel, wxID_ANY, "No co-location"); + right_box->Add(chk_nocolocation, 0, wxALL, 5); + hbox_quantile->Add(left_box); hbox_quantile->Add(middle_box); hbox_quantile->Add(right_box, 1, wxALL|wxEXPAND); @@ -217,6 +219,13 @@ void MultiQuantileLisaDlg::OnAddRow(wxCommandEvent& event) // check if inputs are valid if (project == NULL) return; + if (chk_nocolocation->GetValue() && lst_quantile->GetItemCount() >= 2) { + wxString err_msg = _("No-colocation only works with two variables for Quantile LISA."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + // get selected variable int sel_var = combo_var->GetSelection(); if (sel_var < 0) { @@ -343,6 +352,13 @@ void MultiQuantileLisaDlg::OnOK(wxCommandEvent& event ) return; } + if (chk_nocolocation->GetValue() && lst_quantile->GetItemCount() != 2) { + wxString err_msg = _("No-colocation only works with two variables for Quantile LISA."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + std::vector col_ids(num_vars); std::vector var_info(num_vars); wxString var_details; diff --git a/DialogTools/MultiQuantileLisaDlg.h b/DialogTools/MultiQuantileLisaDlg.h index 8020dae1d..c378a469d 100644 --- a/DialogTools/MultiQuantileLisaDlg.h +++ b/DialogTools/MultiQuantileLisaDlg.h @@ -58,6 +58,7 @@ class MultiQuantileLisaDlg : public AbstractClusterDlg wxListCtrl* lst_quantile; wxButton* move_left; wxButton* move_right; + wxCheckBox* chk_nocolocation; std::set new_fields; diff --git a/version.h b/version.h index d9ca2481f..cb83a7fe4 100644 --- a/version.h +++ b/version.h @@ -2,10 +2,10 @@ namespace Gda { const int version_major = 1; const int version_minor = 16; const int version_build = 0; - const int version_subbuild = 12; + const int version_subbuild = 14; const int version_year = 2020; const int version_month = 10; - const int version_day = 15; + const int version_day = 19; const int version_night = 0; const int version_type = 2; // 0: alpha, 1: beta, 2: release } From dc0a13f2109ce85b3c6bec291c150a963df41c4e Mon Sep 17 00:00:00 2001 From: Xun Li Date: Mon, 19 Oct 2020 21:40:46 -0700 Subject: [PATCH 3/7] #2241 update fix of adding "set as unique values" in conditional histogram --- Explore/ConditionalHistogramView.cpp | 170 +++++++++++++++++++-------- 1 file changed, 119 insertions(+), 51 deletions(-) diff --git a/Explore/ConditionalHistogramView.cpp b/Explore/ConditionalHistogramView.cpp index ea43d6bf8..d6ce5ec93 100644 --- a/Explore/ConditionalHistogramView.cpp +++ b/Explore/ConditionalHistogramView.cpp @@ -338,14 +338,43 @@ void ConditionalHistogramCanvas::ResizeSelectableShps(int virtual_scrn_w, GdaShape* s; if (show_axes) { + int t = var_info[HIST_VAR].time; + double x_min = 0; + double x_max = left_pad_const + right_pad_const + interval_width_const * cur_intervals + interval_gap_const * (cur_intervals-1); + + // orig_x_pos is the center of each histogram bar + std::vector orig_x_pos(cur_intervals); + for (int i=0; iapplyScaleTrans(st[r][c]); foreground_shps.push_front(s); + s = new GdaAxis(*y_axis); s->applyScaleTrans(st[r][c]); foreground_shps.push_front(s); + + if (set_uniquevalue) { + for (int ival=0; ivalapplyScaleTrans(st[r][c]); + foreground_shps.push_back(brk); + } + } } } } @@ -531,22 +560,23 @@ void ConditionalHistogramCanvas::PopulateCanvas() axis_scale_x.tics_str.resize(axis_scale_x.ticks); axis_scale_x.tics_str_show.resize(axis_scale_x.tics_str.size()); for (int i=0; i - setPen(GdaConst::qualitative_colors[ival%sz]); - selectable_shps[i]-> - setBrush(GdaConst::qualitative_colors[ival%sz]); + selectable_shps[i]->setPen(GdaConst::qualitative_colors[ival%sz]); + selectable_shps[i]->setBrush(GdaConst::qualitative_colors[ival%sz]); i++; } } @@ -765,9 +792,7 @@ void ConditionalHistogramCanvas::HistogramIntervals() obs_id_to_sel_shp, ival_obs_cnt and ival_obs_sel_cnt */ void ConditionalHistogramCanvas::InitIntervals() { - s_ival_breaks.resize(boost::extents[num_time_vals][cur_intervals]); - - std::vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); // determine correct ivals for each obs in current time period min_ival_val.resize(num_time_vals); @@ -775,10 +800,14 @@ void ConditionalHistogramCanvas::InitIntervals() max_num_obs_in_ival.resize(num_time_vals); overall_max_num_obs_in_ival = 0; - for (int t=0; t unique_ival_dict; ival_breaks.resize(boost::extents[num_time_vals][cur_intervals-1]); + s_ival_breaks.resize(boost::extents[num_time_vals][cur_intervals]); + for (int t=0; t unique_dict; @@ -797,6 +826,7 @@ void ConditionalHistogramCanvas::InitIntervals() for (it=unique_dict.begin(); it!=unique_dict.end();it++){ wxString lbl = it->first; s_ival_breaks[t][cur_ival] = lbl; + unique_ival_dict[lbl] = cur_ival; cur_ival += 1; } @@ -862,40 +892,78 @@ void ConditionalHistogramCanvas::InitIntervals() int dt = var_info[HIST_VAR].time_min; if (var_info[HIST_VAR].sync_with_global_time) dt += t; - - // record each obs in the correct cell and ival. + int cur_ival = 0; - for (int i=0; i= ival_breaks[0][cur_ival]) - { - cur_ival++; - } - int r = 0, c = 0; - if (!vert_cat_data.categories.empty()) { - r = vert_cat_data.categories[vt].id_to_cat[id]; + + // record each obs in the correct cell and ival. + if (set_uniquevalue) { + for (int i=0; i max_num_obs_in_ival[t]) + { + max_num_obs_in_ival[t] = cell_data[0][r][c].ival_obs_cnt[cur_ival]; + if (max_num_obs_in_ival[t] > overall_max_num_obs_in_ival) { + overall_max_num_obs_in_ival = max_num_obs_in_ival[t]; + } + } + if (hs[s_data_sorted[dt][i].second]) { + cell_data[0][r][c].ival_obs_sel_cnt[cur_ival]++; + } } - if (!horiz_cat_data.categories.empty()) { - c = horiz_cat_data.categories[ht].id_to_cat[id]; + + } else { + + for (int i=0; i= ival_breaks[0][cur_ival]) + { + cur_ival++; + } + int r = 0, c = 0; + if (!vert_cat_data.categories.empty()) { + r = vert_cat_data.categories[vt].id_to_cat[id]; + } + if (!horiz_cat_data.categories.empty()) { + c = horiz_cat_data.categories[ht].id_to_cat[id]; + } + obs_id_to_sel_shp[t][id] = cell_to_sel_shp_gen(r, c, cur_ival, + cols, cur_intervals); + cell_data[0][r][c].ival_to_obs_ids[cur_ival].push_front(id); + cell_data[0][r][c].ival_obs_cnt[cur_ival]++; + if (cell_data[0][r][c].ival_obs_cnt[cur_ival] > max_num_obs_in_ival[t]) + { + max_num_obs_in_ival[t] = cell_data[0][r][c].ival_obs_cnt[cur_ival]; + if (max_num_obs_in_ival[t] > overall_max_num_obs_in_ival) { + overall_max_num_obs_in_ival = max_num_obs_in_ival[t]; + } + } + if (hs[data_sorted[dt][i].second]) { + cell_data[0][r][c].ival_obs_sel_cnt[cur_ival]++; + } } - obs_id_to_sel_shp[t][id] = cell_to_sel_shp_gen(r, c, cur_ival, - cols, cur_intervals); - cell_data[0][r][c].ival_to_obs_ids[cur_ival].push_front(id); - cell_data[0][r][c].ival_obs_cnt[cur_ival]++; - if (cell_data[0][r][c].ival_obs_cnt[cur_ival] > max_num_obs_in_ival[t]) - { - max_num_obs_in_ival[t] = - cell_data[0][r][c].ival_obs_cnt[cur_ival]; - if (max_num_obs_in_ival[t] > overall_max_num_obs_in_ival) { - overall_max_num_obs_in_ival = max_num_obs_in_ival[t]; - } - } - if (hs[data_sorted[dt][i].second]) { - cell_data[0][r][c].ival_obs_sel_cnt[cur_ival]++; - } - } + } } } From f8fd59ecf64b637658b6fab7f08940e2a45d1203 Mon Sep 17 00:00:00 2001 From: Xun Li Date: Tue, 20 Oct 2020 13:03:30 -0700 Subject: [PATCH 4/7] #2241 fix set as unique values in histogram with time grouped variable --- Explore/ConditionalHistogramView.cpp | 188 +++++++++++++-------------- Explore/HistogramView.cpp | 8 +- GeoDa.cpp | 8 +- 3 files changed, 101 insertions(+), 103 deletions(-) diff --git a/Explore/ConditionalHistogramView.cpp b/Explore/ConditionalHistogramView.cpp index d6ce5ec93..005360969 100644 --- a/Explore/ConditionalHistogramView.cpp +++ b/Explore/ConditionalHistogramView.cpp @@ -96,7 +96,8 @@ show_axes(true), scale_x_over_time(true), scale_y_over_time(true), set_uniqueval } if (undef_tms.size() < num_time_vals) { - // case that histogram is non time variable, but horizontal / vertical may be time variable + // case that histogram is non time variable, + // but horizontal / vertical may be time variable for (int i=1; i undefs(num_obs, false); for (int j=0; j sel_data(num_obs); - data[HIST_VAR]; + for (int i=0; i 0) { + cur_intervals = std::max(cur_intervals, (int)unique_dict.size()); + } else { + cur_intervals = (int)unique_dict.size(); + } } } else { // restore bins for histogram @@ -208,11 +213,11 @@ void ConditionalHistogramCanvas::SetCheckMarks(wxMenu* menu) // following menu items if they were specified for this particular // view in the xrc file. Items that cannot be enable/disabled, // or are not checkable do not appear. - ConditionalNewCanvas::SetCheckMarks(menu); - GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SHOW_AXES"), - IsShowAxes()); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SHOW_AXES"), IsShowAxes()); + // set as unique value menuitem + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_VIEW_HISTOGRAM_SET_UNIQUE"), set_uniquevalue); } /** Override of TemplateCanvas method. */ @@ -339,8 +344,6 @@ void ConditionalHistogramCanvas::ResizeSelectableShps(int virtual_scrn_w, GdaShape* s; if (show_axes) { int t = var_info[HIST_VAR].time; - double x_min = 0; - double x_max = left_pad_const + right_pad_const + interval_width_const * cur_intervals + interval_gap_const * (cur_intervals-1); // orig_x_pos is the center of each histogram bar std::vector orig_x_pos(cur_intervals); @@ -363,14 +366,8 @@ void ConditionalHistogramCanvas::ResizeSelectableShps(int virtual_scrn_w, double x0 = orig_x_pos[ival] - interval_width_const/2.0; double x1 = orig_x_pos[ival] + interval_width_const/2.0; double y0 = 0; - double y1 = cell_data[0][r][c].ival_obs_cnt[ival]; // add label for x-axis - - GdaShapeText* brk = new GdaShapeText(s_ival_breaks[t][ival], - *GdaConst::small_font, - wxRealPoint(x0 /2.0 + x1 /2.0, y0), 0, - GdaShapeText::h_center, - GdaShapeText::v_center, 0, 25); + GdaShapeText* brk = new GdaShapeText(s_ival_breaks[t][ival], *GdaConst::small_font, wxRealPoint(x0 /2.0 + x1 /2.0, y0), 0, GdaShapeText::h_center, GdaShapeText::v_center, 0, 25); brk->applyScaleTrans(st[r][c]); foreground_shps.push_back(brk); } @@ -588,10 +585,9 @@ void ConditionalHistogramCanvas::PopulateCanvas() for (int ival=0; ivalsetPen(GdaConst::qualitative_colors[ival%sz]); selectable_shps[i]->setBrush(GdaConst::qualitative_colors[ival%sz]); i++; @@ -631,7 +627,7 @@ void ConditionalHistogramCanvas::ShowAxes(bool show_axes_s) void ConditionalHistogramCanvas::DetermineMouseHoverObjects(wxPoint pt) { total_hover_obs = 0; - for (int i=0, iend=selectable_shps.size(); ipointWithin(pt)) { hover_obs[total_hover_obs++] = i; if (total_hover_obs == max_hover_obs) break; @@ -643,13 +639,13 @@ void ConditionalHistogramCanvas::DetermineMouseHoverObjects(wxPoint pt) // are all rectangles. void ConditionalHistogramCanvas::UpdateSelection(bool shiftdown, bool pointsel) { + int t = var_info[HIST_VAR].time; bool rect_sel = (!pointsel && (brushtype == rectangle)); - int t = var_info[HIST_VAR].time; std::vector& hs = highlight_state->GetHighlight(); bool selection_changed = false; - int total_sel_shps = selectable_shps.size(); + int total_sel_shps = (int)selectable_shps.size(); wxPoint lower_left; wxPoint upper_right; @@ -687,17 +683,12 @@ void ConditionalHistogramCanvas::UpdateSelection(bool shiftdown, bool pointsel) sel_shp_to_cell(i, r, c, ival); GdaRectangle* rec = (GdaRectangle*) selectable_shps[i]; bool selected = ((pointsel && rec->pointWithin(sel1)) || - (rect_sel && - GenGeomAlgs::RectsIntersect(rec->lower_left, - rec->upper_right, - lower_left, upper_right))); - bool all_sel = (cell_data[0][r][c].ival_obs_cnt[ival] == - cell_data[0][r][c].ival_obs_sel_cnt[ival]); + (rect_sel && GenGeomAlgs::RectsIntersect(rec->lower_left, rec->upper_right, lower_left, upper_right))); if (selected) { // select currently unselected in ival for (std::list::iterator it = - cell_data[0][r][c].ival_to_obs_ids[ival].begin(); - it != cell_data[0][r][c].ival_to_obs_ids[ival].end(); it++) { + cell_data[t][r][c].ival_to_obs_ids[ival].begin(); + it != cell_data[t][r][c].ival_to_obs_ids[ival].end(); it++) { new_hs[(*it)]= true; selection_changed = true; } @@ -723,12 +714,12 @@ void ConditionalHistogramCanvas::UpdateSelection(bool shiftdown, bool pointsel) void ConditionalHistogramCanvas::DrawSelectableShapes(wxMemoryDC &dc) { - int t = var_info[HIST_VAR].time; int i=0; + int t = var_info[HIST_VAR].time; for (int r=0; rpaintSelf(dc); } i++; @@ -739,14 +730,14 @@ void ConditionalHistogramCanvas::DrawSelectableShapes(wxMemoryDC &dc) void ConditionalHistogramCanvas::DrawHighlightedShapes(wxMemoryDC &dc) { - int t = var_info[HIST_VAR].time; int i=0; + int t = var_info[HIST_VAR].time; double s; for (int r=0; rSet as Unique Values\" is selected."); + wxMessageDialog dlg (this, msg, _("Warning"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } cur_intervals = dlg.num_intervals; InitIntervals(); invalidateBms(); @@ -869,22 +866,22 @@ void ConditionalHistogramCanvas::InitIntervals() int rows = 1, cols = 1; if (!vert_cat_data.categories.empty()) { - rows = vert_cat_data.categories[vt].cat_vec.size(); + rows = (int)vert_cat_data.categories[vt].cat_vec.size(); } if (!horiz_cat_data.categories.empty()) { - cols = horiz_cat_data.categories[ht].cat_vec.size(); + cols = (int)horiz_cat_data.categories[ht].cat_vec.size(); } - cell_data[0].resize(boost::extents[rows][cols]); + cell_data[t].resize(boost::extents[rows][cols]); for (int r=0; r max_num_obs_in_ival[t]) + cell_data[t][r][c].ival_to_obs_ids[cur_ival].push_front(id); + cell_data[t][r][c].ival_obs_cnt[cur_ival]++; + if (cell_data[t][r][c].ival_obs_cnt[cur_ival] > max_num_obs_in_ival[t]) { - max_num_obs_in_ival[t] = cell_data[0][r][c].ival_obs_cnt[cur_ival]; + max_num_obs_in_ival[t] = cell_data[t][r][c].ival_obs_cnt[cur_ival]; if (max_num_obs_in_ival[t] > overall_max_num_obs_in_ival) { overall_max_num_obs_in_ival = max_num_obs_in_ival[t]; } } if (hs[s_data_sorted[dt][i].second]) { - cell_data[0][r][c].ival_obs_sel_cnt[cur_ival]++; + cell_data[t][r][c].ival_obs_sel_cnt[cur_ival]++; } } @@ -950,17 +947,17 @@ void ConditionalHistogramCanvas::InitIntervals() } obs_id_to_sel_shp[t][id] = cell_to_sel_shp_gen(r, c, cur_ival, cols, cur_intervals); - cell_data[0][r][c].ival_to_obs_ids[cur_ival].push_front(id); - cell_data[0][r][c].ival_obs_cnt[cur_ival]++; - if (cell_data[0][r][c].ival_obs_cnt[cur_ival] > max_num_obs_in_ival[t]) + cell_data[t][r][c].ival_to_obs_ids[cur_ival].push_front(id); + cell_data[t][r][c].ival_obs_cnt[cur_ival]++; + if (cell_data[t][r][c].ival_obs_cnt[cur_ival] > max_num_obs_in_ival[t]) { - max_num_obs_in_ival[t] = cell_data[0][r][c].ival_obs_cnt[cur_ival]; + max_num_obs_in_ival[t] = cell_data[t][r][c].ival_obs_cnt[cur_ival]; if (max_num_obs_in_ival[t] > overall_max_num_obs_in_ival) { overall_max_num_obs_in_ival = max_num_obs_in_ival[t]; } } if (hs[data_sorted[dt][i].second]) { - cell_data[0][r][c].ival_obs_sel_cnt[cur_ival]++; + cell_data[t][r][c].ival_obs_sel_cnt[cur_ival]++; } } } @@ -979,15 +976,15 @@ void ConditionalHistogramCanvas::UpdateIvalSelCnts() if (var_info[HOR_VAR].sync_with_global_time) ht += t; int rows = 1, cols = 1; if (!vert_cat_data.categories.empty()) { - rows = vert_cat_data.categories[vt].cat_vec.size(); + rows = (int)vert_cat_data.categories[vt].cat_vec.size(); } if (!horiz_cat_data.categories.empty()) { - cols = horiz_cat_data.categories[ht].cat_vec.size(); + cols = (int)horiz_cat_data.categories[ht].cat_vec.size(); } for (int r=0; rSetStatusText(s); } -void ConditionalHistogramCanvas::sel_shp_to_cell_gen(int i, - int& r, int& c, int& ival, - int cols, int ivals) +void ConditionalHistogramCanvas::sel_shp_to_cell_gen(int i, int& r, int& c, int& ival, int cols, int ivals) { int t = cols*ivals; r = t > 0 ? i/t : 0; @@ -1111,8 +1113,7 @@ void ConditionalHistogramCanvas::sel_shp_to_cell_gen(int i, ival = t%ivals; } -void ConditionalHistogramCanvas::sel_shp_to_cell(int i, int& r, - int& c, int& ival) +void ConditionalHistogramCanvas::sel_shp_to_cell(int i, int& r, int& c, int& ival) { // rows == vert_num_cats // cols == horiz_num_cats @@ -1149,10 +1150,7 @@ ConditionalHistogramFrame::ConditionalHistogramFrame(wxFrame *parent, int width, height; GetClientSize(&width, &height); - template_canvas = new ConditionalHistogramCanvas(this, this, project, - var_info, col_ids, - wxDefaultPosition, - wxSize(width,height)); + template_canvas = new ConditionalHistogramCanvas(this, this, project, var_info, col_ids, wxDefaultPosition, wxSize(width,height)); SetTitle(template_canvas->GetCanvasTitle()); template_canvas->SetScrollRate(1,1); DisplayStatusBar(true); @@ -1171,20 +1169,18 @@ void ConditionalHistogramFrame::OnActivate(wxActivateEvent& event) wxLogMessage("In ConditionalMapFrame::OnActivate()"); RegisterAsActive("ConditionalHistogramFrame", GetTitle()); } - if ( event.GetActive() && template_canvas ) + if ( event.GetActive() && template_canvas ) { template_canvas->SetFocus(); + } } void ConditionalHistogramFrame::MapMenus() { wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); // Map Options Menus - wxMenu* optMenu = wxXmlResource::Get()-> - LoadMenu("ID_COND_HISTOGRAM_VIEW_MENU_OPTIONS"); - ((ConditionalHistogramCanvas*) template_canvas)-> - AddTimeVariantOptionsToMenu(optMenu); - TemplateCanvas::AppendCustomCategories(optMenu, - project->GetCatClassifManager()); + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_COND_HISTOGRAM_VIEW_MENU_OPTIONS"); + ((ConditionalHistogramCanvas*) template_canvas)->AddTimeVariantOptionsToMenu(optMenu); + TemplateCanvas::AppendCustomCategories(optMenu, project->GetCatClassifManager()); ((ConditionalHistogramCanvas*) template_canvas)->SetCheckMarks(optMenu); GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); UpdateOptionMenuItems(); @@ -1204,8 +1200,7 @@ void ConditionalHistogramFrame::UpdateOptionMenuItems() TemplateFrame::UpdateOptionMenuItems(); // set common items first wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); int menu = mb->FindMenu(_("Options")); - if (menu == wxNOT_FOUND) { - } else { + if (menu != wxNOT_FOUND) { ((ConditionalHistogramCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); } @@ -1217,7 +1212,6 @@ void ConditionalHistogramFrame::UpdateContextMenuItems(wxMenu* menu) // following menu items if they were specified for this particular // view in the xrc file. Items that cannot be enable/disabled, // or are not checkable do not appear. - TemplateFrame::UpdateContextMenuItems(menu); // set common items } @@ -1231,8 +1225,7 @@ void ConditionalHistogramFrame::update(TimeState* o) void ConditionalHistogramFrame::OnShowAxes(wxCommandEvent& ev) { wxLogMessage("In ConditionalHistogramFrame::OnShowAxes()"); - ConditionalHistogramCanvas* t = - (ConditionalHistogramCanvas*) template_canvas; + ConditionalHistogramCanvas* t = (ConditionalHistogramCanvas*) template_canvas; t->ShowAxes(!t->IsShowAxes()); UpdateOptionMenuItems(); } @@ -1240,14 +1233,15 @@ void ConditionalHistogramFrame::OnShowAxes(wxCommandEvent& ev) void ConditionalHistogramFrame::OnHistogramIntervals(wxCommandEvent& ev) { wxLogMessage("In ConditionalHistogramFrame::OnHistogramIntervals()"); - ConditionalHistogramCanvas* t = - (ConditionalHistogramCanvas*) template_canvas; + ConditionalHistogramCanvas* t = (ConditionalHistogramCanvas*) template_canvas; t->HistogramIntervals(); } void ConditionalHistogramFrame::OnSaveCanvasImageAs(wxCommandEvent& event) { - if (!template_canvas) return; + if (!template_canvas) { + return; + } wxString title = project->GetProjectTitle(); GeneralWxUtils::SaveWindowAsImage(template_canvas, title); } diff --git a/Explore/HistogramView.cpp b/Explore/HistogramView.cpp index 220f4ffc9..2bd30d55b 100644 --- a/Explore/HistogramView.cpp +++ b/Explore/HistogramView.cpp @@ -244,8 +244,12 @@ void HistogramCanvas::OnSetUniqueValue(wxCommandEvent& event) unique_dict[sel_data[i]] += 1; } // add current [id] to ival_to_obs_ids - max_intervals = (int)unique_dict.size(); - cur_intervals = (int)unique_dict.size(); + max_intervals = std::min(MAX_INTERVALS, (int)unique_dict.size()); + if (t > 0) { + cur_intervals = std::max(cur_intervals, (int)unique_dict.size()); + } else { + cur_intervals = (int)unique_dict.size(); + } } } else { // restore diff --git a/GeoDa.cpp b/GeoDa.cpp index adbc93429..e4d6690ba 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -228,9 +228,9 @@ bool GdaApp::OnInit(void) // initialize OGR connection OGRDataAdapter::GetInstance(); - - checker = new wxSingleInstanceChecker("GdaApp"); - +#ifdef __WIN32__ + checker = new wxSingleInstanceChecker(); +#endif // load preferences PreferenceDlg::ReadFromCache(); @@ -285,7 +285,7 @@ bool GdaApp::OnInit(void) GdaInitXmlResource(); // call the init function in GdaAppResources.cpp // check crash - if (GdaConst::disable_crash_detect == false && !checker->IsAnotherRunning()) { + if (GdaConst::disable_crash_detect == false && (checker && !checker->IsAnotherRunning())) { std::vector items = OGRDataAdapter::GetInstance().GetHistory("NoCrash"); if (items.size() > 0) { wxString no_crash = items[0]; From 5c8b1ccb1665aed42305860326fa73fc659c9335 Mon Sep 17 00:00:00 2001 From: Xun Li Date: Tue, 20 Oct 2020 14:26:34 -0700 Subject: [PATCH 5/7] #2242 add check for non-colocation and colocation join count --- GeoDa.cpp | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/GeoDa.cpp b/GeoDa.cpp index e4d6690ba..1e8abcdeb 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -4256,20 +4256,23 @@ void GdaFrame::OnOpenBivariateLJC(wxCommandEvent& event) } // check if binary data - std::vector data; + std::vector data1, data2; + std::vector undef_data1, undef_data2; TableInterface* table_int = p->GetTableInt(); - table_int->GetColData(VS.col_ids[0], VS.var_info[0].time, data); - for (int i=0; iGetColData(VS.col_ids[0], VS.var_info[0].time, data1); + table_int->GetColUndefined(VS.col_ids[0], VS.var_info[0].time, undef_data1); + for (int i=0; iGetColData(VS.col_ids[1], VS.var_info[1].time, data); - for (int i=0; iGetColData(VS.col_ids[1], VS.var_info[1].time, data2); + table_int->GetColUndefined(VS.col_ids[1], VS.var_info[1].time, undef_data2); + for (int i=0; iGetNumRecords(); + + vector undefs; + for (int i=0; i 2) { + if (num_vars >= 2) { std::vector data(num_vars); // data[variable][time][obs] std::vector undef_data(num_vars); for (int i=0; i Date: Tue, 20 Oct 2020 14:37:41 -0700 Subject: [PATCH 6/7] #2242 update multiquantile lisa for colocation and no colocation cases --- DialogTools/MultiQuantileLisaDlg.cpp | 57 ++++++++++++++++++++++++++++ version.h | 4 +- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/DialogTools/MultiQuantileLisaDlg.cpp b/DialogTools/MultiQuantileLisaDlg.cpp index 06621b295..8941dc4af 100644 --- a/DialogTools/MultiQuantileLisaDlg.cpp +++ b/DialogTools/MultiQuantileLisaDlg.cpp @@ -457,6 +457,63 @@ void MultiQuantileLisaDlg::OnOK(wxCommandEvent& event ) } boost::uuids::uuid w_id = weights_ids[sel]; + // check if satisfy colocation and no-colocation cases + if (num_vars >= 2) { + std::vector data(num_vars); // data[variable][time][obs] + std::vector undef_data(num_vars); + for (int i=0; iGetColData(col_ids[i], data[i]); + table_int->GetColUndefined(col_ids[i], undef_data[i]); + } + GalElement* W = gw->gal; + int t = 0; + vector local_t; + for (int v=0; v undefs; + for (int i=0; iGetValue()) { + wxMessageDialog dlg (this, _("The selected variables have no co-location. Please change your selection, or select \"No colocation\" option for bivariate case."), _("Error"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } else if (chk_nocolocation->GetValue() && nocolocation == false) { + wxMessageDialog dlg (this, _("The selected variables have co-location. Please change your selection, or unselect \"No colocation\" option for bivariate case."), _("Error"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + } + JCCoordinator* lc = new JCCoordinator(w_id, project, var_info, col_ids); MLJCMapFrame *sf = new MLJCMapFrame(parent, project, lc, false); diff --git a/version.h b/version.h index cb83a7fe4..7d93e33fd 100644 --- a/version.h +++ b/version.h @@ -2,10 +2,10 @@ namespace Gda { const int version_major = 1; const int version_minor = 16; const int version_build = 0; - const int version_subbuild = 14; + const int version_subbuild = 16; const int version_year = 2020; const int version_month = 10; - const int version_day = 19; + const int version_day = 20; const int version_night = 0; const int version_type = 2; // 0: alpha, 1: beta, 2: release } From 4a3e1dbc4c084802ccaebb4ec29684a268c5a5b2 Mon Sep 17 00:00:00 2001 From: Xun Li Date: Tue, 20 Oct 2020 14:46:53 -0700 Subject: [PATCH 7/7] update for windows build --- GeoDa.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/GeoDa.cpp b/GeoDa.cpp index 1e8abcdeb..aa0657c92 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -778,9 +778,9 @@ GdaFrame::GdaFrame(const wxString& title, const wxPoint& pos, //CallAfter(&GdaFrame::ShowOpenDatasourceDlg,wxPoint(80, 220),true); // check update in a new thread - if (GdaConst::disable_auto_upgrade == false) { - CallAfter(&GdaFrame::CheckUpdate); - } + //if (GdaConst::disable_auto_upgrade == false) { + // CallAfter(&GdaFrame::CheckUpdate); + //} } GdaFrame::~GdaFrame()